Определение хэш-функции - PullRequest
8 голосов
/ 16 марта 2011

Как мы можем найти наиболее эффективную хеш-функцию (наименьшие возможные шансы на столкновение) для набора строк.

Предположим, нам даны некоторые строки. И длина строк также не определена. Аджай Виджай Rakhi ....

мы знаем количество нет. из доступных строк, поэтому мы можем создать хэш-таблицу размера (количество доступно). что может быть идеальной хеш-функцией, которую мы могли бы разработать для такой проблемы ??

Умножение каждого символа ascii на 31 (простое число) с приращением приводит к тому, что значение хеша больше значения MAX_INT, и тогда модуль не будет работать должным образом ... Поэтому, пожалуйста, дайте некоторое эффективное наращивание хэш-функции решение ....

У меня мало наборов строк, допустим, count = 10 .... Мне нужно реализовать хеш-функцию так, чтобы все эти 10 строк однозначно вписывались в хеш-таблицу .... Любая идеальная хеш-функция O ( 1) доступно, для такого рода проблем ?? размер хеш-таблицы будет 10, для этого случая ...

Только программирование на С ...

Пожалуйста, объясните логику на сайте .... http://burtleburtle.net/bob/c/perfect.c Это выглядит очень сложно, но идеально для меня .. !! Какой алгоритм используется здесь ... Чтение кода сразу, очень сложно !!

Спасибо ....

Ответы [ 4 ]

15 голосов
/ 16 марта 2011

Проверьте некоторые из них, они, очевидно, имеют хорошие распределения

http://www.partow.net/programming/hashfunctions/#HashingMethodologies

3 голосов
/ 16 марта 2011

Возможно, вы захотите взглянуть на идеальное хеширование.

2 голосов
/ 16 марта 2011

вы можете захотеть взглянуть на gperf , вы можете сделать это на лету, если вы не делали это слишком часто и ваши данные были небольшими. если строки известны заранее, то это метод

0 голосов
/ 16 марта 2011

Хеш-таблицы предназначены для обработки динамического ввода. Если вы можете гарантировать только определенный набор входов и хотите гарантировать отдельный слот для каждого входа, зачем вообще хеш?

Просто создайте индексированный массив для каждого известного доступного ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...