Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

Снова про хэш функции   Найти похожие ветки 

 
oomneeq ©   (2003-03-19 11:10) [0]

Приветствую уважаемое сообчество,

Мне нужна функция, генерирующая соответствие литералам (уникальным именам) уникальный целочисленный код.

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

//Hash-function - stolen from ($DELPHI)\Source\Vcl\dbtables.pas
function GetHashCode(Str: PChar): Integer;
var
Off, Len, Skip, I: Integer;
begin
Result := 0;
Off := 1;
Len := StrLen(Str);
if Len < 16 then
for I := (Len - 1) downto 0 do
begin
Result := (Result * 37) + Ord(Str[Off]); //(1)
Inc(Off);
end
else
begin
{ Only sample some characters }
Skip := Len div 8;
I := Len - 1;
while I >= 0 do
begin
Result := (Result * 39) + Ord(Str[Off]);
Dec(I, Skip);
Inc(Off, Skip);
end;
end;
end;


Про коллизии я в курсе, и оговорюсь сразу, что в моей задаче пространство имен весьма небольшое, скажем заведомо меньше 1000

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


 
Jel ©   (2003-03-19 11:17) [1]

Простейший способ - посчитать CRC32 строки.


 
Digitman ©   (2003-03-19 11:25) [2]

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



Страницы: 1 вся ветка

Текущий архив: 2003.03.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.03 c
7-100481
Кирюшин Андрей
2003-02-06 20:59
2003.03.31
Параметры командной строки


9-100136
Whitewolf
2002-04-18 12:30
2003.03.31
Большой массив данных. Как лучше реализовать?


4-100504
Antosya
2003-01-27 14:48
2003.03.31
Как мне словить надатие комбинации клавиш?


9-100133
Fog
2002-10-29 15:20
2003.03.31
Бэкгроунд


7-100501
Skywalker
2003-02-05 18:04
2003.03.31
Громкость