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

Вниз

Генератор хеш-кодов   Найти похожие ветки 

 
Psibug ©   (2003-08-16 09:48) [0]

я написал для своего проекта <сабж>.
как определить вероятность совпадения у разных строк
(рядов байтов) хеш-кодов. Очень надо!
фенккз!


 
Viktorious   (2003-08-16 16:00) [1]

Вообще-то это зависит от типа подаваемых строк,
то есть если в проге будут обрабатываться только английские строки - набор вероятностей будет одним,если русские - другим, etc. Нужно ориентироваться на конкретную задачу, которая перед тобой стоит.


 
HolACost! ©   (2003-08-16 16:17) [2]

Впринципе никак! Я так понимаю - желание получить оригинальнуюю последовательность для разных строк, то скорее всего придётся обходить дополнительным алгоритмом совпадения (коллизии)!


 
Умный   (2003-08-16 19:46) [3]

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


 
Psibug ©   (2003-08-16 22:10) [4]

Хеш-коды использоваться будут повсеместно в моём движке.
Я еще не знаю, насколько проект разрастётся (будут ли в во внутридвишковых названиях предметов, локаций, и в именах чтонибудь кроме кириллицы). Не думаю, что имена и названия будут смертельнодлинные, особенно внутридвижковые.
Чтобы не сравнивать строки, пришлось сделать этот генератор.
Достаточно ли этого генератора для ShortString?
Или мне всё переделать в Unicode с двухбайтовыми символами?
(Проект находится в "доэмбриональной" стадии, накодено всего несколько "молекул").
Вот как он выглядит, этот генератор:

type
hashcode=int64;

function CreateHash(const s:wstring):hashcode;
var
i,imax,istep:integer;
tmp:double;
begin
//Result:=0;
istep:=1;//sizeof(wchar);
imax:=Length(s);//*istep;
if imax<=0 then begin Result:=0;exit;end;
i:=1;
tmp:=Ord(s[1]);
try
while i<imax do
begin
inc(i,istep);
if (i>imax) or (s[i]=#0) then break;
tmp:=tmp+Ord(s[i]);
inc(i,istep);
if (i>imax) or (s[i]=#0) then break;
tmp:=tmp*Ord(s[i]);
inc(i,istep);
if (i>imax) or (s[i]=#0) then break;
tmp:=tmp-Ord(s[i]);
inc(i,istep);
if (i>imax) or (s[i]=#0) then break;
tmp:=tmp/Ord(s[i]);
end;
except
tmp:=0.0;
MessageBeep(MB_ICONERROR);
end;
Result:=PInt64(@tmp)^;
end;


 
Psibug ©   (2003-08-17 18:06) [5]

Чтобы поднять ваш интерес, скажу что за проект. это RPG типа "Morrowind в темечко".


 
Psibug ©   (2003-08-18 19:45) [6]

<модератору>
Привет. Перенеси этот топик в форум "Игры" как свежий и
удали этот мессаг.



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
4-1717
Иксик
2003-07-01 12:57
2003.09.01
BitBlt


14-1664
Andryk
2003-08-14 10:51
2003.09.01
Вопрос на засыпку :о))


14-1662
Ketmar
2003-08-12 10:16
2003.09.01
нет слов.


1-1403
Checist [root]
2003-08-16 03:31
2003.09.01
Gif формат в Image


3-1336
ZyXEL
2003-08-07 15:17
2003.09.01
ADO (*.xls) -> DBF ?