Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
14-100422
warkan
2003-03-14 00:08
2003.03.31
Люди как юзать ..


1-100243
NetKnight
2003-03-18 11:56
2003.03.31
Директива {$IFDEF} ?


1-100279
Uran
2003-03-19 11:33
2003.03.31
Тип линии в TChart


1-100268
EagleOwl
2003-03-16 22:09
2003.03.31
Как запустить какую-нибудь программу из своей?


1-100221
BOA_KAA
2003-03-20 13:35
2003.03.31
DblClick на Image е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский