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

Вниз

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

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

Наверх





Память: 0.45 MB
Время: 0.01 c
3-1308
DmitryA
2003-08-06 18:12
2003.09.01
Apollo


14-1565
Yakudza
2003-08-11 18:01
2003.09.01
Поделитесь результатами :)))


14-1663
Anatoly Podgoretѕky
2003-08-12 14:16
2003.09.01
Просьба заделать эту дырку.


14-1573
Jean
2003-08-11 17:27
2003.09.01
Ааааа...


3-1340
Tahion2
2003-08-11 13:01
2003.09.01
Как в ClientDataSet сохранить начальный порядок следования записе





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