Класифікація функцій хешу


9

В Інтернеті я натрапив на таке питання:

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

з відповідями на кшталт

  • Прямий метод
  • Метод віднімання
  • Метод модульового поділу
  • Метод вилучення цифр
  • Метод середнього квадрату
  • Спосіб складання
  • Псевдовипадковий метод

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

Відповіді:


4

Вони є способами перетворення хеш-коду в індекс масиву, який містить значення. Скажімо, у вас є хеш-код 0x12345678. Дуже велика кількість, і ви навряд чи матимете масив такого розміру. Якщо ви це зробите, ви можете просто зробити

Value = array[0x12345678];

І робиться (прямий метод).

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

Value = array[hashcode & 0xffff];

Або модифікуйте хеш-код на розмір масиву

Value = array[hashcode % array.size()]; // modulo division

І т.д.

Редагувати: це посилання може допомогти


Дякую, це все - посилання, здається, є джерелом цього ***. Це все ще не має сенсу, оскільки вони змішують багато речей разом: 1. обчислення хеш-коду з ключа (наприклад, складання та додавання), 2. поліпшення (= розмазування) хеша (наприклад, середина квадрата), 3. відображення хеш до індексу (наприклад, модуль, "&").
maaartinus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.