一種通過新型哈希值表實現數據快速檢索的方法和系統的制作方法
【專利摘要】本發明公開了一種通過新型哈希值表實現數據快速檢索的方法和系統,所述方法構造映射表和動態數組,動態數組中的元素包括數據和下標,映射表用于存儲元素在動態數組中的位置索引,通過下標可以構造映射表與動態數組之間的映射關系,實現對動態數組中元素的添加、查詢和刪除等操作;所述系統包括構造模塊和檢索模塊,檢索模塊包括添加單元、查詢單元和刪除單元。本發明避免了鏈表操作中頻繁的遍歷與查詢,有效地節省了時間,尤其是對于大量數據的存取操作時,通過下標可以避免哈希值沖突的問題,且可以快速、準確地實現操作目的。
【專利說明】一種通過新型哈希值表實現數據快速檢索的方法和系統
【技術領域】
[0001]本發明涉及數據檢索領域,特別是一種通過新型哈希值表實現數據快速檢索的方法和系統。
【背景技術】
[0002]哈希表是一種快速的元素存取和讀取數組,主要應用于數據快速檢索的領域,由于其特點是根據元素的哈希值進行數組定位和訪問,其效率非常高。然而當多個元素的哈希值相同時,就會出現哈希值沖突的情況,即對應的數組位置只能存放一個元素,傳統的方法是在沖突時,通過鏈表的方式解決,但此方法在添加、查詢和刪除時都需要進行鏈表的遍歷操作,特別是在數據量巨大時,哈希沖突將導致鏈表長度不斷增加。但鏈表的遍歷和查詢過程是非常緩慢的,因此傳統的鏈表方式并不能高效的解決哈希表的沖突情況,在大量數據存取操作時效率更加低下。
[0003]因此,需要一種新的技術方案,有效地解決使用鏈表時哈希值沖突的問題,這種技術方案同時也應當適用于大量數據的存取操作,應能有效地提高存取效率。
【發明內容】
[0004]為解決上述問題,本發明的目的在于提供一種通過新型哈希值表實現數據快速檢索的方法和系統,通過構造新型映射關系,有效解決快速檢索時哈希值沖突的問題,同時,對于大量數據的存取操作,避免鏈表操作中的長時間的遍歷和查詢,提升存取效率。
[0005]本發明解決其問題所采用的技術方案是:
一種通過新型哈希值表實現數據快速檢索的方法,包括:
構造映射表和動態數組,動態數組中的每個元素包括數據本身和下標,映射表為具有固定長度的數組,其每個入口用于存儲元素在動態數組中的位置索引;
通過下標在映射表入口與動態數組元素之間構造映射關系,完成向動態數組中添加、查詢和刪除元素。
[0006]當向動態數組中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。
[0007]當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所查詢的元素或所定位的元素的下標為空時,結束查詢。[0008]當刪除動態數組中的元素時:
查詢該元素在動態數組中的位置,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到或下標為空時,結束查詢;
判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。
[0009]所述映射表的固定長度根據動態數組中元素的個數進行調整。
[0010]一種通過新型哈希值表實現數據快速檢索的系統,包括:
構造模塊,用于構造映射表和動態數組,動態數組中的每個元素包括數據本身和下標,映射表為具有固定長度的數組,其每個入口用于存儲元素在動態數組中的位置索引;
檢索模塊,用于通過下標在映射表入口與動態數組的元素之間構造映射關系,完成向動態數組中添加、查詢和刪除元素。
[0011]所述檢索模塊包括:
添加單元,用于當向動態數組中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。
[0012]所述檢索模塊還包括:
查詢單元,用于當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所查詢的元素或所定位的元素的下標為空時,結束查詢。
[0013]所述檢索模塊還包括:
刪除模塊,用于根據查詢單元定位所要刪除的元素在動態數組中的位置,之后,判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。
[0014]本發明的有益效果是: 本發明采用一種通過新型哈希值表實現數據快速檢索的方法和系統,構造映射表和動態數組,動態數組中的元素包括數據和下標,映射表用于存儲元素在動態數組中的位置索弓丨,通過下標可以構造映射表與動態數組之間的映射關系,實現對動態數組中元素的添加、查詢和刪除等操作,避免了鏈表操作中頻繁的遍歷與查詢,有效地節省了時間,尤其是對于大量數據的存取操作時,通過下標可以避免哈希值沖突的問題,且可以快速、準確地實現操作目的。
【專利附圖】
【附圖說明】
[0015]下面結合附圖和實例對本發明作進一步說明。
[0016]圖1是構造的映射表與動態數組示意圖;
圖2是向動態數組添加元素時的流程示意圖;
圖3是查詢動態數組中的元素時的流程示意圖;
圖4是向動態數據添加數據后的示意圖;
圖5是通過下標解決哈值沖突后的示意圖;
圖6是刪除動態數組中元素后的示意圖。
【具體實施方式】
[0017]參照I所示構造的映射表與動態數組示意圖,本發明構造了映射表與動態數組,動態數組的長度可以自動調節,動態數組中的每個元素包括數據本身和下標,每個元素在動態數組中均具有位置索引,此位置索引其實為動態數據在為元素分配位置時產生的元素的個數值,當元素的哈希值相同時,下標用于存放相鄰元素的位置索引;映射表為具有固定的長度的數組,但此固定長度可以根據動態數組中元素的個數進行調整,映射表具有索引入口,每個入口用于存儲元素在動態數組中的位置索引。
[0018]本發明通過下標可以構造映射表與動態數組之間的映射關系,從而實現向動態數組中添加、查詢或刪除元素。
[0019]參照圖2所示向動態數組添加元素時的流程示意圖,當向動態數據中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。通過下標高效地解決了哈希值沖突的問題,且實現方式比較簡單,省去了使用鏈表中的煩瑣操作,有效地提高了數據操作效率。
[0020]參照圖3所示查詢動態數組中的元素時的流程示意圖,當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所查詢的元素或所定位的元素的下標為空時,結束查詢。[0021]刪除動態數組中的元素時,首先根據圖3所示的流程圖中的查詢方法,查找出所要刪除的元素在動態數組中的位置,之后,判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。刪除只需要通過下標改變映射表與動態數組的映射關系即可,實現比較簡單,省去了以鏈表方法實現時的遍歷與查詢,節省時間,提高了效率。
[0022]參照圖4所示,圖中所示,映射表長度為5,依次向動態數組中添加元素5、3、4、1。當添加5時,通過5與映射表長度5取余得到0,則映射表第O個入口是數據5的入口,這時第O個入口未被占用,則將數據5添加到動態數組中,此時在數組中的位置索引為0,將此位置索引存入映射表第O個入口,完成添加操作。當添加第二個數據3時,通過3與映射表長度5取余得到3,則映射表第3個入口是數據3的入口,數據3加入動態數組后的位置索引為1,將此位置索引存入第3個入口,則完成添加操作。再次添加4和I數據之后的,映射表和動態數組的內部結構如圖4所示。
[0023]在圖4的基礎上,當繼續添加數據9時,通過9與映射表長度5取余得到4,即映射表第4個入口,此時第4個入口已被占用,存放著動態數組第2個位置索引。此時將數據9添加到動態數組之后,將其下標設置為第4個入口所存儲的位置索引2,再將第4個入口更改為當前數據9的位置索引,完成添加操作。當再次添加數據7和14之后的結構如圖5所
/Jn ο
[0024]在圖5的基礎上,當需要刪除數據14時,通過14與映射表長度5取余得到4,并通過第4個入口得到數據14的位置索引6,由于動態數組的第6個元素存在下標4,則將映射表第4個入口設置為此下標4,則當前映射表第4個入口指向了動態數組的第4個位置索弓I。當刪除數據I時,通過數據I與映射表長度5取余得到1,映射表第I個入口指向了動態數組第3個元素,由于第3個元素沒有下標,則直接將入口清空,完成刪除操作,刪除后映射表和動態數組的內部結構如圖6所示。
[0025]本發明提供了一種通過新型哈希值表實現數據快速檢索的系統,包括:
構造模塊,用于構造映射表和動態數組,動態數組中的每個元素包括數據本身和下標,映射表為具有固定長度的數組,其每個入口用于存儲元素在動態數組中的位置索引;
檢索模塊,用于通過下標在映射表入口與動態數組的元素之間構造映射關系,完成向動態數組中添加、查詢和刪除元素。
[0026]所述檢索模塊包括:
添加單元,用于當向動態數組中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。
[0027]所述檢索模塊還包括: 查詢單元,用于當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所查詢的元素或所定位的元素的下標為空時,結束查詢。
[0028]所述檢索模塊還包括:
刪除模塊,用于根據查詢單元定位所要刪除的元素在動態數組中的位置,之后,判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。
[0029]所述系統所采用的方法與以上方法中所述步驟相同,具體參見以上方法中所述內容。
[0030]以上所述,只是本發明的較佳實施例而已,本發明并不局限于上述實施方式,只要其以相同的手段達到本發明的技術效果,都應屬于本發明的保護范圍。
【權利要求】
1.一種通過新型哈希值表實現數據快速檢索的方法,其特征在于,包括: 構造映射表和動態數組,動態數組中的每個元素包括數據本身和下標,映射表為具有固定長度的數組,其每個入口用于存儲元素在動態數組中的位置索引; 通過下標在映射表入口與動態數組的元素之間構造映射關系,完成向動態數組中添加、查詢和刪除元素。
2.根據權利要求1所述的方法,其特征在于: 當向動態數組中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。
3.根據權利要求1所述的方法,其特征在于: 當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所 查詢的元素或所定位的元素的下標為空時,結束查詢。
4.根據權利要求1所述的方法,其特征在于,當刪除動態數組中的元素時: 查詢該元素在動態數組中的位置,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到或下標為空時,結束查詢; 判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。
5.根據權利要求1至4任一所述的方法,其特征在于,所述映射表的固定長度根據動態數組中元素的個數進行調整。
6.一種通過新型哈希值表實現數據快速檢索的系統,包括: 構造模塊,用于構造映射表和動態數組,動態數組中的每個元素包括數據本身和下標,映射表為具有固定長度的數組,其每個入口用于存儲元素在動態數組中的位置索引; 檢索模塊,用于通過下標在映射表入口與動態數組的元素之間構造映射關系,完成向動態數組中添加、查詢和刪除元素。
7.根據權利要求6所述的系統,其特征在于,所述檢索模塊包括: 添加單元,用于當向動態數組中添加元素時,將該元素添加至動態數組的末尾,同時將該元素的哈希值與映射表長度進行取余運算,所得的余值作為該元素對應映射表入口的索引值,若當前入口未被占用,則將該元素在動態數組中的位置索引寫入與該元素的索引值對應的映射表入口中,若當前入口已被占用,則將與該元素的索引值對應的映射表入口中的值寫入該元素的下標,并且將該元素在動態數組中的位置索引寫入該元素的索引值所對應的映射表入口中。
8.根據權利要求7所述的系統,其特征在于,所述檢索模塊還包括: 查詢單元,用于當向動態數組查詢元素時,將該元素的哈希值與映射表長度取余,所得的余值作為該元素對應映射表入口的索引值,根據該索引值獲取與該索引值對應的存儲在映射表入口中的位置索引,根據此位置索引定位動態數組中的元素,將該定位出的元素與所查詢的元素進行對比,若相同,則結束查詢,否則,根據該定位出的元素的下標定位下一個存儲在動態數組中的元素,直至找到所查詢的元素或所定位的元素的下標為空時,結束查詢。
9.根據權利要求8所述的系統,其特征在于,所述檢索模塊還包括: 刪除模塊,用于根據查詢單元定位所要刪除的元素在動態數組中的位置,之后,判斷所查詢到的元素是否為在動態數組中查找到的第一個元素,若該元素在動態數組中的位置索引與映射表入口中存儲的位置索引相同,則表明該元素為第一個元素,此時,若該元素的下標為空,則將對應的映射表入口中的值清零,若該元素的下標不為空,則將對應的映射表入口中的值更改為該元素的下標值,若所查詢到的元素不是第一個元素,則將上一個查詢到的元素的下標賦值為該元素的下標。
【文檔編號】G06F17/30GK103617216SQ201310588016
【公開日】2014年3月5日 申請日期:2013年11月21日 優先權日:2013年11月21日
【發明者】余欣 申請人:珠海金山網絡游戲科技有限公司, 成都西山居互動娛樂科技有限公司