两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

存儲元素的方法與系統(tǒng)及查找元素的方法與系統(tǒng)的制作方法

文檔序號:6562620閱讀:159來源:國知局
專利名稱:存儲元素的方法與系統(tǒng)及查找元素的方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及存儲元素的方法與系統(tǒng)及查找元素的方法與系統(tǒng),特別涉及一種利用哈希算法存儲元素的方法與系統(tǒng)及查找元素的方法與系統(tǒng)。
背景技術(shù)
隨著時(shí)代的發(fā)展,從眾多的信息中篩選自己需要的內(nèi)容成了一項(xiàng)重要的技術(shù),確定一個(gè)元素是否在一個(gè)特定的集合中是這項(xiàng)技術(shù)中的一小部分。
目前,當(dāng)我們需要確定一個(gè)元素是否在一個(gè)集合中時(shí),最常規(guī)的做法就是用順序查找法。順序查找的思想是是將要查找的元素與集合中的每一個(gè)元素順序逐個(gè)進(jìn)行比較,相同即為查找成功,否則查找失敗。
如果集合中的元素能夠進(jìn)行有序排列的(例如英文字符串可以按照字母表的順序進(jìn)行排列),可以先對該集合的元素進(jìn)行升序或降序進(jìn)行預(yù)排,之后用二分查找法進(jìn)行查找。二分查找的基本思想是首先將要集合中的元素按關(guān)鍵字排序,其次將要查找的元素與集合中元素中間位置的值比較,相同,則查找成功;不等,則中間數(shù)據(jù)大于或小于要查找的元素,無論怎樣查找將在一半的數(shù)據(jù)中查找。
但是以上兩種查找方法的查找效率都不高,如果是無序的集合,查找的時(shí)間跟集合中元素的數(shù)量成正比;即便集合是有序的,采用二分法時(shí)的查找也比順序查找的效率提高不大,因?yàn)楫?dāng)集合中的元素是以字符串的形式存在時(shí),查找的過程中就需要逐個(gè)比較字符串里面的單個(gè)字符的值,這樣降低了查找的效率。
由于大多集合中的元素都是以字符串的形式存在,除了存儲字符串本身,還需要存儲字符串以外的附加信息,例如字符串長度信息等,但是這些信息都是我們在查找過程中不需要的。因此這些不必要信息占用了過多的資源,造成了資源浪費(fèi)。
綜上所述,現(xiàn)有技術(shù)雖然能夠查找元素是否在特定的集合中,但是效率較低,而且占用的資源較大。

發(fā)明內(nèi)容
本發(fā)明要解決的問題是查找效率不高與占用資源大的問題,而通過本發(fā)明的方法,將原有的元素通過特殊的方法生成索引值,即有效減少了資源浪費(fèi),又提高了查找速度。
為解決上述技術(shù)問題,本發(fā)明的目的是通過以下方法實(shí)現(xiàn)的將集合中所有元素運(yùn)用哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存。
其中,生成索引值是運(yùn)用下列特定哈希算法索引值=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2N;K為預(yù)置的哈希鍵值;L0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù)。
其中,將保存的索引值數(shù)組進(jìn)行排序。
其中,所述的哈希關(guān)鍵值為兩位數(shù)或31。
為解決上述問題,本發(fā)明還提供一種查找元素的方法,該方法具體為將集合中所有元素運(yùn)用哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存;輸入要查找的元素,運(yùn)用哈希算法生成與該元素對應(yīng)的索引值,在所述的索引值數(shù)組中查找該索引值。
其中,生成索引值是運(yùn)用下列特定哈希算法索引值=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2N;K為預(yù)置的哈希鍵值;
L0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù)。
其中,將保存的索引值數(shù)組進(jìn)行排序。
其中,所述的哈希關(guān)鍵值為兩位數(shù)或31。
為實(shí)現(xiàn)上述方法,本發(fā)明提供了一種存儲元素的系統(tǒng),該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元;獲取單元用于獲取元素;計(jì)算單元用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元用于將生成的索引值形成索引值數(shù)組并保存。
其中,該系統(tǒng)進(jìn)一步包括排序單元;排序單元用于將形成的索引值數(shù)組排序。
為實(shí)現(xiàn)元素查找的方法,本發(fā)明提供了一種用于查找元素的系統(tǒng),該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元、查找單元;獲取單元用于獲取元素;計(jì)算單元用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元用于將生成的索引值形成索引值數(shù)組并保存;查找單元用于在索引值數(shù)組中查找計(jì)算單元生成的某一索引值。
其中,該系統(tǒng)進(jìn)一步包括排序單元;排序單元用于將形成的索引值數(shù)組排序。
由于現(xiàn)有技術(shù)中在存儲元素本身時(shí),還要存儲一個(gè)串的長度信息。以英文單詞為例,當(dāng)集合中單詞的平均長度為4至5個(gè)字符時(shí),存儲需要占用8至10個(gè)字節(jié),而本發(fā)明利用哈希算法將集合中的元素存儲成索引值的形式,只需要存儲一個(gè)整數(shù),即4個(gè)字節(jié)。因此采用本發(fā)明能夠?qū)⑼瑯觾?nèi)容的東西的存儲容量減小為現(xiàn)有技術(shù)的二分之一至三分之一。
且當(dāng)K的取值較好時(shí),能夠最大程度的避免哈希算法計(jì)算出的關(guān)鍵值出現(xiàn)相同的情況,從而提高查找元素的準(zhǔn)確率。
當(dāng)形成了將元素以索引值存儲的索引值數(shù)組時(shí),在查找時(shí)由于是對整數(shù)的比較,而現(xiàn)有技術(shù)需要對字符串中的每個(gè)字符進(jìn)行比較,若平均每個(gè)字符串有4至5個(gè)字符時(shí),運(yùn)用本發(fā)明能夠?qū)⒉檎宜俣忍岣咚闹廖灞丁?br> 綜上所述,本發(fā)明對比現(xiàn)有技術(shù)而言,減少了元素存儲時(shí)所占用的資源,并且提高了查找時(shí)的效率。


圖1為本發(fā)明一實(shí)施例流程圖;圖2為本發(fā)明一實(shí)施例流程圖;圖3為本發(fā)明一實(shí)施例流程圖;圖4為本發(fā)明一實(shí)施例系統(tǒng)圖;圖5為本發(fā)明一實(shí)施例系統(tǒng)圖;圖6為本發(fā)明一實(shí)施例系統(tǒng)圖。
具體實(shí)施例方式
本發(fā)明要解決的問題是查找效率不高與占用資源大的問題,而通過本發(fā)明的方法,將原有的元素通過特殊的方法生成索引值,即有效減少了資源浪費(fèi),又提高了查找速度。
為達(dá)到上述效果,下面詳細(xì)介紹本法明的實(shí)現(xiàn)過程。
例如某個(gè)集合中的所有元素都為英文字符串。由于目前在存儲這些英文字符串的同時(shí)還需要保存除英文字符串之外的附加信息,但這些附加信息并不是我們真正需要的,因此這些附加信息占用了過多的資源。為此,本發(fā)明采用對這些字符串進(jìn)行轉(zhuǎn)換,通過本發(fā)明給出的哈希算法來實(shí)現(xiàn)。
參見圖1,該圖為本發(fā)明存儲字符串的流程。
步驟100獲取集合中的元素,將集合中的一個(gè)英文字符串用特定的哈希算法進(jìn)行計(jì)算,得到與該英文字符串一一對應(yīng)的一個(gè)索引值。
所述的特定的哈希算法為假設(shè)元素字符串N=N0N1N2......N(M-1);M為字符串N的字符個(gè)數(shù);哈希鍵值=K;通過多次實(shí)驗(yàn)數(shù)據(jù)顯示,K取31時(shí)的效果相對較好。
索引值I=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2NL0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù);若得到索引值為32位的整型數(shù)據(jù),那么N就取為32。
步驟101將該索引值保存至一個(gè)臨時(shí)的索引值數(shù)組中。
步驟102對集合中所有其他英文字符串都依次執(zhí)行步驟100、101。
步驟103存儲該索引值數(shù)組。
下面舉個(gè)具體的例子對該存儲方法中的計(jì)算索引值進(jìn)行詳細(xì)描述。
以字符串N=hello為例,從預(yù)先設(shè)定好的哈希表中查找得到其unicode編碼是h104;e101;l108;o111;情況1取K=31、N=32;那么I=(((((h*31+e)*31+l)*31+l)*31+o))mod 232=(((((h*31+101)*31+108)*31+108)*31+111))mod 232=99162322(10進(jìn)制)=d218e905(16進(jìn)制)下面列舉的3組實(shí)驗(yàn)數(shù)據(jù)是基于相同的一個(gè)集合,用不同的K值計(jì)算出的索引值I的分布情況。
表中的數(shù)值分別為在不同的K值時(shí)計(jì)算得出的索引值I。
表1K=53,分布情況

表2K=31,分布情況

表3K=389,分布情況

由上述表1至表3的實(shí)驗(yàn)數(shù)據(jù)可以看出其他條件相同的情況下,K取不同的值時(shí),索引值I的分布情況不同。
表4不同K值分布情況統(tǒng)計(jì)表

表4中的位數(shù)指索引值I的位數(shù);個(gè)數(shù)指索引值I相對于不同位數(shù)的個(gè)數(shù)。通過表4我們可以清楚的看出在K取31時(shí),索引值I的不同位數(shù)數(shù)值個(gè)數(shù)相對于其他K值分布較均勻。
以上的步驟中雖然形成了由索引值構(gòu)成的索引值數(shù)組,但是并未對其數(shù)值中的元素進(jìn)行排序,那么當(dāng)需要對集合中的元素進(jìn)行索引時(shí),就會對索引的效率產(chǎn)生影響。因?yàn)閷τ行驍?shù)組的索引效率顯然要高于對無序數(shù)組的索引效率,因此可以在上述流程的步驟103前,將索引值數(shù)值進(jìn)行排序。
對應(yīng)于上述方法,本發(fā)明還提供了一種用于存儲元素的系統(tǒng),參見圖4該系統(tǒng)包括計(jì)算單元(01)、獲取單元(03)、存儲單元(02);獲取單元(03)用于獲取元素,例如獲取的元素為英文字符串等多種形式;計(jì)算單元(01)用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元(02)用于將生成的索引值形成索引值數(shù)組并保存。
參見圖2,該流程步驟具體如下。
步驟200獲取集合中的元素,將集合中的一個(gè)英文字符串用特定的哈希算法進(jìn)行計(jì)算,得到與該英文字符串一一對應(yīng)的一個(gè)索引值。
所述的特定的哈希算法為假設(shè)元素字符串N=N0N1N2......N(M-1);M為字符串N的字符個(gè)數(shù);哈希鍵值=K;通過多次實(shí)驗(yàn)數(shù)據(jù)顯示,K取31時(shí)的效果相對較好,實(shí)驗(yàn)數(shù)據(jù)同上述的基本相同,在此不在累述。
索引值I=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2NL0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù);若得到索引值為32位的整型數(shù)據(jù),那么N就取為32。
步驟201將該索引值保存至一個(gè)臨時(shí)的索引值數(shù)組中。
步驟202對集合中所有其他英文字符串都依次執(zhí)行步驟200、201。
步驟203對所述的索引值數(shù)組進(jìn)行排序。
步驟204存儲該索引值數(shù)組。
對應(yīng)于上述第二種方法,本發(fā)明提供了用于存儲元素的系統(tǒng),參見圖5該系統(tǒng)包括計(jì)算單元(01)、獲取單元(03)、存儲單元(02)及排序單元(04);獲取單元(03)用于獲取元素,例如獲取的元素為英文字符串等多種形式;計(jì)算單元(01)用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元(02)用于將生成的索引值形成索引值數(shù)組并保存;排序單元(04)用于將形成的索引值數(shù)組排序。
以上兩個(gè)實(shí)施例是對元素的存儲流程進(jìn)行描述的,當(dāng)形成了上述的索引值數(shù)組后,可以在索引該數(shù)組中的元素時(shí)提高索引的速率。
索引的具體步驟參見圖3步驟300將已經(jīng)生成的索引值數(shù)組加載到內(nèi)存中。
步驟301將輸入的元素用特定的哈希算法進(jìn)行計(jì)算,得到與所述元素對應(yīng)的索引值。
此處所述的特定的哈希算法與上述兩個(gè)實(shí)施例的哈希算法相同,在此不再累述。
步驟302在索引值數(shù)組中查找該索引值,若找到表示所述的元素在該集合中。
步驟302所述的查找索引值的方法可以為順序查找法;當(dāng)索引值數(shù)組是有序的情況下可以使用二分法查找等等。
對應(yīng)于該查找方法,本發(fā)明提供了一種用于查找元素的系統(tǒng),參見圖6,該系統(tǒng)包括計(jì)算單元(01)、獲取單元(03)、存儲單元(02)、查找單元(05)及排序單元(04);獲取單元(03)用于獲取元素;
計(jì)算單元(01)用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元(02)用于將生成的索引值形成索引值數(shù)組并保存;查找單元(05)用于在索引值數(shù)組中查找計(jì)算單元生成的某一索引值;排序單元(04)用于將形成的索引值數(shù)組排序。
以上所述的元素并不限于英文字符串,可以是中文字符、日文字符或韓文字符等多種形式,只要能夠應(yīng)用到特定的哈希算法即可。
以上對本發(fā)明所提供的基于即時(shí)通訊工具的媒體文件更新提示的方法及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種存儲元素的方法,其特征在于,該方法包括將集合中所有元素運(yùn)用哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存。
2.根據(jù)權(quán)利要求1所述的存儲元素的方法,其特征在于,生成索引值是運(yùn)用下列特定哈希算法索引值=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2NK為預(yù)置的哈希鍵值;L0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù)。
3.根據(jù)權(quán)利要求1所述的存儲元素的方法,其特征在于,將保存的索引值數(shù)組進(jìn)行排序。
4.根據(jù)權(quán)利要求1至3任一所述的存儲元素的方法,其特征在于,所述的哈希關(guān)鍵值為兩位數(shù)或31。
5.一種查找元素的方法,其特征在于,該方法包括將集合中所有元素運(yùn)用哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存;輸入要查找的元素,運(yùn)用哈希算法生成與該元素對應(yīng)的索引值,在所述的索引值數(shù)組中查找該索引值。
6.根據(jù)權(quán)利要求5所述的查找元素的方法,其特征在于,生成索引值是運(yùn)用下列特定哈希算法索引值=(((L0*K+L1)*K+L2+......)*K+L(M-1)mod2N;K為預(yù)置的哈希鍵值;L0......L(M-1)為通過預(yù)置的哈希表查找出的編碼數(shù)據(jù),L0......L(M-1)對應(yīng)于元素的每一個(gè)字符;N為預(yù)置的索引值的存儲位數(shù)。
7.根據(jù)權(quán)利要求4所述的查找元素的方法,其特征在于,將保存的索引值數(shù)組進(jìn)行排序。
8.根據(jù)權(quán)利要求5至7任一所述的查找元素的方法,其特征在于,所述的哈希關(guān)鍵值為兩位數(shù)或31。
9.一種存儲元素的系統(tǒng),其特征在于,該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元;獲取單元用于獲取元素;計(jì)算單元用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元用于將生成的索引值形成索引值數(shù)組并保存。
10.根據(jù)權(quán)利要求9所述的存儲元素的系統(tǒng),其特征在于,該系統(tǒng)進(jìn)一步包括排序單元;排序單元用于將形成的索引值數(shù)組排序。
11.一種用于查找元素的系統(tǒng),其特征在于,該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元、查找單元;獲取單元用于獲取元素;計(jì)算單元用于將獲取的元素生成與元素一一對應(yīng)的索引值;存儲單元用于將生成的索引值形成索引值數(shù)組并保存;查找單元用于在索引值數(shù)組中查找計(jì)算單元生成的某一索引值。
12.根據(jù)權(quán)利要求11所述的用于查找元素的系統(tǒng),其特征在于,該系統(tǒng)進(jìn)一步包括排序單元;排序單元用于將形成的索引值數(shù)組排序。
全文摘要
本發(fā)明提供了一種存儲元素的方法,該方法包括將集合中所有元素運(yùn)用哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存;對應(yīng)該方法本發(fā)明還提供了一種存儲元素的系統(tǒng),該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元;本發(fā)明還提供了一種查找元素的方法,該方法包括將集合中所有元素運(yùn)用特定哈希算法生成與元素一一對應(yīng)的索引值,組成索引值數(shù)組;將索引值數(shù)組保存;輸入要查找的元素,運(yùn)用哈希算法生成與該元素對應(yīng)的索引值,在所述的索引值數(shù)組中查找該索引值,對應(yīng)查找元素的方法,本發(fā)明還提供了一種查找元素的系統(tǒng),該系統(tǒng)包括計(jì)算單元、獲取單元、存儲單元、查找單元。
文檔編號G06F17/30GK1949221SQ20061014412
公開日2007年4月18日 申請日期2006年11月27日 優(yōu)先權(quán)日2006年11月27日
發(fā)明者彭錦臻 申請人:北京金山軟件有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
石台县| 同心县| 新野县| 晋宁县| 安远县| 东平县| 买车| 贺州市| 全州县| 横峰县| 诸城市| 合江县| 车险| 淅川县| 隆尧县| 抚远县| 海晏县| 原平市| 三江| 清水河县| 浑源县| 台东市| 盘锦市| 长岛县| 西贡区| 云霄县| 芦溪县| 简阳市| 汝州市| 屯留县| 鄂温| 永福县| 衡山县| 镇沅| 永福县| 衡山县| 进贤县| 崇信县| 墨竹工卡县| 灌云县| 江阴市|