Функція хешування в C - Типи методів вирішення колізій

Зміст:

Anonim

Вступ до функції хешування в С

У цій статті є коротка примітка щодо хешування (хеш-таблиця та хеш-функція). Найважливішим поняттям є «пошук», який визначає складність часу. Для зменшення трудомісткості часу, ніж будь-яка інша концепція хешування структури даних, введено концепцію хешування O (1) в середньому випадку, а в гіршому випадку - O (n).

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

Що таке функція хешу?

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

Види функції хешу

Нижче описані типи хеш-функцій:

1. Метод поділу

У цьому методі хеш-функція залежить від залишку поділу.

Приклад: елементів, які слід розмістити в хеш-таблиці, є 42, 78, 89, 64, а розмір таблиці візьмемо як 10.

Хеш (ключ) = Елементи% розміру таблиці;

2 = 42% 10;

8 = 78% 10;

9 = 89% 10;

4 = 64% 10;

Представлення таблиці можна побачити як нижче:

2. Метод середньої площі

У цьому способі середню частину елемента квадрата приймають за індекс.

Елементом для розміщення в хеш-таблиці є 210, 350, 99, 890, а розмір таблиці - 100.

210 * 210 = 44100, індекс = 1, оскільки середня частина результату (44100) дорівнює 1.

350 * 350 = 122500, індекс = 25, оскільки середня частина результату (122500) дорівнює 25.

99 * 99 = 9801, індекс = 80, оскільки середня частина результату (9801) дорівнює 80.

890 * 890 = 792100, індекс = 21, оскільки середня частина результату (792100) дорівнює 21.

3. Метод складання цифр

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

Елемент для розміщення - 23576623, 34687734.

  • хеш (ключ) = 235 + 766 + 23 = 1024
  • хеш-ключ) = 34 + 68 + 77 + 34 = 213

Припустимо, у цих типах хешування є числа від 1 до 100 і розмір хеш-таблиці = 10. Елементи = 23, 12, 32

Хеш (ключ) = 23% 10 = 3;

Хеш (ключ) = 12% 10 = 2;

Хеш (ключ) = 32% 10 = 2;

З вищенаведеного прикладу зауважте, що обидва елементи 12 і 32 вказують на 2-е місце в таблиці, де неможливо записати обидва в одному місці, така проблема відома як зіткнення. Щоб уникнути подібних проблем, існують деякі методи хеш-функцій, які можна використовувати.

Типи методів вирішення колізій

Давайте обговоримо види методи вирішення зіткнень:

1. Прикування

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

Приклад: 23, 12, 32 з розміром таблиці 10.

Хеш (ключ) = 23% 10 = 3;

Хеш (ключ) = 12% 10 = 2;

Хеш (ключ) = 32% 10 = 2;

2. Відкрити адресацію

  • Лінійне зондування

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

Приклад: 23, 12, 32 з розміром таблиці 10

Хеш (ключ) = 23% 10 = 3;

Хеш (ключ) = 12% 10 = 2;

Хеш (ключ) = 32% 10 = 2;

На цій діаграмі 12 і 32 можуть бути розміщені в одному записі з індексом 2, але за цим методом вони розміщуються лінійно.

  • Квадратне зондування

Цей метод є вирішенням проблеми кластеризації під час лінійного зондування. У цьому методі хеш-функція з хеш-ключем обчислюється як хеш (ключ) = (хеш (ключ) + х * х)% розміру таблиці (де х = 0, 1, 2…).

Приклад: 23, 12, 32 з розміром таблиці 10

Хеш (ключ) = 23% 10 = 3;

Хеш (ключ) = 12% 10 = 2;

Хеш (ключ) = 32% 10 = 2;

У цьому ми бачимо, що 23 і 12 можна легко розмістити, але 32 не можуть знову, оскільки 12 і 32 поділяють той самий запис з тим самим індексом у таблиці, як за цим методом хеш (ключ) = (32 + 1 * 1) % 10 = 3. Але в цьому випадку запис таблиці з індексом 3 розміщується з 23, тому ми повинні збільшити значення x на 1. Хеш (ключ) = (32 + 2 * 2)% 10 = 6. Тож тепер ми можемо розмістити 32 у записі з індексом 6 таблиці.

  • Подвійне хешування

Цим методом ми повинні обчислити 2 хеш-функції для вирішення проблеми зіткнення. Перший розраховується за допомогою простого методу поділу. Друге має задовольняти двом правилам; вона не повинна дорівнювати 0, а записи повинні бути перевірені.

  • 1 (ключ) = ключ% розмір таблиці.
  • 2 (ключ) = p - (клавіша mod p), де p - прості числа <розмір таблиці.

Приклад: 23, 12, 32 з розміром таблиці 10

Хеш (ключ) = 23% 10 = 3;

Хеш (ключ) = 12% 10 = 2;

Хеш (ключ) = 32% 10 = 2;

У цьому повторі елемент 32 можна розмістити за допомогою хеш2 (ключ) = 5 - (32% 5) = 3. Отже, 32 можна розмістити в індексі 5 таблиці, яка порожня, оскільки нам потрібно перейти 3 записи, щоб розмістити її.

Висновок-Хешинг функція в С

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

Рекомендовані статті

Це посібник щодо функції Хешинга в C. Тут ми обговорюємо введення функції Хешинга в C, що таке хеш-функція, типи хеш-функції тощо. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Хешинг в СУБД
  2. Процес шифрування
  3. Як встановити CakePHP?
  4. Як працює блокчейн
  5. Функція хешування на Java
  6. Функція хешування в PHP | Як працювати?