Лінійне зондування (англ. Linear probing) — це схема в комп’ютерному програмуванні для вирішення колізій у хеш-таблицях, структурах даних для підтримки колекції пар ключ-значення та пошуку значення, пов’язаного з даним ключем. Він був винайдений у 1954 році Джином Амдалом, Елейн М. Макгроу та Артуром Самуелем і вперше проаналізований у 1963 році Дональдом Кнутом .
Разом із квадратичним зондуванням і подвійним хешуванням, лінійне зондування є формою відкритої адресації . У цих схемах кожна комірка хеш-таблиці зберігає одну пару ключ-значення. Коли хеш-функція викликає колізію, відображаючи новий ключ із коміркою хеш-таблиці, яка вже зайнята іншим ключем, лінійне зондування шукає в таблиці найближчу вільну комірку та вставляє туди новий ключ. Пошук значення виконується таким же чином, шляхом послідовного пошуку в таблиці, починаючи з позиції, заданої хеш-функцією, доки не буде знайдена комірка з відповідним ключем або порожня комірка.
Як пишуть Thorup та Zhang, (2012), «хеш-таблиці — це найбільш часто використовувані нетривіальні структури даних, а найпопулярніша реалізація на стандартному обладнанні використовує лінійне зондування, яке одночасно є швидким і простим». Лінійне зондування може забезпечити високу продуктивність завдяки хорошій , але більш чутливе до якості своєї хеш-функції, ніж деякі інші схеми вирішення колізій. Середній очікуваний час операції пошук є константним, так само і для операцій вставки або видалення, якщо вони реалізовані за допомогою випадкової хеш-функції, або . Гарних результатів також можна досягти на практиці за допомогою інших хеш-функцій, таких як MurmurHash .
Операції
Лінійне зондування є компонентом схем з відкритою адресацією для використання в хеш-таблиці для вирішення проблем пошуку у словнику. У задачі пошуку в словнику структура даних повинна працювати з набором пар ключ-значення, і повинна підтримувати можливість вставки та видалення цих пар, а також пошук значення яке асоційоване з даним ключем. Для рішення цієї задачі за допомогою відкритої адресації структурою даних є масив T (хеш-таблиця), де кожна з комірок T[i] (якщо вона непорожня) зберігає одну пару ключ–значення. Хеш-функція використовується для відображення кожного ключа в комірку T, де цей ключ має зберігатися, зазвичай перемішуючи ключі, щоб ключі з подібними значеннями не розміщувалися поруч один з одним у таблиці. Хеш-колізія виникає, коли хеш-функція відображає ключ у комірці, яка вже зайнята іншим ключем. Лінійне зондування — це стратегія вирішення колізій шляхом розміщення нового ключа в найближчій порожній клітинці.
Пошук
Для пошуку заданого ключа x перевіряються комірки T, починаючи з комірки з індексом h(x) (де h — хеш-функція) і далі комірки h(x) + 1, h(x) + 2, ..., аж поки не буде знайдено порожню комірку або комірку, ключ якої дорівнює x. Якщо знайдено комірку, що містить ключ, пошук повертає значення з цієї комірки. Інакше, якщо знайдено порожню комірку, ключ не може бути в таблиці, оскільки він був би розміщений у цій комірці, а не в будь-якій наступній комірці, у якій ще не проводився пошук. У цьому випадку пошук повертає, що ключ відсутній у словнику.
Вставка
Щоб вставити пару ключ-значення (x,v) у таблицю (можливо, замінивши будь-яку існуючу пару з таким же ключем), алгоритм вставки проходить ту саму послідовність комірок, що і для пошуку, доки не буде знайдено порожню комірку або комірку з ключем x. Нова пара ключ-значення записується в цю комірку.
Якщо вставка призведе до зростання коефіцієнта завантаження таблиці (частка зайнятих комірок) вище деякого попередньо встановленого порогу, всю таблицю можна замінити новою таблицею, більшою на постійний коефіцієнт (подібно до роботи динамічного масиву) з новою хеш-функцією. Встановлення цього порогу, близьким до нуля, і використання високої швидкості зростання для розміру таблиці призводить до швидших операцій хеш-таблиці, але більшого використання пам’яті. Зазвичай розмір таблиці збільшують вдвічі, коли коефіцієнт завантаження перевищує 1/2, в результаті чого фактичне завантаження перебуває між 1/4 і 1/2.
Видалення
Також можна видалити пару ключ-значення A зі словника. Однак просто очистити його комірку i недостатньо. Можливо існує інша пара ключ-значення B з таким же хеш значенням, яка була розміщена після зайнятої комірки. В такому випадку пошук B зупиниться на пустій комірці i (де раніше був A), і B не буде найдена.
Тому, після очистки комірки i, необхідно провести пошук у наступних комірках таблиці, доки не буде знайдена інша порожня комірка або ключ, який можна перемістити до комірки i (тобто ключ, хеш-значення якого дорівнює або менший ніж i ). Якщо знайдено порожню комірку, очищення комірки i є безпечним і процес видалення припиняється. Але, коли пошук знаходить ключ, який можна перемістити до клітинки i, необхідно виконати це переміщення. Процес має бути повторений таким же чином, доки він не завершиться досягненням комірки, яка вже була порожньою. У процесі переміщення ключів до попередніх клітинок кожен ключ перевіряється лише один раз. Таким чином, час завершення всього процесу пропорційний довжині блоку зайнятих комірок, що містить видалений ключ, що відповідає часу виконання інших операцій хеш-таблиці.
Альтернативно, можна використати стратегію , коли пара ключ-значення видаляється шляхом заміни значення спеціальним булевим прапорцем, що вказує на те що ключ видалений. Однак ці прапорці призводять до збільшення коефіцієнту завантаження хеш-таблиці. Але за цієї стратегії, якщо надто велика частка масиву стає зайнятою видаленими прапорцями, виникає необхідність очистити всі комірки з прапорцями та повторно перехешувати всі пари ключ-значення.
Властивості
Лінійне зондування забезпечує хорошу локальність посилань, це що для кожної операції потрібно всього кілька звернень до некезашованої пам’яті. Через це при низьких і помірних коефіцієнтах завантаження можна досягти високої продуктивність. Однак, у порівнянні з деякими іншими стратегіями відкритої адресації, його продуктивність деградує швидше при високих факторах завантаження через , та тому що колізія має тенденцію викликати більше колізій поблизу. Крім того, для досягнення високої продуктивності за допомогою цього методу потрібна хеш-функція вищої якості, ніж для деяких інших схем вирішення колізій. При використанні з низькоякісними хеш-функціями, які не можуть усунути нерівномірності у розподілі вхідних даних, лінійне зондування може бути повільнішим, ніж інші стратегії відкритої адресації, такі як , яке перебирає послідовність комірок, розділення яких визначається другою хеш-функцією, або , де розмір кожного кроку змінюється залежно від його положення в послідовності проб.
Аналіз
Використовуючи лінійне зондування, словникові операції можна реалізувати за константнийочікуваний час. Іншими словами, операції вставки, видалення та пошуку можуть бути реалізовані за час O(1), якщо коефіцієнт завантаження хеш-таблиці є константою, строго меншою за одиницю.
Більш детально, час для будь-якої конкретної операції (пошук, вставка або видалення) пропорційний довжині безперервного блоку зайнятих комірок, з якого починається операція. Якщо в хеш-таблиці з N комірок усі початкові комірки є однаково вірогідними, то максимальний блок із k зайнятих комірок міститиме початкове пошуку з ймовірністю k/N та потребуватиме часу O(k) незалежно від початкового місця пошуку. Таким чином, очікуваний час виконання операції можна обчислити як добуток цих двох членів, O(k2/N), сумованих по всіх максимальних блоках неперервних комірок у таблиці. Подібна сума квадратів довжин блоків дає границю очікування часу для випадкової хеш-функції (а не для випадкового початкового розташування в певному стані хеш-таблиці), шляхом підсумовування всіх блоків, які можуть існувати (а не тих, що фактично існує в даному стані таблиці), і множення члена для кожного потенційного блоку на ймовірність того, що блок фактично зайнятий. Тобто, якщо визначити Block(i,k) як подію, що максимальний безперервний блок зайнятих комірок довжиною k починаючи з індексу i, то очікуваний час на операцію буде
Цю формулу можна спростити, замінивши Block(i,k) на простішу необхідну умову Full(k), якщо принаймні k елементів мають хеш-значення, що знаходяться в блоці комірок довжиною k. Після цієї заміни значення в сумі більше не залежить від i, а фактор 1/N скасовує N членів зовнішньої суми. Ці спрощення зводять до межі
Але згідно з мультиплікативною формою обмеження Чернова, коли коефіцієнт завантаження менший одиницею, ймовірність того, що блок довжиною k містить принаймні k хешованих значень, є експоненційно малою як функція k, через що ця сума буде обмежена константою, незалежною від n. Також можна виконати такий же аналіз, використовуючи наближення Стірлінга замість обмеження Чернова, щоб оцінити ймовірність того, що блок містить рівно k хешованих значень.
З точки зору коефіцієнта завантаження α, очікуваний час успішного пошуку дорівнює O(1 + 1/(1 − α)), а очікуваний час невдалого пошуку (або введення нового ключа) дорівнює O(1 + 1/(1 − α)2). Для постійних коефіцієнтів завантаження з високою ймовірністю, найдовша послідовність зондування (серед послідовностей зондування для всіх ключів, збережених у таблиці) має логарифмічну довжину.
Вибір хеш-функції
Оскільки лінійне зондування особливо чутливе до нерівномірно розподілених хеш-значень, важливо поєднати його з високоякісною хеш-функцією, яка не створює таких нерівномірностей.
Наведений вище аналіз передбачає, що хеш кожного ключа є випадковим числом, незалежним від хешів усіх інших ключів. Це припущення є нереалістичним для більшості застосувань хешування. Однак випадкові чи псевдовипадкові хеш-значення можуть використовуватися під час хешування об’єктів по ідентифікатору, а не за по значенню. Наприклад, це робиться за допомогою лінійного зондування за допомогою класу IdentityHashMap з Java collections framework. Хеш-значення, яке цей клас асоціює з кожним об’єктом, його identityHashCode, гарантовано залишатиметься незмінним протягом усього життя об’єкта, але в іншому випадку є довільним. Оскільки identityHashCode створюється лише один раз для кожного об’єкта, і не обов’язково має бути пов’язаним з адресою чи значенням об’єкта, його побудова може включати повільніші обчислення, такі як виклик генератора випадкових чи псевдовипадкових чисел. Наприклад, Java 8 використовує генератор псевдовипадкових чисел для створення цих значень.
Для більшості застосувань хешування необхідно обчислювати хеш-функцію для кожного значення кожного разу, коли потрібен хеш, а не один раз під час створення об’єкта. У таких програмах випадкові чи псевдовипадкові числа не можна використовувати як хеш-значення, оскільки тоді різні об’єкти з однаковим значенням матимуть різні хеші. А криптографічні хеш-функції (які розроблені таким чином, що не відрізняються від справді випадкових функцій) зазвичай надто повільні для використання в хеш-таблицях. Замість цього були розроблені інші методи побудови хеш-функцій. Ці методи швидко обчислюють хеш-функцію та можуть добре працювати з лінійним зондуванням. Зокрема, лінійне зондування було проаналізовано на основі <span about="#mwt143" class="texhtml mvar" data-cx="[{"adapted":true,"partial":false,"targetExists":true,"mandatoryTargetParams":[],"optionalTargetParams":[]}]" data-mw="{"parts":[{"template":{"target":{"wt":"Mvar","href":"./Шаблон:Mvar"},"params":{"1":{"wt":"k"}},"i":0}}]}" data-ve-no-generated-contents="true" id="mwtw" style="font-style:italic;" typeof="mw:Transclusion">k</span> -незалежного хешування, класу хеш-функцій, які ініціалізуються з невеликого випадкового початкового числа та з однаковою ймовірністю відображають будь-який k -кортеж різних ключів в будь-який k -кортеж індексів. Параметр k можна розглядати як міру якості хеш-функції: чим більше k, тим більше часу знадобиться для обчислення хеш-функції, але вона поводитиметься подібніше до абсолютно випадкових функцій. Для лінійного зондування достатньо 5-незалежності, щоб гарантувати константний очікуваний час на операцію , тоді як деякі 4-незалежні хеш-функції працюють погано, і потребують логарифмічний час на операцію.
Інший метод побудови хеш-функцій з високою якістю та достатньою швидкістю — це табличне хешування. У цьому методі хеш-значення для ключа обчислюється шляхом використання кожного байта ключа як індексу в таблиці випадкових чисел (маючи окрему таблицю на кожну позицію байту). Числа з цих комірок таблиці потім об’єднуються за допомогою побітової операції виключне «АБО». Хеш-функції, побудовані таким чином, є 3-незалежні. Тим не менш, лінійне зондування з використанням цих хеш-функцій має константний очікуваний час на операцію. Табличне хешування, і стандартні методи генерації 5-незалежних хеш-функцій обмежені ключами, які мають фіксовану кількість бітів. Для обробки рядків або інших типів ключів змінної довжини можна скомбінувати простішу універсальну техніку хешування, яка відображає ключі на проміжні значення, і хеш-функцію вищої якості (5-незалежну або табуляцію), яка відображає проміжні значення на індекси хеш-таблиці.
За допомогою експериментальних порівнянь Richter et al. виявив, що сімейство хеш-функцій Multiply-Shift (визначених як ) є «найшвидшою хеш-функцією, інтегрованою з усіма схемами хешування, тобто забезпечує найвищу пропускну здатність і хорошу якість», тоді як табличне хешування дає «найнижчу пропускну здатність». Вони зазначають, що кожен пошук у таблиці потребує кількох циклів, що коштує дорожче, ніж прості арифметичні операції. Вони також виявили, що MurmurHash є кращим за табличне хешування: «Вивчаючи результати, надані Mult і Murmur, ми вважаємо, що використання табличного хешування (...) є менш привабливим на практиці».
Історія
Ідея асоціативного масиву, який дозволяє отримати доступ до даних за їх значенням, а не за адресою, сягає середини 1940-х років до робіт Конрада Цузе та Ванневара Буша , але хеш-таблиці не були описані, поки їх не описав Ганс Петер Лун в меморандум IBM в 1953 році. Лун використав інший метод вирішення колізій, ланцюжок, а не лінійне зондування.
Дональд Кнут підсумовує ранню історію лінійного зондувания. Це був перший метод відкритої адресації і на початку він був синонімом відкритої адресації. Згідно Кнуту, метод першим використав Джин Амдал, МакГроу, Элані М.[en] та Артур Семюел в 1954 в асемблерній програмі для комп'ютера IBM 701. Перша опублікований опис лінійного зондування дав Пітерсон, який згадав Семюеля, Амдала и МакГроу, але додав, що «система настільни органічна, що могла бути створена незалежно і іншими в той же час».
Перший теоретичний аналіз лінійного зондування, показав, що операція з випадковими хеш-функціями займає константний очікуваний час, був проведений Кнутом. Седжвік називає роботу Кнута «визначною віхою в аналізі алгоритмів». Значно пізніші розробки включають більш детальний аналіз розподілу ймовірностей часу роботи і доказ того, що лінійне зондування виконується за константний час на операцію з хеш-функціями зручними для практичного використання, а не з ідеалізованими випадковими функціями, проаналізованими раніше.
Список літератури
- ; Zhang, Yin (2012), Tabulation-based 5-independent hashing with applications to linear probing and second moment estimation, SIAM Journal on Computing, 41 (2): 293—331, doi:10.1137/100800774, MR 2914329
- Richter, Stefan; Alvarez, Victor; Dittrich, Jens (2015), A seven-dimensional analysis of hashing methods and its implications on query processing (PDF), Proceedings of the VLDB Endowment, 9 (3): 293—331, doi:10.14778/2850583.2850585
- ; (2015), Section 6.3.3: Linear Probing, Algorithm Design and Applications, Wiley, с. 200—203
- (22 лютого 2014), Section 5.2: LinearHashTable: Linear Probing, Open Data Structures (in pseudocode) (вид. 0.1Gβ), с. 108—116, процитовано 15 січня 2016
- ; Wayne, Kevin (2011), Algorithms (вид. 4th), Addison-Wesley Professional, с. 471, ISBN . Sedgewick and Wayne also halve the table size when a deletion would cause the load factor to become too low, causing them to use a wider range [1/8,1/2] in the possible values of the load factor.
- ; (2010), On the k-independence required by linear probing and minwise independence (PDF), , 37th International Colloquium, ICALP 2010, Bordeaux, France, July 6–10, 2010, Proceedings, Part I, , т. 6198, Springer, с. 715—726, arXiv:1302.5127, doi:10.1007/978-3-642-14165-2_60
- Heileman, Gregory L.; Luo, Wenbin (2005), How caching affects hashing (PDF), Seventh Workshop on Algorithm Engineering and Experiments (ALENEX 2005), с. 141—154
- Knuth, Donald (1963), , архів оригіналу за 3 березня 2016
- Eppstein, David (13 жовтня 2011), Linear probing made easy, 0xDE
- (2003), Section 14.3: Linear Probing, Algorithms in Java, Parts 1–4: Fundamentals, Data Structures, Sorting, Searching (вид. 3rd), Addison Wesley, с. 615—620, ISBN
- Pittel, B. (1987), Linear probing: the probable largest search time grows logarithmically with the number of records, Journal of Algorithms, 8 (2): 236—249, doi:10.1016/0196-6774(87)90040-X, MR 0890874
- IdentityHashMap, Java SE 7 Documentation, Oracle, процитовано 15 січня 2016
- Friesen, Jeff (2012), Beginning Java 7, Expert's voice in Java, Apress, с. 376, ISBN
- Kabutz, Heinz M. (9 вересня 2014), Identity Crisis, The Java Specialists' Newsletter, 222
- Weiss, Mark Allen (2014), Chapter 3: Data Structures, у Gonzalez, Teofilo; Diaz-Herrera, Jorge; Tucker, Allen (ред.), Computing Handbook, т. 1 (вид. 3rd), CRC Press, с. 3—11, ISBN .
- Pagh, Anna; ; Ružić, Milan (2009), Linear probing with constant independence, , 39 (3): 1107—1120, arXiv:cs/0612055, doi:10.1137/070702278, MR 2538852
- ; (2011), The power of simple tabulation hashing, Proceedings of the 43rd annual ACM (STOC '11), с. 1—10, arXiv:1011.5200, doi:10.1145/1993636.1993638
- Parhami, Behrooz (2006), Introduction to Parallel Processing: Algorithms and Architectures, Series in Computer Science, Springer, 4.1 Development of early models, p. 67, ISBN
- Morin, Pat (2004), Hash tables, у Mehta, Dinesh P.; Sahni, Sartaj (ред.), Handbook of Data Structures and Applications, Chapman & Hall / CRC, с. 915, ISBN .
- ; Poblete, P.; Viola, A. (1998), On the analysis of linear probing hashing (PDF), , 22 (4): 490—515, doi:10.1007/PL00009236, MR 1701625
- Knuth, D. E. (1998), Linear probing and graphs, , 22 (4): 561—568, arXiv:cs/9801103, doi:10.1007/PL00009240, MR 1701629
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Linijne zonduvannya angl Linear probing ce shema v komp yuternomu programuvanni dlya virishennya kolizij u hesh tablicyah strukturah danih dlya pidtrimki kolekciyi par klyuch znachennya ta poshuku znachennya pov yazanogo z danim klyuchem Vin buv vinajdenij u 1954 roci Dzhinom Amdalom Elejn M Makgrou ta Arturom Samuelem i vpershe proanalizovanij u 1963 roci Donaldom Knutom Koliziya mizh Dzhonom Smitom i Sandroyu Di obidva heshuyutsya do komirki 873 virishuyetsya shlyahom rozmishennya Sandri Di v nastupnomu vilnomu misci komirci 874 Razom iz kvadratichnim zonduvannyam i podvijnim heshuvannyam linijne zonduvannya ye formoyu vidkritoyi adresaciyi U cih shemah kozhna komirka hesh tablici zberigaye odnu paru klyuch znachennya Koli hesh funkciya viklikaye koliziyu vidobrazhayuchi novij klyuch iz komirkoyu hesh tablici yaka vzhe zajnyata inshim klyuchem linijne zonduvannya shukaye v tablici najblizhchu vilnu komirku ta vstavlyaye tudi novij klyuch Poshuk znachennya vikonuyetsya takim zhe chinom shlyahom poslidovnogo poshuku v tablici pochinayuchi z poziciyi zadanoyi hesh funkciyeyu doki ne bude znajdena komirka z vidpovidnim klyuchem abo porozhnya komirka Yak pishut Thorup ta Zhang 2012 hesh tablici ce najbilsh chasto vikoristovuvani netrivialni strukturi danih a najpopulyarnisha realizaciya na standartnomu obladnanni vikoristovuye linijne zonduvannya yake odnochasno ye shvidkim i prostim Linijne zonduvannya mozhe zabezpechiti visoku produktivnist zavdyaki horoshij ale bilsh chutlive do yakosti svoyeyi hesh funkciyi nizh deyaki inshi shemi virishennya kolizij Serednij ochikuvanij chas operaciyi poshuk ye konstantnim tak samo i dlya operacij vstavki abo vidalennya yaksho voni realizovani za dopomogoyu vipadkovoyi hesh funkciyi abo Garnih rezultativ takozh mozhna dosyagti na praktici za dopomogoyu inshih hesh funkcij takih yak MurmurHash OperaciyiLinijne zonduvannya ye komponentom shem z vidkritoyu adresaciyeyu dlya vikoristannya v hesh tablici dlya virishennya problem poshuku u slovniku U zadachi poshuku v slovniku struktura danih povinna pracyuvati z naborom par klyuch znachennya i povinna pidtrimuvati mozhlivist vstavki ta vidalennya cih par a takozh poshuk znachennya yake asocijovane z danim klyuchem Dlya rishennya ciyeyi zadachi za dopomogoyu vidkritoyi adresaciyi strukturoyu danih ye masiv T hesh tablicya de kozhna z komirok T i yaksho vona neporozhnya zberigaye odnu paru klyuch znachennya Hesh funkciya vikoristovuyetsya dlya vidobrazhennya kozhnogo klyucha v komirku T de cej klyuch maye zberigatisya zazvichaj peremishuyuchi klyuchi shob klyuchi z podibnimi znachennyami ne rozmishuvalisya poruch odin z odnim u tablici Hesh koliziya vinikaye koli hesh funkciya vidobrazhaye klyuch u komirci yaka vzhe zajnyata inshim klyuchem Linijne zonduvannya ce strategiya virishennya kolizij shlyahom rozmishennya novogo klyucha v najblizhchij porozhnij klitinci Poshuk Dlya poshuku zadanogo klyucha x pereviryayutsya komirki T pochinayuchi z komirki z indeksom h x de h hesh funkciya i dali komirki h x 1 h x 2 azh poki ne bude znajdeno porozhnyu komirku abo komirku klyuch yakoyi dorivnyuye x Yaksho znajdeno komirku sho mistit klyuch poshuk povertaye znachennya z ciyeyi komirki Inakshe yaksho znajdeno porozhnyu komirku klyuch ne mozhe buti v tablici oskilki vin buv bi rozmishenij u cij komirci a ne v bud yakij nastupnij komirci u yakij she ne provodivsya poshuk U comu vipadku poshuk povertaye sho klyuch vidsutnij u slovniku Vstavka Shob vstaviti paru klyuch znachennya x v u tablicyu mozhlivo zaminivshi bud yaku isnuyuchu paru z takim zhe klyuchem algoritm vstavki prohodit tu samu poslidovnist komirok sho i dlya poshuku doki ne bude znajdeno porozhnyu komirku abo komirku z klyuchem x Nova para klyuch znachennya zapisuyetsya v cyu komirku Yaksho vstavka prizvede do zrostannya koeficiyenta zavantazhennya tablici chastka zajnyatih komirok vishe deyakogo poperedno vstanovlenogo porogu vsyu tablicyu mozhna zaminiti novoyu tabliceyu bilshoyu na postijnij koeficiyent podibno do roboti dinamichnogo masivu z novoyu hesh funkciyeyu Vstanovlennya cogo porogu blizkim do nulya i vikoristannya visokoyi shvidkosti zrostannya dlya rozmiru tablici prizvodit do shvidshih operacij hesh tablici ale bilshogo vikoristannya pam yati Zazvichaj rozmir tablici zbilshuyut vdvichi koli koeficiyent zavantazhennya perevishuye 1 2 v rezultati chogo faktichne zavantazhennya perebuvaye mizh 1 4 i 1 2 Vidalennya Koli paru klyuch znachennya vidaleno mozhe znadobitisya peremistiti inshu paru nazad u yiyi komirku Takozh mozhna vidaliti paru klyuch znachennya A zi slovnika Odnak prosto ochistiti jogo komirku i nedostatno Mozhlivo isnuye insha para klyuch znachennya B z takim zhe hesh znachennyam yaka bula rozmishena pislya zajnyatoyi komirki V takomu vipadku poshuk B zupinitsya na pustij komirci i de ranishe buv A i B ne bude najdena Tomu pislya ochistki komirki i neobhidno provesti poshuk u nastupnih komirkah tablici doki ne bude znajdena insha porozhnya komirka abo klyuch yakij mozhna peremistiti do komirki i tobto klyuch hesh znachennya yakogo dorivnyuye abo menshij nizh i Yaksho znajdeno porozhnyu komirku ochishennya komirki i ye bezpechnim i proces vidalennya pripinyayetsya Ale koli poshuk znahodit klyuch yakij mozhna peremistiti do klitinki i neobhidno vikonati ce peremishennya Proces maye buti povtorenij takim zhe chinom doki vin ne zavershitsya dosyagnennyam komirki yaka vzhe bula porozhnoyu U procesi peremishennya klyuchiv do poperednih klitinok kozhen klyuch pereviryayetsya lishe odin raz Takim chinom chas zavershennya vsogo procesu proporcijnij dovzhini bloku zajnyatih komirok sho mistit vidalenij klyuch sho vidpovidaye chasu vikonannya inshih operacij hesh tablici Alternativno mozhna vikoristati strategiyu koli para klyuch znachennya vidalyayetsya shlyahom zamini znachennya specialnim bulevim praporcem sho vkazuye na te sho klyuch vidalenij Odnak ci praporci prizvodyat do zbilshennya koeficiyentu zavantazhennya hesh tablici Ale za ciyeyi strategiyi yaksho nadto velika chastka masivu staye zajnyatoyu vidalenimi praporcyami vinikaye neobhidnist ochistiti vsi komirki z praporcyami ta povtorno pereheshuvati vsi pari klyuch znachennya VlastivostiLinijne zonduvannya zabezpechuye horoshu lokalnist posilan ce sho dlya kozhnoyi operaciyi potribno vsogo kilka zvernen do nekezashovanoyi pam yati Cherez ce pri nizkih i pomirnih koeficiyentah zavantazhennya mozhna dosyagti visokoyi produktivnist Odnak u porivnyanni z deyakimi inshimi strategiyami vidkritoyi adresaciyi jogo produktivnist degraduye shvidshe pri visokih faktorah zavantazhennya cherez ta tomu sho koliziya maye tendenciyu viklikati bilshe kolizij poblizu Krim togo dlya dosyagnennya visokoyi produktivnosti za dopomogoyu cogo metodu potribna hesh funkciya vishoyi yakosti nizh dlya deyakih inshih shem virishennya kolizij Pri vikoristanni z nizkoyakisnimi hesh funkciyami yaki ne mozhut usunuti nerivnomirnosti u rozpodili vhidnih danih linijne zonduvannya mozhe buti povilnishim nizh inshi strategiyi vidkritoyi adresaciyi taki yak yake perebiraye poslidovnist komirok rozdilennya yakih viznachayetsya drugoyu hesh funkciyeyu abo de rozmir kozhnogo kroku zminyuyetsya zalezhno vid jogo polozhennya v poslidovnosti prob AnalizVikoristovuyuchi linijne zonduvannya slovnikovi operaciyi mozhna realizuvati za konstantnijochikuvanij chas Inshimi slovami operaciyi vstavki vidalennya ta poshuku mozhut buti realizovani za chas O 1 yaksho koeficiyent zavantazhennya hesh tablici ye konstantoyu strogo menshoyu za odinicyu Bilsh detalno chas dlya bud yakoyi konkretnoyi operaciyi poshuk vstavka abo vidalennya proporcijnij dovzhini bezperervnogo bloku zajnyatih komirok z yakogo pochinayetsya operaciya Yaksho v hesh tablici z N komirok usi pochatkovi komirki ye odnakovo virogidnimi to maksimalnij blok iz k zajnyatih komirok mistitime pochatkove poshuku z jmovirnistyu k N ta potrebuvatime chasu O k nezalezhno vid pochatkovogo miscya poshuku Takim chinom ochikuvanij chas vikonannya operaciyi mozhna obchisliti yak dobutok cih dvoh chleniv O k2 N sumovanih po vsih maksimalnih blokah neperervnih komirok u tablici Podibna suma kvadrativ dovzhin blokiv daye granicyu ochikuvannya chasu dlya vipadkovoyi hesh funkciyi a ne dlya vipadkovogo pochatkovogo roztashuvannya v pevnomu stani hesh tablici shlyahom pidsumovuvannya vsih blokiv yaki mozhut isnuvati a ne tih sho faktichno isnuye v danomu stani tablici i mnozhennya chlena dlya kozhnogo potencijnogo bloku na jmovirnist togo sho blok faktichno zajnyatij Tobto yaksho viznachiti Block i k yak podiyu sho maksimalnij bezperervnij blok zajnyatih komirok dovzhinoyu k pochinayuchi z indeksu i to ochikuvanij chas na operaciyu bude E T O 1 i 1N k 1nO k2 N Pr Block i k displaystyle E T O 1 sum i 1 N sum k 1 n O k 2 N operatorname Pr operatorname Block i k Cyu formulu mozhna sprostiti zaminivshi Block i k na prostishu neobhidnu umovu Full k yaksho prinajmni k elementiv mayut hesh znachennya sho znahodyatsya v bloci komirok dovzhinoyu k Pislya ciyeyi zamini znachennya v sumi bilshe ne zalezhit vid i a faktor 1 N skasovuye N chleniv zovnishnoyi sumi Ci sproshennya zvodyat do mezhi E T O 1 k 1nO k2 Pr Full k displaystyle E T leq O 1 sum k 1 n O k 2 operatorname Pr operatorname Full k Ale zgidno z multiplikativnoyu formoyu obmezhennya Chernova koli koeficiyent zavantazhennya menshij odiniceyu jmovirnist togo sho blok dovzhinoyu k mistit prinajmni k heshovanih znachen ye eksponencijno maloyu yak funkciya k cherez sho cya suma bude obmezhena konstantoyu nezalezhnoyu vid n Takozh mozhna vikonati takij zhe analiz vikoristovuyuchi nablizhennya Stirlinga zamist obmezhennya Chernova shob ociniti jmovirnist togo sho blok mistit rivno k heshovanih znachen Z tochki zoru koeficiyenta zavantazhennya a ochikuvanij chas uspishnogo poshuku dorivnyuye O 1 1 1 a a ochikuvanij chas nevdalogo poshuku abo vvedennya novogo klyucha dorivnyuye O 1 1 1 a 2 Dlya postijnih koeficiyentiv zavantazhennya z visokoyu jmovirnistyu najdovsha poslidovnist zonduvannya sered poslidovnostej zonduvannya dlya vsih klyuchiv zberezhenih u tablici maye logarifmichnu dovzhinu Vibir hesh funkciyiOskilki linijne zonduvannya osoblivo chutlive do nerivnomirno rozpodilenih hesh znachen vazhlivo poyednati jogo z visokoyakisnoyu hesh funkciyeyu yaka ne stvoryuye takih nerivnomirnostej Navedenij vishe analiz peredbachaye sho hesh kozhnogo klyucha ye vipadkovim chislom nezalezhnim vid heshiv usih inshih klyuchiv Ce pripushennya ye nerealistichnim dlya bilshosti zastosuvan heshuvannya Odnak vipadkovi chi psevdovipadkovi hesh znachennya mozhut vikoristovuvatisya pid chas heshuvannya ob yektiv po identifikatoru a ne za po znachennyu Napriklad ce robitsya za dopomogoyu linijnogo zonduvannya za dopomogoyu klasu IdentityHashMap z Java collections framework Hesh znachennya yake cej klas asociyuye z kozhnim ob yektom jogo identityHashCode garantovano zalishatimetsya nezminnim protyagom usogo zhittya ob yekta ale v inshomu vipadku ye dovilnim Oskilki identityHashCode stvoryuyetsya lishe odin raz dlya kozhnogo ob yekta i ne obov yazkovo maye buti pov yazanim z adresoyu chi znachennyam ob yekta jogo pobudova mozhe vklyuchati povilnishi obchislennya taki yak viklik generatora vipadkovih chi psevdovipadkovih chisel Napriklad Java 8 vikoristovuye generator psevdovipadkovih chisel dlya stvorennya cih znachen Dlya bilshosti zastosuvan heshuvannya neobhidno obchislyuvati hesh funkciyu dlya kozhnogo znachennya kozhnogo razu koli potriben hesh a ne odin raz pid chas stvorennya ob yekta U takih programah vipadkovi chi psevdovipadkovi chisla ne mozhna vikoristovuvati yak hesh znachennya oskilki todi rizni ob yekti z odnakovim znachennyam matimut rizni heshi A kriptografichni hesh funkciyi yaki rozrobleni takim chinom sho ne vidriznyayutsya vid spravdi vipadkovih funkcij zazvichaj nadto povilni dlya vikoristannya v hesh tablicyah Zamist cogo buli rozrobleni inshi metodi pobudovi hesh funkcij Ci metodi shvidko obchislyuyut hesh funkciyu ta mozhut dobre pracyuvati z linijnim zonduvannyam Zokrema linijne zonduvannya bulo proanalizovano na osnovi lt span about mwt143 class texhtml mvar data cx amp quot adapted amp quot true amp quot partial amp quot false amp quot targetExists amp quot true amp quot mandatoryTargetParams amp quot amp quot optionalTargetParams amp quot data mw amp quot parts amp quot amp quot template amp quot amp quot target amp quot amp quot wt amp quot amp quot Mvar amp quot amp quot href amp quot amp quot Shablon Mvar amp quot amp quot params amp quot amp quot 1 amp quot amp quot wt amp quot amp quot k amp quot amp quot i amp quot 0 data ve no generated contents true id mwtw style font style italic typeof mw Transclusion gt k lt span gt nezalezhnogo heshuvannya klasu hesh funkcij yaki inicializuyutsya z nevelikogo vipadkovogo pochatkovogo chisla ta z odnakovoyu jmovirnistyu vidobrazhayut bud yakij k kortezh riznih klyuchiv v bud yakij k kortezh indeksiv Parametr k mozhna rozglyadati yak miru yakosti hesh funkciyi chim bilshe k tim bilshe chasu znadobitsya dlya obchislennya hesh funkciyi ale vona povoditimetsya podibnishe do absolyutno vipadkovih funkcij Dlya linijnogo zonduvannya dostatno 5 nezalezhnosti shob garantuvati konstantnij ochikuvanij chas na operaciyu todi yak deyaki 4 nezalezhni hesh funkciyi pracyuyut pogano i potrebuyut logarifmichnij chas na operaciyu Inshij metod pobudovi hesh funkcij z visokoyu yakistyu ta dostatnoyu shvidkistyu ce tablichne heshuvannya U comu metodi hesh znachennya dlya klyucha obchislyuyetsya shlyahom vikoristannya kozhnogo bajta klyucha yak indeksu v tablici vipadkovih chisel mayuchi okremu tablicyu na kozhnu poziciyu bajtu Chisla z cih komirok tablici potim ob yednuyutsya za dopomogoyu pobitovoyi operaciyi viklyuchne ABO Hesh funkciyi pobudovani takim chinom ye 3 nezalezhni Tim ne mensh linijne zonduvannya z vikoristannyam cih hesh funkcij maye konstantnij ochikuvanij chas na operaciyu Tablichne heshuvannya i standartni metodi generaciyi 5 nezalezhnih hesh funkcij obmezheni klyuchami yaki mayut fiksovanu kilkist bitiv Dlya obrobki ryadkiv abo inshih tipiv klyuchiv zminnoyi dovzhini mozhna skombinuvati prostishu universalnu tehniku heshuvannya yaka vidobrazhaye klyuchi na promizhni znachennya i hesh funkciyu vishoyi yakosti 5 nezalezhnu abo tabulyaciyu yaka vidobrazhaye promizhni znachennya na indeksi hesh tablici Za dopomogoyu eksperimentalnih porivnyan Richter et al viyaviv sho simejstvo hesh funkcij Multiply Shift viznachenih yak hz x x zmod2w 2w d displaystyle h z x x cdot z bmod 2 w div 2 w d ye najshvidshoyu hesh funkciyeyu integrovanoyu z usima shemami heshuvannya tobto zabezpechuye najvishu propusknu zdatnist i horoshu yakist todi yak tablichne heshuvannya daye najnizhchu propusknu zdatnist Voni zaznachayut sho kozhen poshuk u tablici potrebuye kilkoh cikliv sho koshtuye dorozhche nizh prosti arifmetichni operaciyi Voni takozh viyavili sho MurmurHash ye krashim za tablichne heshuvannya Vivchayuchi rezultati nadani Mult i Murmur mi vvazhayemo sho vikoristannya tablichnogo heshuvannya ye mensh privablivim na praktici IstoriyaIdeya asociativnogo masivu yakij dozvolyaye otrimati dostup do danih za yih znachennyam a ne za adresoyu syagaye seredini 1940 h rokiv do robit Konrada Cuze ta Vannevara Busha ale hesh tablici ne buli opisani poki yih ne opisav Gans Peter Lun v memorandum IBM v 1953 roci Lun vikoristav inshij metod virishennya kolizij lancyuzhok a ne linijne zonduvannya Donald Knut pidsumovuye rannyu istoriyu linijnogo zonduvaniya Ce buv pershij metod vidkritoyi adresaciyi i na pochatku vin buv sinonimom vidkritoyi adresaciyi Zgidno Knutu metod pershim vikoristav Dzhin Amdal MakGrou Elani M en ta Artur Semyuel v 1954 v asemblernij programi dlya komp yutera IBM 701 Persha opublikovanij opis linijnogo zonduvannya dav Piterson yakij zgadav Semyuelya Amdala i MakGrou ale dodav sho sistema nastilni organichna sho mogla buti stvorena nezalezhno i inshimi v toj zhe chas Pershij teoretichnij analiz linijnogo zonduvannya pokazav sho operaciya z vipadkovimi hesh funkciyami zajmaye konstantnij ochikuvanij chas buv provedenij Knutom Sedzhvik nazivaye robotu Knuta viznachnoyu vihoyu v analizi algoritmiv Znachno piznishi rozrobki vklyuchayut bilsh detalnij analiz rozpodilu jmovirnostej chasu roboti i dokaz togo sho linijne zonduvannya vikonuyetsya za konstantnij chas na operaciyu z hesh funkciyami zruchnimi dlya praktichnogo vikoristannya a ne z idealizovanimi vipadkovimi funkciyami proanalizovanimi ranishe Spisok literaturi Zhang Yin 2012 Tabulation based 5 independent hashing with applications to linear probing and second moment estimation SIAM Journal on Computing 41 2 293 331 doi 10 1137 100800774 MR 2914329 Richter Stefan Alvarez Victor Dittrich Jens 2015 A seven dimensional analysis of hashing methods and its implications on query processing PDF Proceedings of the VLDB Endowment 9 3 293 331 doi 10 14778 2850583 2850585 2015 Section 6 3 3 Linear Probing Algorithm Design and Applications Wiley s 200 203 22 lyutogo 2014 Section 5 2 LinearHashTable Linear Probing Open Data Structures in pseudocode vid 0 1Gb s 108 116 procitovano 15 sichnya 2016 Wayne Kevin 2011 Algorithms vid 4th Addison Wesley Professional s 471 ISBN 9780321573513 Sedgewick and Wayne also halve the table size when a deletion would cause the load factor to become too low causing them to use a wider range 1 8 1 2 in the possible values of the load factor 2010 On the k independence required by linear probing and minwise independence PDF 37th International Colloquium ICALP 2010 Bordeaux France July 6 10 2010 Proceedings Part I t 6198 Springer s 715 726 arXiv 1302 5127 doi 10 1007 978 3 642 14165 2 60 Heileman Gregory L Luo Wenbin 2005 How caching affects hashing PDF Seventh Workshop on Algorithm Engineering and Experiments ALENEX 2005 s 141 154 Knuth Donald 1963 arhiv originalu za 3 bereznya 2016 Eppstein David 13 zhovtnya 2011 Linear probing made easy 0xDE 2003 Section 14 3 Linear Probing Algorithms in Java Parts 1 4 Fundamentals Data Structures Sorting Searching vid 3rd Addison Wesley s 615 620 ISBN 9780321623973 Pittel B 1987 Linear probing the probable largest search time grows logarithmically with the number of records Journal of Algorithms 8 2 236 249 doi 10 1016 0196 6774 87 90040 X MR 0890874 IdentityHashMap Java SE 7 Documentation Oracle procitovano 15 sichnya 2016 Friesen Jeff 2012 Beginning Java 7 Expert s voice in Java Apress s 376 ISBN 9781430239109 Kabutz Heinz M 9 veresnya 2014 Identity Crisis The Java Specialists Newsletter 222 Weiss Mark Allen 2014 Chapter 3 Data Structures u Gonzalez Teofilo Diaz Herrera Jorge Tucker Allen red Computing Handbook t 1 vid 3rd CRC Press s 3 11 ISBN 9781439898536 Pagh Anna Ruzic Milan 2009 Linear probing with constant independence 39 3 1107 1120 arXiv cs 0612055 doi 10 1137 070702278 MR 2538852 2011 The power of simple tabulation hashing Proceedings of the 43rd annual ACM STOC 11 s 1 10 arXiv 1011 5200 doi 10 1145 1993636 1993638 Parhami Behrooz 2006 Introduction to Parallel Processing Algorithms and Architectures Series in Computer Science Springer 4 1 Development of early models p 67 ISBN 9780306469640 Morin Pat 2004 Hash tables u Mehta Dinesh P Sahni Sartaj red Handbook of Data Structures and Applications Chapman amp Hall CRC s 915 ISBN 9781420035179 Poblete P Viola A 1998 On the analysis of linear probing hashing PDF 22 4 490 515 doi 10 1007 PL00009236 MR 1701625 Knuth D E 1998 Linear probing and graphs 22 4 561 568 arXiv cs 9801103 doi 10 1007 PL00009240 MR 1701629