Главная страница
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.023 c
4-1732
DelphiN!
2003-06-30 07:58
2003.09.01
Как сохранить позицию Scrollbar-а?


1-1498
Opera
2003-08-19 15:44
2003.09.01
GameExplorer


4-1710
andre
2003-06-21 02:24
2003.09.01
таймер


3-1324
Lamer_of_Delphi
2003-08-08 09:05
2003.09.01
DBGrid


3-1273
dimm
2003-08-11 17:22
2003.09.01
DBLookupCombobox не открывается полностью. Т.е. хочу видеть все