ХЭширование МЕТОД СВЁРТКИ
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Срочно ПОМОГИТЕ нужна хеш-функция методом свёртки для поля ключа телефон. Можно фамилии. Кто напишет объясните как работает. У меня есть одна хэш функция но я не понимаю:function hesh (n:string):integer;begin hesh:=trunc(sqrt(strtoint(n[1])*597871+strtoint(n[2])*66430+strtoint(n[4])*7381+strtoint(n[5])*820+strtoint(n[7])*91+str toint(n[8])*10)); {+n[8];822}end;Почему стоит число 597871 потом ещё меньше число. ОТКУДА их брать. Кстати это функция для телефонного номера Например 54-89-12. ПОЖАЛУЙСТА ПОТОРОПИТЕСЬ С ОТВЕТАМИ ЗАВТРА НАДО СДАТЬ!!!!!!!!
Так, со сдачей ты уже опоздал...
В общем, если говорить просто, хэш-функция - это такая функция, которой можно передать какие-то данные, на которые она рассчитана, а выведет она какую-то ерунду. Фишка в том, что зная эту ерунду, исходные данные восстановить практически невозможно. Обусловлено это тем, что хэш-функция, как правило, пишется от балды.
В нашем случае, запустив эту функцию, приведенную у тебя, и передав ей аргументом строку '54-89-12', получим результат 1802. Теперь поставим обратную задачку: взять такой телефон, который при прогонке через эту функцию даст результат 1802. Эта задача практически нерешаема, если только полным перебором. Хэши широко используются, например, в криптографии.
Теперь отвечаю на вопросы.
>>объясните как работает
См. выше. Берешь нечто и получаешь ерунду. Вот эта ерунда тебе и нужна.
>>Почему стоит число 597871 потом ещё меньше число. ОТКУДА их брать
Как уже было сказано - эти числа взяты от балды. За это я обожаю хэш-функции: пиши что угодно, и не ошибешься. Единственное условие - для двух разных значений данных хэш-функция не должна быть одинаковой. Например, хэш для такого же телефона, но вида "сложить все цифры и поделить на 5" будет считаться неудачной, поскольку для, скажем, телефонов 12-34-56 и 56-34-12 выдаст совершенно одинаковый результат, что неприемлемо.
В общем, если говорить просто, хэш-функция - это такая функция, которой можно передать какие-то данные, на которые она рассчитана, а выведет она какую-то ерунду. Фишка в том, что зная эту ерунду, исходные данные восстановить практически невозможно. Обусловлено это тем, что хэш-функция, как правило, пишется от балды.
В нашем случае, запустив эту функцию, приведенную у тебя, и передав ей аргументом строку '54-89-12', получим результат 1802. Теперь поставим обратную задачку: взять такой телефон, который при прогонке через эту функцию даст результат 1802. Эта задача практически нерешаема, если только полным перебором. Хэши широко используются, например, в криптографии.
Теперь отвечаю на вопросы.
>>объясните как работает
См. выше. Берешь нечто и получаешь ерунду. Вот эта ерунда тебе и нужна.
>>Почему стоит число 597871 потом ещё меньше число. ОТКУДА их брать
Как уже было сказано - эти числа взяты от балды. За это я обожаю хэш-функции: пиши что угодно, и не ошибешься. Единственное условие - для двух разных значений данных хэш-функция не должна быть одинаковой. Например, хэш для такого же телефона, но вида "сложить все цифры и поделить на 5" будет считаться неудачной, поскольку для, скажем, телефонов 12-34-56 и 56-34-12 выдаст совершенно одинаковый результат, что неприемлемо.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.