Другие языки программирования и технологии

Подскажите по хэш функциям. Объясните, не понимаю.

Подскажите, вот мы решаем задачу по нахождению коллизий в хэш функциях. Т. е ищем произвольную пару X и Y, где H(X)=H(Y), где H-хэш функция. Подскажите, а зачем???? Как мы это на практике используем ???Не понимаю. Спасибо!!!
1. Электронная подпись - это тоже хэш-функция. Имея информацию о коллизиях, можно подменить текст подписанного документа.

2. Частота возникновения коллизий прямо влияет на быстродействие хэширования, которое очень часто используется в программировании. Например, массивы в PHP реализованы именно в виде хэш-таблиц.
HG
Hasan Gul
58 619
Лучший ответ
Антон Мочалов А можете по подробней про электронную подпись. Как это так можно подменить имея информацию о коллизиях. Спасибо огромное. У меня выступление в четверг, а этот нюанс не понимаю!
Основная задача - компромисс скорости и минимума коллизий. Эта тема хорошо освещена у Кнута, а понятно разжевана у Седжвика. Объясню сразу на примере. Самый банальный пример - бинарное дерево. Основная характеристика ноды дерева - операция меньше (<). Т. е. мы в поиске элемента в дереве, постоянно опрашиваем ноды на предмет меньше наш ключ, или нет. И соответвенно принимаем решение уйти влево или вправо на ноде. Или же она искома. Но даже не это важно. Важно скорость сравнения. Нам заранее известно, что максимальная скорость сравнения у нас integer(в зависимости разрядности процессора). Она константна, и занимает один такт (O(n)). Возникает проблема, если ключ у нас сложнее, например, дерево у нас хранит данные пользователей, а ключ - имя прользователя. В таком случае, у нас сравнение в худшем случае 2log(средняя длина имени). Это немного, но если пользователей достаточно - то весьма весомо. Поэтому, в большинстве случаев, либо переходят на хеш таблицы, где время поиска близко к O(n), либо заменяю ключ на хеш, что собственно, в большинстве реализаций и есть хеш таблица (утверждение не окончательно, есть и Ъ хеш таблицы).
в большинстве случаев, при строковых или сложных ключах, программист решает задачу легко. Хеш функция - просто сумма байт. Вычисление хеша занимает минимум времени, вставка быстра, но ...Коллизия...
Допустим мы добавляем пользователя "ашот". Суммируем все байты имени, и получаем число - n. Потом, к нам хочет добавится пользватель "тоша". И бах... Сумма байт совпадает. Это и есть коллизия. И поиск вероятности коллизии - это и есть поиск холотой середины, между сложностью реализации и скоростью исполнения.