1.一種高效的靜態(tài)哈希表實現(xiàn)方法,其特征在于,包括以下步驟:
1)設(shè)定哈希桶大小hash_bit,生成多個數(shù)據(jù)對,將key[i]和value[i]對應(yīng)于關(guān)鍵字和值;
2)根據(jù)key[i]值,利用rank操作構(gòu)建哈希表,并計算C表和D表,其中C表表示存儲固定長度r的rank操作,D表表示存儲固定長度s的rank操作;
3)根據(jù)C表和D表計算rank(h),其中h=key mod(hash_bits),并根據(jù)rank(h)的值存儲相應(yīng)的key[i]和value[i];
4)根據(jù)所要查詢的值key判斷哈希表中是否存在該元素,若存在則在對應(yīng)存儲位置查詢并返回value值,否則訪問失??;
5)根據(jù)步驟4)所得的結(jié)果,返回結(jié)果信息。
2.如權(quán)利要求1所述的方法,其特征在于,步驟3)采用以下步驟實現(xiàn)基于rank操作的哈希表存儲過程:
3-1)將預(yù)處理的數(shù)據(jù)分為key和value數(shù)組,key[i]、value[i]與關(guān)鍵字、鍵值相對應(yīng);
3-2)預(yù)先一次性導(dǎo)入key值至bitmap中,定義哈希桶的數(shù)量為hash_bit,按照時間度O(1)的rank操作記錄key數(shù)組的數(shù)據(jù)內(nèi)容;對key與hash_bit取模得到h,確保落在哈希桶內(nèi),然后將h存儲在哈希桶對應(yīng)位置上,按照h值的大小,記錄所有key值的相應(yīng)位置信息;
3-3)存儲計算C數(shù)組和D數(shù)組,利用rank操作從哈希表CB[0]開始記錄C數(shù)組和D數(shù)組的相應(yīng)信息;
3-4)利用C表和D表信息,計算每個key值對應(yīng)的rank值;
3-5)利用rank值記錄每個哈希桶內(nèi)元素個數(shù),按照哈希表C的順序疊加記錄,利用rank值作為順序存儲key、value值;
3-6)存儲key、value值到數(shù)組中。
3.如權(quán)利要求2所述的方法,其特征在于,步驟3-2)中,hash_bit的值為CB表的大小clength和28的乘積,對每個哈希桶內(nèi)分配4個大小的bitmap,每個bitmap存儲64位的數(shù)據(jù),初始化設(shè)置為各位均為0。
4.如權(quán)利要求3所述的方法,其特征在于,步驟3-2)按照如下公式記錄h的位置,直到所有的key值均依次記錄位置:
q=h&255,
CB[h>>8].bitmap[q>>6]|=(1<<(q&63))。
5.如權(quán)利要求2所述的方法,其特征在于,步驟3-5)中,在存儲key-value對時,若不同的key有同一rank值,則首要順序按照rank值大小順序存儲,次要順序按照rank值相同依次存儲。
6.如權(quán)利要求1所述的方法,其特征在于,步驟4)采用以下步驟實現(xiàn)基于rank操作的哈希表訪問過程:
4-1)對要查詢的數(shù)據(jù)key與hash_bit取模得到h;
4-2)計算q=h&255,判斷CB[h>>8].bitmap[q>>6]和(1<<(q&63))做與運算是否為1,即在原來哈希桶內(nèi)是否有key值;若此步判斷為0,則原哈希表內(nèi)沒有該key值,查詢失?。?/p>
若此步判斷為1,則原哈希表內(nèi)有該key值,則需要找到value值;
4-3)為了防止哈希沖突,即原哈希表內(nèi)該位置有兩個及以上的關(guān)鍵字值命中,則在該哈希桶內(nèi)依次判斷是否含有查詢數(shù)據(jù)key,若包含,返回value值,若不包含,查詢下一個關(guān)鍵字,直至關(guān)鍵字為空,查詢失敗。
7.一種高效的靜態(tài)哈希表實現(xiàn)系統(tǒng),其特征在于,包括:
系統(tǒng)預(yù)處理部件,用于設(shè)定哈希桶大小hash_bit,在生成多個數(shù)據(jù)對,將key[i]和value[i]對應(yīng)于關(guān)鍵字和值;
構(gòu)建哈希表部件,用于根據(jù)key[i]值,利用rank操作構(gòu)建哈希表,并計算C表和D表,其中C表表示存儲固定長度r的rank操作,D表表示存儲固定長度s的rank操作;
存儲信息部件,用于根據(jù)C表和D表計算rank(h),其中h=key mod(hash_bits),并根據(jù)rank(h)的值存儲相應(yīng)的key[i]和value[i];
訪問信息部件,用于根據(jù)所要查詢的值key判斷哈希表中是否存在該元素,若存在則在對應(yīng)存儲位置查詢并返回value值,否則訪問失?。?/p>
返回信息部件,用于根據(jù)訪問信息部件所得的結(jié)果,返回結(jié)果信息。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述存儲信息部件采用以下步驟實現(xiàn)基于rank操作的哈希表存儲過程:
1)將預(yù)處理的數(shù)據(jù)分為key和value數(shù)組,key[i]、value[i]與關(guān)鍵字、鍵值相對應(yīng);
2)預(yù)先一次性導(dǎo)入key值至bitmap中,定義哈希桶的數(shù)量為hash_bit,按照時間度O(1)的rank操作記錄key數(shù)組的數(shù)據(jù)內(nèi)容;對key與hash_bit取模得到h,確保落在哈希桶內(nèi),然后將h存儲在哈希桶對應(yīng)位置上,按照h值的大小,記錄所有key值的相應(yīng)位置信息;
3)存儲計算C數(shù)組和D數(shù)組,利用rank操作從哈希表CB[0]開始記錄C數(shù)組和D數(shù)組的相應(yīng)信息;
4)利用C表和D表信息,計算每個key值對應(yīng)的rank值;
5)利用rank值記錄每個哈希桶內(nèi)元素個數(shù),按照哈希表C的順序疊加記錄,利用rank值作為順序存儲key、value值;
6)存儲key、value值到數(shù)組中。
9.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述訪問信息部件采用以下步驟實現(xiàn)基于rank操作的哈希表訪問過程:
1)對要查詢的數(shù)據(jù)key與hash_bit取模得到h;
2)計算q=h&255,判斷CB[h>>8].bitmap[q>>6]和(1<<(q&63))做與運算是否為1,即在原來哈希桶內(nèi)是否有key值;若此步判斷為0,則原哈希表內(nèi)沒有該key值,查詢失??;若此步判斷為1,則原哈希表內(nèi)有該key值,則需要找到value值;
3)為了防止哈希沖突,即原哈希表內(nèi)該位置有兩個及以上的關(guān)鍵字值命中,則在該哈希桶內(nèi)依次判斷是否含有查詢數(shù)據(jù)key,若包含,返回value值,若不包含,查詢下一個關(guān)鍵字,直至關(guān)鍵字為空,查詢失敗。