Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
1-1486
lex7
2003-08-18 13:27
2003.09.01
try...except...end;


14-1631
vano
2003-08-14 12:07
2003.09.01
Как восстановить исходники из exe файла


14-1666
Igor__
2003-08-12 11:43
2003.09.01
WebBrowser


14-1564
McSimm
2003-08-10 16:03
2003.09.01
Об изменениях в форумах


4-1741
Fighter
2003-07-02 05:24
2003.09.01
Как зная Handle окна определить следующее...




   Наверх