Значення відкритого хешування та закритого хешування


94

Відкритий штрихування (роздільне ланцюг):

У відкритому хешуванні ключі зберігаються у пов'язаних списках, приєднаних до комірок хеш-таблиці.

Закритий хешинг (відкрита адресація):

У закритому хешуванні всі ключі зберігаються в самій хеш-таблиці без використання пов'язаних списків.

Я не можу зрозуміти, чому їх називають відкритими, закритими та окремими. Хтось може це пояснити?


Насправді ми ніколи не зберігаємо ключі в хеш-таблицях, беремо кортеж (ключ, значення) і використовуємо ключ для обчислення місця, де значення має зберігатися. Тож насправді ми зберігаємо значення в Таблиці хешу
Містер Сур'яа Джа

Відповіді:


117

Використання "закритого" проти "відкритого" відображає, чи ми заблоковані у використанні певної позиції чи структури даних (це надзвичайно розпливчастий опис, але, сподіваємось, решта допомагає).

Наприклад, "відкрити" у "відкритій адресації" повідомляє нам, що індекс (ака. Адреса), при якому об'єкт буде зберігатися в хеш-таблиці, не повністю визначається його хеш-кодом. Натомість індекс може змінюватись залежно від того, що вже є у хеш-таблиці.

"Закритий" у "закритому хешировании" означає те, що ми ніколи не залишаємо хеш-таблицю; кожен об'єкт зберігається безпосередньо в індексі у внутрішньому масиві хеш-таблиці. Зауважте, що це можливо лише за допомогою якоїсь стратегії відкритої адреси. Це пояснює, чому "закрите хешування" та "відкрита адресація" є синонімами.

Контрастуйте це з відкритим хешуванням - у цій стратегії жоден з об'єктів насправді не зберігається в масиві хеш-таблиці; замість того, як тільки хеш-об'єкт об'єкт зберігається, він зберігається у списку, який є окремим від внутрішнього масиву хеш-таблиці. "відкритий" означає свободу, яку ми отримуємо, залишаючи хеш-таблицю та використовуючи окремий список. До речі, "окремий список" натякає на те, чому відкрите хешування також відоме як "окреме ланцюжок".

Коротше кажучи, "закритий" завжди відноситься до якоїсь суворої гарантії, наприклад, коли ми гарантуємо, що об'єкти завжди зберігаються безпосередньо в хеш-таблиці (закрите хешування). Тоді протилежне до "закритого" - "відкрите", тому якщо у вас немає таких гарантій, стратегія вважається "відкритою".


17
Слід додати, що Open Hashing (Separate Chaining) не обмежується переліченими списками, які не є кешованими та не піддаються кеш-атакам при атаках зіткнення з поведінкою O (n / 2). Ви також можете використовувати дерева або відсортовані масиви для ковшів, що стикаються.
рубан

downvote через суперечливу інформацію: ви сказали, що "відкрито" і "закрито - це синоніми, то в кінці:" протилежне "закрито" - "відкрито"
Marwen Trabelsi

1
@MarwenTrabelsi Я ніколи не говорив, що "закритий" і "відкритий" - синоніми.
Кен Уейн ВандерЛінде

"Це пояснює, чому" закрите хешування "та" відкрита адресація "є синонімами."
Марвен Трабелсі

1
Чи може хтось надати джерело, яке доводить, що це правильна історична етимологія?
Сантропедро

3

У вас є масив, який є "хеш-таблицею".

У Open Hashing кожна комірка в масиві вказує на список, що контактує зіткненнями. Хешування отримало однаковий індекс для всіх елементів у пов'язаному списку.

У закритому хешингу ви використовуєте лише один масив для всього. Ви зберігаєте зіткнення в одному масиві. Трюк полягає у використанні розумного способу перейти від зіткнення до зіткнення, коли ви знайдете те, що хочете. І робити це відтворюваним / детермінованим способом.


2

Назва відкритої адресації означає те, що розташування ("адреса") елемента не визначається його хеш-значенням. (Цей метод також називають закритим хешированием).

У окремому ланцюжку кожне відро є незалежним та має певний тип ADT (список, двійкові дерева пошуку тощо) записів з тим самим індексом. У хорошій хеш-таблиці кожне відро має нуль або одну запис, оскільки для вставки, пошуку тощо потрібні операції порядку O (1).

Це приклад з окремою ланцюжка з використанням C ++ з простою хеш - функції з використанням мод оператора (очевидно, поганий хеш - функції)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.