具體流程就是建立乙個較大的陣列,然後通過特定的演算法,將字串轉成整數,然後存入到這個陣列中,然後可以通過取模,獲得這個string在陣列中的下標。
#include #include #include #define maxmpqhashtablelen 8192
typedef struct mpqhashtable;
unsigned long crypttable[0x500];
unsigned long hashstring(char *lpszstring, unsigned long dwhashtype);
unsigned int mpqhashtableinit(char **pphashtable, long ntablelength);
void mpqhashtablefree(char *phashtable);
unsigned int mpqhashtableadd(char *lpszstring, char *phashtable);
long mpqhashtablei***ist(char *lpszstring, char *phashtable);
static void initcrypttable()
}}/*
函式名:hashstring
功能:計算字串的雜湊值
引數:lpszstring:字串的位址
dwhashtype:雜湊值型別
dwhashtype = 0時計算的雜湊值用於確定字串在雜湊表中的位置;
dwhashtype = 1,dwhashtype = 2時計算的雜湊值用於驗證字串
返回值:字串的雜湊值
*/unsigned long hashstring(char *lpszstring, unsigned long dwhashtype)
return seed1;}/*
函式名:mpqhashtableinit
功能:初始化雜湊表
引數:*pphashtable:返回分配的雜湊表的位址
ntablelength:雜湊表的長度
返回值:0:失敗
1:成功
*/unsigned int mpqhashtableinit(char **pphashtable, long ntablelength)
*pphashtable = p;
_phashtable = (mpqhashtable *)p;
for (i = 0; i < ntablelength; i++)
return 1;}/*
函式名:mpqhashtablefree
功能:釋放雜湊表
引數:phashtable:雜湊表的位址
返回值:無
*/void mpqhashtablefree(char *phashtable)}/*
函式名:mpqhashtableadd
功能:將字串的資訊加入雜湊表
引數:lpszstring:字串的位址
phashtable:雜湊表的位址
返回值:0:失敗
1:成功
*/unsigned int mpqhashtableadd(char *lpszstring, char *phashtable)
}(_phashtable + nhashpos)->nhasha = nhasha;
(_phashtable + nhashpos)->nhashb = nhashb;
(_phashtable + nhashpos)->bexists = 1;
return 1;}/*
函式名:mpqhashtablei***ist
功能:判斷某字串在雜湊表中是否存在
引數:lpszstring:字串的位址
phashtable:雜湊表的位址
返回值:-1:不存在
nhashpos 該字串在雜湊表中的索引值
*/long mpqhashtablei***ist(char *lpszstring, char *phashtable)
else
if (nhashpos == nhashstart)
}return -1;
}int main(int argc,char ** ar**)
{ char* htable;
mpqhashtableinit(&htable,maxmpqhashtablelen); //初始化hash表
暴雪的hash演算法 翻譯
促進歷史進步的大多數契機都是在解決特定問題的過程中產生的,本文討論一下mpq格式的合適解決方案。mpq是暴雪的一種文字壓縮格式,可以壓縮包括座標 演算法 聲音 動畫 字串等。hashs 問題 你可能有乙個非常長的字串陣列,現在有乙個新字串,想要判斷該字串是否在陣列中,簡單粗暴的方法是挨個比較,但最大...
21Hash演算法以及暴雪Hash
一 雜湊表簡介 雜湊表是一種查詢效率極高的資料結構,理想情況下雜湊表插入和查詢操作的時間複雜度均為o 1 任何乙個資料項可以在乙個與雜湊表長度無關的時間內計算出乙個雜湊值 key 然後在常量時間內定位到乙個桶 術語bucket,表示雜湊表中的乙個位置 當然這是理想情況下,因為任何雜湊表的長度都是有限...
暴雪hash演算法,(不理解?稍作改進?)
看了july關於暴雪hash演算法的講解,有幾個地方沒理解。暴雪hash與普通hash不同的是,使用了更好的hash值 使用3個hash值,乙個用於查詢,兩個用於校驗 如果出現衝突,尋找下乙個,如果到了陣列尾部還沒找到,則表示字串不存在。那麼最大的不同應該就是使用三個hash值,在比較的時候不直接比...