Чому його називають "хеш-таблицею" або "хеш-функцією"? Хеш для мене тут не має сенсу [закрито]


26

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

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

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

Згідно з моїм словником, хеш означає:

  1. Смажена страва з картоплі та м'яса (вкрай неважливо)
  2. # символ (знак числа AKA, знак фунта тощо) (як і раніше не має значення, можливо, просто неправильна номенклатура)
  3. Застосувати алгоритм до символьного рядка (все ще не має нічого спільного з унікальністю , що є найважливішою особливістю хеш-таблиці)
  4. Наріжте їжу
  5. Ще один термін для гашишу

Хтось знає, чому його називають хеш?


32
Ви ніби трохи не розумієте, що таке хеши. Унікальність явно не є властивістю хеш-функцій (тобто вони ніколи не є ін’єкційними).
Пітер Тейлор

1
@ Peter Taylor: хеш-таблиці визначають ін'єктивне відображення.
reinierpost

2
@ Петер Тейлор: щоб бути тріпотливими, їм не потрібно бути ін’єкційними , але іноді вони навіть біективні. Подумайте про типову реалізацію функції хешування для цілого числа :)
keppla

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

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

Відповіді:


46

Згідно з wikipedia, це стосується хеш-функції . Якщо ви хочете зробити крок далі, на сторінці вікі для хеш-функції написано, що використання слова "хеш" у хеш-функції зародилося так:

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


2
Не впевнений, що там роблять "піддомени". Просто хеш-функція ретельно "змішує" значення своєї області.
reinierpost

15

Французькою хеш-таблицею називають "table de hachage", споріднене дієслово "hacher" означає рубати / подрібнювати (переважно їжа). Дієслово to hashмає те саме значення в англійській мові.

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


2
Це насправді написано "hachage" та "hacher" без наголосу.
Птіваль

10

Число 3 має все спільне з цим. З Вікіпедії :

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

index = f(key, arrayLength)

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

Тож хеш-таблиця насправді не зберігає значення на основі ключа; він зберігає значення на основі хешованої версії цього ключа.


1
це залежить від того, що ви маєте на увазі під хеш-таблицею. Структура даних, запропонована мовами, такими як Perl, Java та C #, дає вам відображення "значення-значення", використовуючи тип хеш-таблиці, на яку ви посилаєтесь всередині.
reinierpost

10

Хеш-таблиці називають таким чином через використання хеш-коду і це пов’язано з "скороченням їжі".

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

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

3

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

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


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