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

Вниз

Функция хеширования стринга.   Найти похожие ветки 

 
Ш-К   (2007-02-28 16:20) [0]

Вот стандартная функция:
function TextHash(const S: string): cardinal;
const
 cLongBits     = 32;
 cOneEight     = 4;
 cThreeFourths = 24;
 cHighBits     = $F0000000;
var
 I:    integer;
 P:    PChar;
 Temp: cardinal;
begin
 { TODO : I should really be processing 4 bytes at once... }
 Result := 0;
 P      := PChar(S);

 I := Length(S);
 while I > 0 do
 begin
   Result := (Result shl cOneEight) + Ord(UpCase(P^));
   Temp   := Result and cHighBits;
   if Temp <> 0 then
     Result := (Result xor (Temp shr cThreeFourths)) and (not cHighBits);
   Dec(I);
   Inc(P);
 end;
end;


Могут ли подобные функции хешировать 11 символьный стринг уникально?


 
Джо ©   (2007-02-28 16:26) [1]

> [0] Ш-К   (28.02.07 16:20)
> Могут ли подобные функции хешировать 11 символьный стринг
> уникально?

Собственно, хэш-функция без коллизий — это уже не хэш-функция, а шифрование или компрессия.


 
Джо ©   (2007-02-28 16:36) [2]

> [1] Джо ©   (28.02.07 16:26)

Сорри, так криво выразился, что лучше бы уже и не встревал. Все от спешки.


 
Ш-К   (2007-02-28 16:41) [3]

Джо ©   (28.02.07 16:26) [2]
Можно и так сказать. Без разницы.

Вообщем, возможно ли однозначно сопоставить строке < 11 символов 8-байтный идентификатор? Или 4- байтный?
И есть ли (какая) зависимость между длиной строки и размером хеш-индекса? Из известных.


 
Rouse_ ©   (2007-02-28 16:46) [4]

Уникально даже MD5 не хеширует...


 
Сергей М. ©   (2007-02-28 16:52) [5]


> возможно ли однозначно сопоставить строке < 11 символов
> 8-байтный идентификатор?


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


> Или 4- байтный?


Вероятность возрастает.


 
jack128 ©   (2007-02-28 17:30) [6]

Ш-К   (28.02.07 16:41) [3]
Вообщем, возможно ли однозначно сопоставить строке < 11 символов 8-байтный идентификатор?


Мдя..  А если подумать??? Можно ли целому числу из диапазона 0..2^88 - 1 _однозначно_ сопоставить число из диапазона 0..2^64 - 1 ???


 
Anatoly Podgoretsky ©   (2007-02-28 19:30) [7]

> Ш-К  (28.02.2007 16:20:00)  [0]

Нельзя, на 256^11 приходитс всего 256^8 комбинаций, на каждый хеш приходится по 256^3 значений.


 
Ш-К   (2007-03-01 19:24) [8]

Абсолютно согласен со всеми. Немного перемудрил.
Вообще-то я говорил не о произвольной последовательности байт, а строке с "валидными" символами. Например, только кириллица.



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

Форум: "Основная";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
2-1175626122
Merak
2007-04-03 22:48
2007.04.22
idMappedPortTCP без внешнего прокси


2-1175495435
Dmitry_177
2007-04-02 10:30
2007.04.22
Убрать дату с поля SQL-запросом


15-1175065611
Kerk
2007-03-28 11:06
2007.04.22
Интернет-форум как виртуальный аналог психодинамической группы


15-1173046249
Суслик
2007-03-05 01:10
2007.04.22
Вот завел себе блог


2-1175681440
bagos
2007-04-04 14:10
2007.04.22
динамическое создание компонента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский