本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,更具體地,涉及一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化方法及系統(tǒng)。
背景技術(shù):
隨著近年來(lái)互聯(lián)網(wǎng)、云計(jì)算、物聯(lián)網(wǎng)、社交媒體以及其他信息技術(shù)的迅速發(fā)展,各行各業(yè)積累的數(shù)據(jù)都呈現(xiàn)出爆炸式增長(zhǎng)趨勢(shì)。例如,facebook每天處理的數(shù)據(jù)超過(guò)500tb,阿里巴巴擁有的數(shù)據(jù)量超過(guò)100pb,新浪微博用戶數(shù)超過(guò)5億,每天產(chǎn)生的微博數(shù)超過(guò)1億條等,許多商業(yè)公司通常每天要處理tb級(jí)甚至pb級(jí)的數(shù)據(jù)。根據(jù)國(guó)際數(shù)據(jù)公司(internationaldatacorporation,idc)2014年的報(bào)告,全球產(chǎn)生的數(shù)據(jù)總量每?jī)赡攴环?,?020年將達(dá)到44zb。
大數(shù)據(jù)時(shí)代的到來(lái)給海量數(shù)據(jù)的管理帶來(lái)了新的挑戰(zhàn)和契機(jī)。其中,大數(shù)據(jù)(尤其是非結(jié)構(gòu)化數(shù)據(jù))的快速檢索作為一個(gè)非常關(guān)鍵的問(wèn)題亟待解決。在云計(jì)算系統(tǒng)中,大量資源被用于支持查詢相關(guān)的操作,例如計(jì)算資源、存儲(chǔ)資源以及網(wǎng)絡(luò)資源,然而對(duì)于查詢請(qǐng)求如何快速返回精確結(jié)果仍然是一個(gè)巨大的挑戰(zhàn)。為了提高系統(tǒng)性能和整體效率,目前也有許多改進(jìn)工作,例如對(duì)加密云數(shù)據(jù)的多關(guān)鍵字查詢,對(duì)并行數(shù)據(jù)處理的查詢優(yōu)化,利用分層bloomfilter索引加速查詢,利用持續(xù)監(jiān)控過(guò)程優(yōu)化查詢,對(duì)云數(shù)據(jù)的近似成員查詢,文件系統(tǒng)中的近似查詢,對(duì)云數(shù)據(jù)的分類查詢檢索,查詢服務(wù)的自動(dòng)管理等等。但是由于這些方法具有空間效率不高以及高復(fù)雜度的分層尋址的缺點(diǎn),它們都無(wú)法滿足實(shí)時(shí)查詢的需求。
基于哈希的數(shù)據(jù)結(jié)構(gòu)具有常數(shù)級(jí)尋址復(fù)雜度和快速查詢響應(yīng)的特性,它在查詢的實(shí)時(shí)性和準(zhǔn)確性方面優(yōu)勢(shì)顯著,成為為解決大數(shù)據(jù)管理的關(guān)鍵技術(shù)之一。
cuckoo哈希是多選擇哈希機(jī)制的一個(gè)有效變體。在cuckoo哈希機(jī)制中,每一個(gè)元素能夠被放置在哈希表中多個(gè)備選哈希桶的任一位置。當(dāng)多個(gè)備選位置都被其他元素占據(jù)(不為空)時(shí),該元素任意踢出某一個(gè)桶中存在的元素,而不是直接返回插入失敗或者通過(guò)鏈表存儲(chǔ)。被踢出的元素接著執(zhí)行相同操作,直到所有的元素都找到存儲(chǔ)的位置。相比于傳統(tǒng)哈希表中只使用一個(gè)哈希函數(shù)的情況,cuckoo哈希這種機(jī)制能夠確保數(shù)據(jù)的均勻分布。由于這種常數(shù)級(jí)復(fù)雜度的扁平化尋址的特性,在查詢操作中只需要探測(cè)哈希表一次就可以得到查詢結(jié)果。在最壞情況下,每次至多探測(cè)被查詢?cè)氐乃泻蜻x位置,因此確保了常數(shù)級(jí)的查詢時(shí)間復(fù)雜度。
然而在索引表構(gòu)建過(guò)程中,傳統(tǒng)的cuckoo哈希方法中在元素的候選位置中隨機(jī)選擇一個(gè)位置進(jìn)行插入與移動(dòng)。當(dāng)元素所有候選位置都被占據(jù)時(shí),這種隨機(jī)選擇更加劇了哈希尋址的不確定性。在踢出操作中,這種隨機(jī)選擇方案可能會(huì)造成踢出路徑的重復(fù)甚至無(wú)限循環(huán),產(chǎn)生大量無(wú)效的踢出操作,這將導(dǎo)致元素插入操作中的高時(shí)延。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明的目的在于提供了一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化方法及系統(tǒng),由此解決現(xiàn)有的云存儲(chǔ)系統(tǒng)中構(gòu)建基于cuckoo哈希索引表時(shí)元素插入所導(dǎo)致的踢出路徑無(wú)限循環(huán)的技術(shù)問(wèn)題。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化方法,包括以下步驟:
s1、根據(jù)元素屬性隨機(jī)選擇兩個(gè)相互獨(dú)立的哈希函數(shù)計(jì)算得到元素在索引表中對(duì)應(yīng)的兩個(gè)候選哈希桶;
s2、根據(jù)元素所對(duì)應(yīng)的兩個(gè)候選哈希桶是否屬于cuckoo圖,對(duì)元素進(jìn)行分類,其中,v+0類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶都在cuckoo圖中,插入元素不會(huì)造成cuckoo圖節(jié)點(diǎn)數(shù)增加;v+1類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶只有一個(gè)存在于cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加1;v+2類表示元素所對(duì)應(yīng)的兩個(gè)候選桶之前都沒(méi)有被加入cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加2;
s3、對(duì)于cuckoo圖中的每個(gè)子圖,若插入元素后子圖中的邊數(shù)等于節(jié)點(diǎn)數(shù),則該子圖有且只有一個(gè)回路,并將該子圖稱為滿載子圖;若插入元素后子圖中的邊數(shù)不等于節(jié)點(diǎn)數(shù),則將該子圖稱為非滿載子圖,其中,在cuckoo圖中,將索引表中每個(gè)桶看作是圖的一個(gè)節(jié)點(diǎn),將索引表中每個(gè)元素看作是圖的一條邊;
s4、若元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖為滿載子圖,則在子圖中元素插入導(dǎo)致的踢出路徑會(huì)形成回路導(dǎo)致無(wú)限循環(huán),預(yù)測(cè)插入操作一定失??;若元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖中有非滿載子圖,則在非滿載子圖中一定存在一個(gè)空位,經(jīng)過(guò)有限次踢出操作時(shí),所有元素都將插入索引表中,預(yù)測(cè)插入操作一定成功,其中,兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于相同子圖或者兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于不同子圖;
s5、若預(yù)測(cè)插入操作失敗,則將元素存入臨時(shí)空間,不進(jìn)行任何踢出操作;若預(yù)測(cè)插入操作成功,則根據(jù)cuckoo哈希機(jī)制執(zhí)行元素插入操作。
優(yōu)選地,步驟s2具體包括以下子步驟:
s2.1、判斷兩個(gè)候選哈希桶是否都已經(jīng)存在于cuckoo圖中,若都存在,則該元素屬于v+0類,否則執(zhí)行步驟s2.2;
s2.2、判斷是否有一個(gè)候選哈希桶存在于cuckoo圖中,若是,則該元素屬于v+1類,否則該元素屬于v+2類。
優(yōu)選地,步驟s4具體包括以下子步驟:
s4.1、判斷兩個(gè)候選哈希桶是否屬于同一子圖,若是則執(zhí)行步驟s4.2;否則執(zhí)行步驟s4.3;
s4.2、判斷該子圖是否為滿載子圖,若是滿載子圖,則預(yù)測(cè)插入一定失敗,若是非滿載子圖,則預(yù)測(cè)插入一定成功;
s4.3、判斷兩個(gè)子圖是否都滿載,若兩個(gè)子圖均是滿載子圖,則預(yù)測(cè)插入一定失敗,否則預(yù)測(cè)插入一定成功。
優(yōu)選地,步驟s5具體包括以下子步驟:
s5.1、判斷元素是否屬于v+0類,若是則任選一個(gè)對(duì)應(yīng)非滿載子圖的候選哈希桶,然后執(zhí)行步驟s5.2,否則執(zhí)行步驟s5.4;
s5.2、判斷該候選哈希桶是否被其他元素占據(jù),若沒(méi)有則將該元素直接插入該候選哈希桶,并將該候選哈希桶對(duì)應(yīng)子圖的邊數(shù)加1;若有元素占據(jù),則執(zhí)行步驟s5.3;
s5.3、哈希計(jì)算得到該位置所占據(jù)元素的另一個(gè)候選哈希桶,再將待插入元素插入該候選哈希桶,將原有元素踢出成為待插入元素,并返回步驟s5.2繼續(xù)執(zhí)行;
s5.4、判斷該元素是否屬于v+1類,若是則將該元素插入對(duì)應(yīng)子圖新增節(jié)點(diǎn)所對(duì)應(yīng)的哈希桶中,并將對(duì)應(yīng)子圖的節(jié)點(diǎn)數(shù)加1以及對(duì)應(yīng)子圖的邊數(shù)加1;否則,該元素屬于v+2類型,分配一個(gè)新的子圖號(hào),直接將元素插入任一新增節(jié)點(diǎn)的對(duì)應(yīng)桶中,再設(shè)置新子圖的節(jié)點(diǎn)數(shù)為2,邊數(shù)為1。
按照本發(fā)明的另一方面,提供了一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化系統(tǒng),包括:
哈希值計(jì)算模塊,用于根據(jù)元素屬性隨機(jī)選擇兩個(gè)相互獨(dú)立的哈希函數(shù)計(jì)算得到元素在索引表中對(duì)應(yīng)的兩個(gè)候選哈希桶;
元素分類模塊,用于根據(jù)元素所對(duì)應(yīng)的兩個(gè)候選哈希桶是否屬于cuckoo圖,對(duì)元素進(jìn)行分類,其中,v+0類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶都在cuckoo圖中,插入元素不會(huì)造成cuckoo圖節(jié)點(diǎn)數(shù)增加;v+1類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶只有一個(gè)存在于cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加1;v+2類表示元素所對(duì)應(yīng)的兩個(gè)候選桶之前都沒(méi)有被加入cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加2;
子圖判斷模塊,用于對(duì)于cuckoo圖中的每個(gè)子圖,若插入元素后子圖中的邊數(shù)等于節(jié)點(diǎn)數(shù),則該子圖有且只有一個(gè)回路,并將該子圖稱為滿載子圖;若插入元素后子圖中的邊數(shù)不等于節(jié)點(diǎn)數(shù),則將該子圖稱為非滿載子圖,其中,在cuckoo圖中,將索引表中每個(gè)桶看作是圖的一個(gè)節(jié)點(diǎn),將索引表中每個(gè)元素看作是圖的一條邊;
結(jié)果預(yù)測(cè)模塊,用于在元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖為滿載子圖時(shí),則在子圖中元素插入導(dǎo)致的踢出路徑會(huì)形成回路導(dǎo)致無(wú)限循環(huán),預(yù)測(cè)插入操作一定失敗;若元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖中有非滿載子圖,則在非滿載子圖中一定存在一個(gè)空位,經(jīng)過(guò)有限次踢出操作時(shí),所有元素都將插入索引表中,預(yù)測(cè)插入操作一定成功,其中,兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于相同子圖或者兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于不同子圖;
操作執(zhí)行模塊,用于在預(yù)測(cè)插入操作失敗時(shí),則將元素存入臨時(shí)空間,不進(jìn)行任何踢出操作;若預(yù)測(cè)插入操作成功,則根據(jù)cuckoo哈希機(jī)制執(zhí)行元素插入操作。
優(yōu)選地,所述元素分類模塊包括:
第一判斷模塊,用于判斷兩個(gè)候選哈希桶是否都已經(jīng)存在于cuckoo圖中;
第一元素分類模塊,用于在兩個(gè)候選哈希桶都已經(jīng)存在于cuckoo圖中時(shí),確定該元素屬于v+0類;
第二判斷模塊,用于在兩個(gè)候選哈希桶不是都已經(jīng)存在于cuckoo圖中時(shí),判斷是否有一個(gè)候選哈希桶存在于cuckoo圖中;
第二元素分類模塊,用于在有一個(gè)哈希桶存在于cuckoo圖中時(shí),確定該元素屬于v+1類,否則確定該元素屬于v+2類。
優(yōu)選地,所述結(jié)果預(yù)測(cè)模塊包括:
第三判斷模塊,用于判斷兩個(gè)候選哈希桶是否屬于同一子圖;
第一預(yù)測(cè)模塊,用于在兩個(gè)候選哈希桶屬于同一子圖時(shí),判斷該子圖是否為滿載子圖,若是滿載子圖,則預(yù)測(cè)插入一定失敗,若是非滿載子圖,則預(yù)測(cè)插入一定成功;
第二預(yù)測(cè)模塊,用于在兩個(gè)候選哈希桶不是屬于同一子圖時(shí),判斷兩個(gè)子圖是否都滿載,若兩個(gè)子圖均是滿載子圖,則預(yù)測(cè)插入一定失敗,否則預(yù)測(cè)插入一定成功。
優(yōu)選地,所述操作執(zhí)行模塊包括:
第四判斷模塊,用于判斷元素是否屬于v+0類;
第一操作執(zhí)行模塊,用于在元素屬于v+0類時(shí),任選一個(gè)對(duì)應(yīng)非滿載子圖的候選哈希桶,判斷該候選哈希桶是否被其他元素占據(jù),若沒(méi)有則將該元素直接插入該候選哈希桶,并將該候選哈希桶對(duì)應(yīng)子圖的邊數(shù)加1;
第二操作執(zhí)行模塊,用于在任選的候選哈希桶被其他元素占據(jù)時(shí),哈希計(jì)算得到該位置所占據(jù)元素的另一個(gè)候選哈希桶,再將待插入元素插入該候選哈希桶,將原有元素踢出成為待插入元素,并返回繼續(xù)執(zhí)行所述第一操作執(zhí)行模塊的操作;
第三操作執(zhí)行模塊,用于在元素不是屬于v+0類時(shí),判斷該元素是否屬于v+1類,若是則將該元素插入對(duì)應(yīng)子圖新增節(jié)點(diǎn)所對(duì)應(yīng)的哈希桶中,并將對(duì)應(yīng)子圖的節(jié)點(diǎn)數(shù)加1以及對(duì)應(yīng)子圖的邊數(shù)加1;否則,該元素屬于v+2類型,分配一個(gè)新的子圖號(hào),直接將元素插入任一新增節(jié)點(diǎn)的對(duì)應(yīng)桶中,再設(shè)置新子圖的節(jié)點(diǎn)數(shù)為2,邊數(shù)為1。
總體而言,本發(fā)明方法與現(xiàn)有技術(shù)方案相比,能夠取得下列有益效果:
解決云存儲(chǔ)系統(tǒng)中構(gòu)建基于cuckoo哈希的索引表的無(wú)限循環(huán)問(wèn)題,其通過(guò)在元素實(shí)際插入前通過(guò)哈希計(jì)算識(shí)別其所屬的一個(gè)或兩個(gè)子圖;再根據(jù)子圖狀態(tài)預(yù)測(cè)插入結(jié)果;最后根據(jù)預(yù)測(cè)結(jié)果執(zhí)行插入操作或者直接存入臨時(shí)空間,可以避免無(wú)效的踢出操作,提高了數(shù)據(jù)存儲(chǔ)效率。
本發(fā)明利用cuckoo哈希機(jī)制將海量數(shù)據(jù)扁平化哈希到整個(gè)索引表中,利用索引表來(lái)維護(hù)元素位置,記錄并通過(guò)對(duì)元素分類精確預(yù)測(cè)是否會(huì)產(chǎn)生無(wú)限循環(huán),滿足快速查詢需求的同時(shí)提高索引構(gòu)建性能。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例公開(kāi)的一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化方法的流程示意圖;
圖2為本發(fā)明實(shí)施例公開(kāi)的一種元素分類方法的流程示意圖;
圖3為本發(fā)明實(shí)施例公開(kāi)的一種結(jié)果預(yù)測(cè)的方法流程示意圖;
圖4為本發(fā)明實(shí)施例公開(kāi)的一種操作執(zhí)行的方法流程示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
本發(fā)明為云存儲(chǔ)系統(tǒng)中基于cuckoo哈希計(jì)算的海量數(shù)據(jù)存儲(chǔ)優(yōu)化方法,其利用有向圖來(lái)維護(hù)元素位置記錄并通過(guò)對(duì)元素分類精確預(yù)測(cè)是否會(huì)產(chǎn)生無(wú)限循環(huán),滿足快速查詢需求的同時(shí)提高索引構(gòu)建性能。
如圖1所示為本發(fā)明實(shí)施例公開(kāi)的一種基于cuckoo哈希計(jì)算的數(shù)據(jù)存儲(chǔ)優(yōu)化方法的流程示意圖,在圖1所示的方法中包括以下步驟:
s1、計(jì)算哈希值:根據(jù)元素屬性隨機(jī)選擇兩個(gè)相互獨(dú)立的哈希函數(shù)計(jì)算得到元素在索引表中對(duì)應(yīng)的兩個(gè)候選哈希桶;
s2、元素分類:根據(jù)元素所對(duì)應(yīng)的兩個(gè)候選哈希桶是否屬于cuckoo圖,對(duì)元素進(jìn)行分類,其中,v+0類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶都在cuckoo圖中,插入元素不會(huì)造成cuckoo圖節(jié)點(diǎn)數(shù)增加;v+1類表示元素所對(duì)應(yīng)的兩個(gè)候選哈希桶只有一個(gè)存在于cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加1;v+2類表示元素所對(duì)應(yīng)的兩個(gè)候選桶之前都沒(méi)有被加入cuckoo圖中,插入元素會(huì)使cuckoo圖節(jié)點(diǎn)數(shù)加2;
優(yōu)選地,如圖2所示為本發(fā)明實(shí)施例公開(kāi)的一種如何實(shí)現(xiàn)元素分類的流程示意圖,具體包括以下子步驟:
s2.1、判斷兩個(gè)候選哈希桶是否都已經(jīng)存在于cuckoo圖中,若都存在,則該元素屬于v+0類,否則執(zhí)行步驟s2.2;
s2.2、判斷是否有一個(gè)候選哈希桶存在于cuckoo圖中,若是,則該元素屬于v+1類,否則該元素屬于v+2類。
s3、子圖判斷:若插入元素后,則cuckoo圖的總邊數(shù)加1,若元素屬于v+0類,則cuckoo圖的總節(jié)點(diǎn)數(shù)不變,若元素屬于v+1類,則cuckoo圖的總節(jié)點(diǎn)數(shù)增加1,若元素屬于v+2類,則cuckoo圖的總節(jié)點(diǎn)數(shù)增加2,因此,cuckoo圖中每個(gè)子圖至多存在一個(gè)回路;若子圖中的邊數(shù)等于節(jié)點(diǎn)數(shù),則該子圖有且只有一個(gè)回路,并將該子圖稱為滿載子圖;若子圖邊數(shù)不等于節(jié)點(diǎn)數(shù),則將該子圖稱為非滿載子圖,其中,在cuckoo圖中,將索引表中每個(gè)桶看作是圖的一個(gè)節(jié)點(diǎn),將索引表中每個(gè)元素看作是圖的一條邊;
s4、結(jié)果預(yù)測(cè):若元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖為滿載子圖,則在子圖中元素插入導(dǎo)致的踢出路徑會(huì)形成回路導(dǎo)致無(wú)限循環(huán),預(yù)測(cè)插入操作一定失??;若元素的兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)所屬的子圖中有非滿載子圖,則子圖中一定存在一個(gè)空位,經(jīng)過(guò)有限次踢出操作時(shí),所有元素都將插入索引表中,預(yù)測(cè)插入操作一定成功,其中,兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于相同子圖或者兩個(gè)候選哈希桶對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)屬于不同子圖;
優(yōu)選地,如圖3所示為本發(fā)明實(shí)施例公開(kāi)的一種如何實(shí)現(xiàn)結(jié)果預(yù)測(cè)的方法流程示意圖;具體包括以下子步驟:
s4.1、判斷兩個(gè)候選哈希桶是否屬于同一子圖,若是則執(zhí)行步驟s4.2;否則執(zhí)行步驟s4.3;
s4.2、判斷該子圖是否為滿載子圖,若是滿載子圖,則預(yù)測(cè)插入一定失敗,若是非滿載子圖,則預(yù)測(cè)插入一定成功;
s4.3、判斷兩個(gè)子圖是否都滿載,若兩個(gè)子圖均是滿載子圖,則預(yù)測(cè)插入一定失敗,否則預(yù)測(cè)插入一定成功。
s5、操作執(zhí)行:若預(yù)測(cè)插入操作失敗,則將元素存入臨時(shí)空間,不進(jìn)行任何踢出操作;若預(yù)測(cè)插入操作成功,則根據(jù)cuckoo哈希機(jī)制執(zhí)行元素插入操作。
優(yōu)選地,如圖4所示為本發(fā)明實(shí)施例公開(kāi)的一種如何實(shí)現(xiàn)操作執(zhí)行的方法流程示意圖;具體包括以下子步驟:
s5.1、判斷元素是否屬于v+0類,若是則任選一個(gè)對(duì)應(yīng)非滿載子圖的候選哈希桶,然后執(zhí)行步驟s5.2,否則執(zhí)行步驟s5.4;
s5.2、判斷該候選哈希桶是否被其他元素占據(jù),若沒(méi)有則將該元素直接插入該候選哈希桶,并將該候選哈希桶對(duì)應(yīng)子圖的邊數(shù)加1;若有元素占據(jù),則執(zhí)行步驟s5.3;
s5.3、哈希計(jì)算得到該位置所占據(jù)元素的另一個(gè)候選哈希桶,再將待插入元素插入該候選哈希桶,將原有元素踢出成為待插入元素,并返回步驟s5.2繼續(xù)執(zhí)行;
s5.4、判斷該元素是否屬于v+1類,若是則將該元素插入對(duì)應(yīng)子圖新增節(jié)點(diǎn)所對(duì)應(yīng)的哈希桶中,并將對(duì)應(yīng)子圖的節(jié)點(diǎn)數(shù)加1以及對(duì)應(yīng)子圖的邊數(shù)加1;否則,該元素屬于v+2類型,分配一個(gè)新的子圖號(hào),直接將元素插入任一新增節(jié)點(diǎn)的對(duì)應(yīng)桶中,再設(shè)置新子圖的節(jié)點(diǎn)數(shù)為2,邊數(shù)為1。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。