Дізнавшись, про що йдеться, я подумав написати пояснення простішого пояснення за аналогією:
Резюме: Що таке хеш-код?
- Це відбиток пальців. Ми можемо використовувати цей відбиток пальців для виявлення людей, які цікавлять вас.
Детальніше читайте нижче:
Подумайте про хеш-код, як ми намагаємось унікально ідентифікувати когось
Я детектив, на вигляд злочинця. Назвемо його містером Жорстоким. (Він був горезвісним вбивцею, коли я був дитиною - він увірвався в будинок викраденого і вбив бідну дівчину, скинув її тіло і він все ще вийшов на волю - але це вже окрема справа). Містер Круль має певні особливості, які я можу використати, щоб однозначно визначити його серед моря людей. У нас в Австралії 25 мільйонів людей. Один з них - містер жорстокий. Як ми можемо його знайти?
Погані способи виявлення жорстокого містера
Мабуть, містер Крулий має блакитні очі. Це не дуже допомагає, оскільки майже половина населення Австралії також має блакитні очі.
Хороші способи виявлення жорстокого містера
Що ще я можу використовувати? Я знаю: я буду використовувати відбиток пальця!
Переваги :
- Двом людям насправді важко мати однаковий відбиток пальців (не неможливо, але вкрай малоймовірно).
- Відбиток містера Круля ніколи не зміниться.
- Кожна частина всієї істоти містера Крулеля: його зовнішній вигляд, колір волосся, особистість, харчові звички тощо повинні (в ідеалі) відображатися в його відбитку пальців, таким чином, якщо у нього є брат (який дуже схожий, але не однаковий) - то обидва повинні мати різні відбитки пальців. Я кажу "слід", тому що ми не можемо гарантувати на 100%, що двоє людей у цьому світі матимуть різні відбитки пальців.
- Але ми завжди можемо гарантувати, що містер Cruel завжди матиме однаковий відбиток пальця - і його відбиток ніколи не зміниться.
Наведені вище характеристики, як правило, служать для хороших хеш-функцій.
То яка ж угода з «Колізіями»?
Тож уявіть, якби я взяв на себе ведучу роль і знайду когось, що відповідає пальцям пальців містера Круле. Це означає, що я знайшов містера Жорстокого?
........ можливо! Я повинен уважніше придивитися. Якщо я використовую SHA256 (хеширующую функцію) і шукаю в маленькому містечку всього 5 людей - то є дуже хороший шанс, що я його знайшов! Але якщо я використовую MD5 (ще одну відому хеширующую функцію) і перевіряю наявність відбитків пальців у місті з + 2 ^ 1000 людей, то це досить хороша можливість, що двоє абсолютно різних людей можуть мати однаковий відбиток пальців.
То яка ж користь у всьому цьому?
Єдиною реальною перевагою хеш-кодів є те, якщо ви хочете щось помістити в хеш-таблицю - і з хеш-таблицями ви хочете швидко знайти об’єкти - і ось тут входить хеш-код. Вони дозволяють вам знайти речі в хеш-таблицях дійсно швидко. Це хак, який масово покращує продуктивність, але з невеликим рахунком точності.
Тож давайте уявимо, що в нас в Австралії є хеш-таблиця, наповнена людьми - 25 мільйонів підозрюваних. Містер Крулий десь там ..... Як ми можемо його швидко знайти ? Нам потрібно все розібратися: щоб знайти потенційну відповідність чи іншим чином звільнити потенційних підозрюваних. Ви не хочете враховувати унікальні характеристики кожної людини, оскільки це займе занадто багато часу. Що б ви використали замість цього? Ви б використовували хеш-код! Хеш-код може сказати вам, якщо дві людини різні. Чи Джо Блоггс НЕ містер жорстокий. Якщо відбитки не збігаються, то ви знаєте, що це точно НЕ містер жорстокий. Але, якщо палець друкує збігаютьсято залежно від використовуваної хеш-функції, швидше за все, ви знайшли свого чоловіка. Але це не на 100%. Єдиний спосіб, який ви можете бути впевнений, - це розслідувати далі: (i) чи мав він / вона можливість / мотив, (ii) свідків тощо тощо.
Якщо ви користуєтесь комп’ютерами, якщо два об'єкти мають однакове значення хеш-коду, вам потрібно знову дослідити, чи справді вони рівні. наприклад, вам доведеться перевірити, чи мають об'єкти, наприклад, однакову висоту, однакову вагу тощо, чи цілі числа однакові, або якщо customer_id збігається, і тоді прийдете до висновку, чи однакові вони. це, як правило, робиться, можливо, шляхом впровадження інтерфейсів IComparer або IEquality.
Основне резюме
Тому в основному хеш-код - це відбиток пальців.
- Двоє різних людей / об'єктів теоретично все ще можуть мати однаковий відбиток пальців. Або іншими словами. Якщо у вас два відбитки пальців, які однакові ........., вони не потребують обох походження від однієї людини / об'єкта.
- Buuuuuut, та сама людина / об'єкт завжди повертатиме той
самий відбиток пальця .
- Що означає, що якщо два об’єкти повертають різні хеш-коди, то ви на 100% знаєте, що ці об’єкти різні.
Потрібно пройти 3 хвилини, щоб обернути голову. Можливо, прочитайте його кілька разів, поки це не має сенсу. Я сподіваюся, що це комусь допомагає, бо мені знадобилося багато горя, щоб все це навчитися!