暴雪hash演算法,(不理解?稍作改進?)

2021-07-11 12:30:46 字數 1797 閱讀 8150

看了july關於暴雪hash演算法的講解,有幾個地方沒理解。

暴雪hash與普通hash不同的是,使用了更好的hash值

使用3個hash值,乙個用於查詢,兩個用於校驗

如果出現衝突,尋找下乙個,如果到了陣列尾部還沒找到,則表示字串不存在。

那麼最大的不同應該就是使用三個hash值,在比較的時候不直接比較字串而比較另外兩個hash值,另外為啥不使用鍊錶呢?

先把july的**貼上來

#define _crt_secure_no_warnings

#include #include //多謝citylove指正。

#include #include //cryttable裡面儲存的是hashstring函式裡面將會用到的一些資料,在preparecrypttable

//函式裡面初始化

const int ntablesize = 2000;

const int nmaxstrlen = 2000;

unsigned long crypttable[0x500];

typedef struct _a

mpqhashtable;

///function: 雜湊詞典 編碼

//parameter:

//author: lei.zhou

//time: 2011-12-14

/mpqhashtable testhashtable[ntablesize];

//以下的函式生成乙個長度為0x500(合10進製數:1280)的crypttable[0x500]

void preparecrypttable() }}

//以下函式計算lpszfilename 字串的hash值,其中dwhashtype 為hash的型別,

//在下面gethashtablepos函式裡面呼叫本函式,其可以取的值為0、1、2;該函式

//返回lpszfilename 字串的hash值;

unsigned long hashstring(const char *lpszfilename, unsigned long dwhashtype)

return seed1;

}//直接呼叫上面的hashstring,nhashpos就是對應的hash值。

int insert_string(const char *string_in)

ln = strlen(string_in);

if (!testhashtable[nhashpos].bexists && (ln < nmaxstrlen))

else

return nhashpos;

}int gethashtablepos(char *lpszstring, mpqhashtable *lptable, int ntablesize)

else

if (nhashpos == nhashstart)

break;

} return -1;

}int main(int argc, char **argv)

我的思路,不知道對不對,求改正

既然已經有了三個hash值,並且三個hash值都相同的概率極低,那麼為何不直接利用這三個hash值來查詢呢

意思是,將乙個大的陣列分為n個小陣列(人為的),比如大陣列長度10000,我分為10個小陣列,那麼每個小陣列長度為1000,0-999,1000-1999,。。。。。。。。。

第二層,同樣的利用第二個hash值,將上面的小陣列在分,

第三層,同上,不知道這樣效率會不會更高。

寫個**試試

不理解筆記

不明白 def print nums x for i in range x print i return print nums 10 rest 4 0 rest 4 1 rest 4 2 rest 4 3 def func x res 0 for i in range x res i return ...

病例 不理解C C 的函式指標

一直對函式指標的概念一知半解的,於是搜尋了一把,發現幾個帖子講解不錯,就帖子這裡了.病例 不理解c c 的函式指標 大怪獸 病人 醫生,我折騰了 許久,無法理解函式指標。中醫 能意 識到自己不理解,不錯。那 麼你 說說你目前的理解。函式指標是什 麼?病人 函式指 針是指向函式的指標。中醫 那麼 函式...

CSS不理解的知識點

使用條件 單獨使用他們的時候均沒有效果需要是使用了絕對定位absolute的時侯才能其作用。left 靠左邊距離多少 right 靠右邊距離多少 top 距離頂部距離為多少 bottom 距離下邊距離為多少 舉例說明如下 left 50px就是距離左邊的距離就是50px 如果為 50px 那麼就會像...