2009年1月6日火曜日

ハッシュ値の計算

なんか書いてみるかな?ってことで
ハッシュ値を計算してみました

注:blueleafさん作のlongint.dllを使用しています


#include "longint.hsp"
#module
#defcfunc calc_hash var source
l=strlen(source)
tmp01=LongInt(0)
to_cmp=Longint(1)

dim v,l
repeat l
v(cnt)=peek(source,cnt)
loop

repeat l
tmp01+=Longint(v.cnt)*to_cmp
to_cmp*=31;注1
// logmes str(tmp01)
loop

tmp01\=2039;注2
r=int(tmp01)
// logmes str(tmp01)
return r

#global
s1="abc--start"
s2="def--start"
s3="abc--begin"
mes calc_hash(s1)
mes calc_hash(s2)
mes calc_hash(s3)
stop


注1:ハッシュ値は文字列の各要素に
31とか37を掛け続けた後、素数で除算して求めるみたいです

注2:文字コードの関係で¥が\になっています

ハッシュ値を計算できたはいいが
これをどんなデータ構造で管理するかは
今後の課題です

0 件のコメント: