亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

改進(jìn)型多路基數(shù)樹的制作方法

文檔序號:6402518閱讀:114來源:國知局
專利名稱:改進(jìn)型多路基數(shù)樹的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及數(shù)據(jù)結(jié)構(gòu)領(lǐng)域,更具體地說,涉及一種改進(jìn)型多路基數(shù)樹(radix tree)以及有關(guān)方法。
背景技術(shù)
計(jì)算機(jī)系統(tǒng)高速處理數(shù)據(jù)的能力部分取決于它們對文件分配表和數(shù)據(jù)庫內(nèi)的特定信息項(xiàng)進(jìn)行快速的隨機(jī)訪問的能力。通過使這些表和數(shù)據(jù)庫在存儲(chǔ)介質(zhì)上或存儲(chǔ)器中具有某種組織形式,有助于對特定數(shù)據(jù)的快速訪問。在數(shù)據(jù)庫的情形下,上述組織形式通常包括將數(shù)據(jù)劃分為若干記錄,并把每條記錄劃分為多個(gè)字段。例如,每條記錄可能對應(yīng)于一個(gè)人,在這個(gè)人的記錄當(dāng)中,其中一個(gè)字段可以是這個(gè)人的名字,而另一個(gè)字段可以是這個(gè)人的地址。這種結(jié)構(gòu)加速了對特定數(shù)據(jù)項(xiàng)的搜索,這是因?yàn)楫?dāng)多個(gè)字段位于各條記錄的同一部分時(shí),只搜索那些感興趣的字段,而不必搜索整個(gè)記錄。
與一組記錄有關(guān)聯(lián)并被挑選出來用于搜索的特定字段有時(shí)被稱為關(guān)鍵字字段,不過關(guān)鍵字可以是對一組記錄進(jìn)行搜索或排序所利用的任何項(xiàng)。例如,如果利用郵政編碼對名字和地址的數(shù)據(jù)庫進(jìn)行搜索,那么郵政編碼就是每條記錄的關(guān)鍵字。每個(gè)關(guān)鍵字與相關(guān)聯(lián)的記錄之間通常具有某種鏈接,使得一旦發(fā)現(xiàn)了關(guān)鍵字,就可以找到相關(guān)聯(lián)的記錄。通過將關(guān)鍵字加載到計(jì)算機(jī)的存儲(chǔ)器中,用電學(xué)方法組織并搜索關(guān)鍵字,就可以相當(dāng)快地執(zhí)行關(guān)鍵字搜索。
可以對載入計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中的關(guān)鍵字依次進(jìn)行搜索。然而,有多種方案無需依次檢查每個(gè)關(guān)鍵字就可以快速并有效地找到想要的關(guān)鍵字。一種促進(jìn)關(guān)鍵字搜索的方案就是將關(guān)鍵字分批為多個(gè)組,并使用串函數(shù)來尋找哪一批次包含著正確的關(guān)鍵字。然后將正確的關(guān)鍵字從它的批次中提取出來。另一種搜索方案則是首先排序關(guān)鍵字,使得隨后可以基于單個(gè)性質(zhì),而相對于其它關(guān)鍵字找到某個(gè)關(guān)鍵字,所述性質(zhì)例如是關(guān)鍵字的首字母或者關(guān)鍵字的數(shù)字值。如果所要排序的關(guān)鍵字?jǐn)?shù)量較小,那么用短小的可執(zhí)行程序來實(shí)現(xiàn)的任何排序算法都足夠了。然而,當(dāng)關(guān)鍵字的數(shù)量變大時(shí),就有必要使用更快的排序技術(shù),即使這種技術(shù)更加復(fù)雜。排序關(guān)鍵字最快也最富有效率的方法之一就是將關(guān)鍵字排列為樹形,使得從根位置開始的搜索只需要尋找正確的分支、子分支和葉,以找到正確的關(guān)鍵字。還有很多其它已知的排序方案,例如快速排序法、冒泡排序法、插入排序法、合并排序法、選擇排序法、希爾(shell)排序法和基數(shù)排序法。
基數(shù)排序在邏輯上將關(guān)鍵字排列為多路基數(shù)樹(“MRT”),使得計(jì)算機(jī)可以遍歷樹的各個(gè)分支,從而非常快地搜索到各項(xiàng)。術(shù)語“基數(shù)(radix)”用來表示數(shù)字系統(tǒng)(numbering system)的基,例如,二進(jìn)制數(shù)字的基數(shù)是2,十進(jìn)制數(shù)字的基數(shù)是10?;鶖?shù)數(shù)字通常定義了可用來構(gòu)造關(guān)鍵字的符號的數(shù)量。一般來說,基數(shù)排序法排列數(shù)據(jù)的方式是基于每項(xiàng)數(shù)據(jù)所具有的某種屬性對它們進(jìn)行分類,而不是將該項(xiàng)數(shù)據(jù)和其它數(shù)據(jù)做比較以發(fā)現(xiàn)它在排列中的相對位置。例如,如果對單詞進(jìn)行排序,所有以“a”開頭的單詞可能被放入一組,所有以“b”開頭的單詞被放入另一組,依此類推。接著,可用同樣的方式對每一組的成員排序,即使用每個(gè)單詞的第二個(gè)字母。如果這些組是按樹形排列的,那么要想尋找某個(gè)包括序列“abc”的關(guān)鍵字,則需遍歷以下路徑,即從樹的根開始,遍歷到“a”分支,然后從“a”分支到“b”子分支,再從“b”分支到“c”葉。當(dāng)?shù)竭_(dá)“c”葉時(shí),它可能指向或包含一個(gè)地址,該地址標(biāo)識出與所述關(guān)鍵字相關(guān)聯(lián)的條目的位置。上述條目可包含任何東西,例如記錄號、指向程序中子例程的指針、符號、甚至關(guān)鍵字本身。
按MRT排列的關(guān)鍵字的各個(gè)符號通常被稱作節(jié)點(diǎn),或者可被存儲(chǔ)在被稱為節(jié)點(diǎn)的存儲(chǔ)器空間中。排列為MRT的索引文件中每個(gè)關(guān)鍵字通常都有幾個(gè)用作指針的附加字節(jié),它們被稱為鏈接。這些鏈接將某個(gè)節(jié)點(diǎn)與一個(gè)或多個(gè)節(jié)點(diǎn)連接起來,例如,一組孩子節(jié)點(diǎn)被鏈接到根節(jié)點(diǎn),所述根節(jié)點(diǎn)是遍歷樹的起始點(diǎn)。其它孩子節(jié)點(diǎn)可被鏈接到上述孩子節(jié)點(diǎn)。而在某個(gè)孩子節(jié)點(diǎn)與根節(jié)點(diǎn)之間的節(jié)點(diǎn)就是該孩子節(jié)點(diǎn)的雙親節(jié)點(diǎn)。
于是,MRT就是構(gòu)建為樹的關(guān)鍵字的表,通常用來索引一個(gè)數(shù)據(jù)文件,其中,根據(jù)關(guān)鍵字所包含的符號來排序這些關(guān)鍵字。雖然MRT上的每個(gè)節(jié)點(diǎn)與用來構(gòu)成關(guān)鍵字的符號組中的各個(gè)符號相對應(yīng),但是MRT中的每個(gè)節(jié)點(diǎn)也從邏輯上代表了從根節(jié)點(diǎn)到該節(jié)點(diǎn)自身的一條路徑中的其雙親節(jié)點(diǎn)中所體現(xiàn)的符號序列。因此,節(jié)點(diǎn)之間的一條獨(dú)特路徑代表了樹中的每個(gè)關(guān)鍵字。這些獨(dú)特的路徑允許從根節(jié)點(diǎn)對關(guān)鍵字進(jìn)行短程的直接訪問。在已知的MRT中,從根節(jié)點(diǎn)到關(guān)鍵字的最后節(jié)點(diǎn)之間的路徑中的節(jié)點(diǎn)數(shù)量等于關(guān)鍵字中符號的數(shù)量。
在已知的MRT方案中,存儲(chǔ)器空間不僅是為實(shí)際的關(guān)鍵字條目保留的,也是為潛在的關(guān)鍵字條目保留的,這些潛在的關(guān)鍵字條目可能隨后使用在每種方案中都允許的多種符號組合方式而被添加到樹中。換言之,已知的MRT方案要求一個(gè)關(guān)鍵字中的每個(gè)符號都在不同的層上表示,因此要添加一個(gè)給定的關(guān)鍵字,就要比所需的建立更多的MRT結(jié)構(gòu)??梢杂?jì)算出在已知的MRT方案中所浪費(fèi)的存儲(chǔ)器空間的數(shù)量。分配用于一層的存儲(chǔ)器空間一般與基數(shù)相等,即用來構(gòu)造關(guān)鍵字的可能的符號“m”。因此,m的值取決于在某個(gè)特定的方案中被用來構(gòu)造關(guān)鍵字的符號的“字母表”。例如,使用英文字母表的關(guān)鍵字具有26個(gè)可能的符號。數(shù)字關(guān)鍵字的m值等于所使用的數(shù)字系統(tǒng)的基。例如,二進(jìn)制關(guān)鍵字的m值等于2,十進(jìn)制關(guān)鍵字的m值等于10,十六進(jìn)制關(guān)鍵字的m值等于16。由于已知的MRT通過將關(guān)鍵字中的每個(gè)符號分派到包含m個(gè)節(jié)點(diǎn)的一層上,藉此建立樹,所以一個(gè)具有n個(gè)符號的關(guān)鍵字被分配了n個(gè)具有m個(gè)節(jié)點(diǎn)的層。例如,當(dāng)使用“apples”作為關(guān)鍵字時(shí),一般為這個(gè)關(guān)鍵字的六個(gè)符號中的每一個(gè)符號都分配一個(gè)包含26個(gè)節(jié)點(diǎn)的層,從而導(dǎo)致156個(gè)節(jié)點(diǎn)的存儲(chǔ)器分配結(jié)果。包含類似符號的關(guān)鍵字條目可能使用一些空節(jié)點(diǎn)。但是每當(dāng)向樹中添加一個(gè)比這棵樹中現(xiàn)存的任何關(guān)鍵字都具有更多符號的關(guān)鍵字時(shí),都必須向這棵樹中至少添加一個(gè)具有m個(gè)節(jié)點(diǎn)的新層。將一個(gè)關(guān)鍵字中的每個(gè)符號都分派到獨(dú)特的一層,這樣來分配存儲(chǔ)器可能很不必要地產(chǎn)生大量包含無用存儲(chǔ)器空間的相對較空的大MRT,遍歷這種MRT既不方便又很慢。當(dāng)關(guān)鍵字的表相對稀疏的時(shí)候,這種問題格外明顯。


圖1是適于實(shí)施本發(fā)明一些實(shí)施例的計(jì)算設(shè)備的圖形表示。
圖2是可由現(xiàn)有技術(shù)的MRT和本發(fā)明的MRT來組織和搜索的關(guān)鍵字的表。
圖3是現(xiàn)有技術(shù)的MRT的圖表表示。
圖4是根據(jù)本發(fā)明的一個(gè)方面,對改進(jìn)型MRT的第一實(shí)施例的圖表表示。
圖5是用于實(shí)現(xiàn)本發(fā)明的改進(jìn)型MRT的示例性方法的流程圖。
圖6是根據(jù)本發(fā)明的一個(gè)方面,用于搜索改進(jìn)型MRT的示例性方法的流程圖。
圖7是根據(jù)本發(fā)明的一個(gè)方面,對改進(jìn)型MRT的第二實(shí)施例的圖表表示。
圖8是用于實(shí)現(xiàn)本發(fā)明的改進(jìn)型MRT的示例性裝置700的框圖。
圖9是一件產(chǎn)品的圖表表示,該產(chǎn)品包括提供指令的機(jī)器可讀介質(zhì),所述指令使得機(jī)器實(shí)現(xiàn)本發(fā)明的改進(jìn)型MRT和/或一種或多種相關(guān)方法。
具體實(shí)施例方式
這里所描述的是改進(jìn)型多路基數(shù)樹和相關(guān)方法。本發(fā)明更改了MRT的傳統(tǒng)結(jié)構(gòu),使得從根節(jié)點(diǎn)到關(guān)鍵字的條目的路徑中的節(jié)點(diǎn)數(shù)量可少于這個(gè)關(guān)鍵字中的符號數(shù)量。本發(fā)明可用于在控制電路中和/或在計(jì)算設(shè)備的存儲(chǔ)器中執(zhí)行快速和有效的關(guān)鍵字搜索。
本發(fā)明所建立的MRT存儲(chǔ)關(guān)鍵字所需的樹型數(shù)據(jù)結(jié)構(gòu)的數(shù)量減少了。根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以使用改進(jìn)型MRT在兩個(gè)物理節(jié)點(diǎn)層上為某個(gè)關(guān)鍵字的第一個(gè)和最后一個(gè)符號中的每一個(gè)符號建立一個(gè)邏輯節(jié)點(diǎn)層,但是不建立中間節(jié)點(diǎn)層來表示這個(gè)關(guān)鍵字在第一個(gè)和最后一個(gè)符號之間的符號。這樣一來,雖然本發(fā)明所使用的改進(jìn)型MRT缺少中間節(jié)點(diǎn)層,但是可以用和傳統(tǒng)的非改進(jìn)型MRT類似的方式,在改進(jìn)型MRT上邏輯地表示每個(gè)所存儲(chǔ)的關(guān)鍵字,同時(shí)使用了更少的存儲(chǔ)器。
在本發(fā)明的另一個(gè)實(shí)施例中,改進(jìn)型MRT可以使用最短的可能符號序列在樹中存儲(chǔ)關(guān)鍵字的條目。如果在依次檢查節(jié)點(diǎn)期間發(fā)現(xiàn)了未存儲(chǔ)關(guān)鍵字條目的節(jié)點(diǎn),則插入所述關(guān)鍵字的條目,而不再檢查樹以尋找所述關(guān)鍵字的后續(xù)符號。如果沒有發(fā)現(xiàn)空節(jié)點(diǎn),并且對應(yīng)于關(guān)鍵字中下一符號的節(jié)點(diǎn)不存在,則建立所需的節(jié)點(diǎn),并插入所述關(guān)鍵字的條目,而不再搜索樹以尋找所述關(guān)鍵字中的后續(xù)符號。
諸如“存儲(chǔ)關(guān)鍵字”、“插入關(guān)鍵字”和“存儲(chǔ)/插入關(guān)鍵字的條目”等術(shù)語在描述本發(fā)明時(shí)具有基本相同的含義在改進(jìn)型MRT上的某個(gè)節(jié)點(diǎn)處存儲(chǔ)關(guān)鍵字的條目。本發(fā)明的普通技術(shù)人員將會(huì)理解,條目可以是與關(guān)鍵字相關(guān)聯(lián)的存儲(chǔ)器空間、指向某一存儲(chǔ)器空間的指針、指向某個(gè)記錄的指針、執(zhí)行某個(gè)過程的指令、和/或所述關(guān)鍵字自身的表示,以上任何一種都可被附加到代表所述關(guān)鍵字的節(jié)點(diǎn)上。
圖1示出了適于實(shí)施本發(fā)明多個(gè)實(shí)施例的計(jì)算設(shè)備100。計(jì)算機(jī)系統(tǒng)100包含處理器102、存儲(chǔ)器104、存儲(chǔ)設(shè)備106、盤控制器108、鍵盤接口110和視頻接口112,它們?nèi)鐖D所示由一條或多條總線114耦合在一起。處理器102對數(shù)據(jù)進(jìn)行訪問,這些數(shù)據(jù)包括可存儲(chǔ)在存儲(chǔ)設(shè)備106中的計(jì)算機(jī)程序。另外,處理器102將計(jì)算機(jī)程序傳送到存儲(chǔ)器104中,并執(zhí)行已駐留于存儲(chǔ)器中的程序。在一個(gè)實(shí)施例中,本發(fā)明可以是軟件,其作為被存儲(chǔ)的程序而駐留于存儲(chǔ)設(shè)備106上。在由處理器102訪問后,本發(fā)明可以根據(jù)存儲(chǔ)器104中本發(fā)明的教導(dǎo),實(shí)現(xiàn)一種或多種改進(jìn)型基數(shù)樹。在另一個(gè)實(shí)施例中,本發(fā)明可以是附接于一條或多條總線114的獨(dú)立模塊中的硬件或硬件和軟件的組合。本領(lǐng)域的普通技術(shù)人員將會(huì)明白,適于實(shí)施本發(fā)明的計(jì)算設(shè)備100可以包含附加的或不同的組件。
圖2示出了適于在計(jì)算機(jī)存儲(chǔ)器中排列為MRT的關(guān)鍵字表200。對于這個(gè)例子而言,關(guān)鍵字由2到11個(gè)符號組成,但是關(guān)鍵字可能是任何長度的或者是同一長度的。在這個(gè)例子中,用來構(gòu)成關(guān)鍵字的符號是英文字母表中的字母,但是也能使用任何有限的符號集。用于索引計(jì)算機(jī)數(shù)據(jù)文件的常見的表通常都比這個(gè)例子擁有多得多的關(guān)鍵字。
圖3示出了組織圖2所示的關(guān)鍵字表200以用于多路基數(shù)搜索的現(xiàn)有技術(shù)MRT 300。以關(guān)鍵字表200中的第一個(gè)關(guān)鍵字“ab”202為例,根節(jié)點(diǎn)301指向第一節(jié)點(diǎn)層304中的孩子節(jié)點(diǎn)302。孩子節(jié)點(diǎn)302對應(yīng)于關(guān)鍵字“ab”202中的第一個(gè)符號“a”。節(jié)點(diǎn)302指向第二節(jié)點(diǎn)層308中的節(jié)點(diǎn)306。節(jié)點(diǎn)306對應(yīng)于關(guān)鍵字“ab”202中的第二個(gè)符號“b”。節(jié)點(diǎn)306指向葉節(jié)點(diǎn)310,而葉節(jié)點(diǎn)310指向關(guān)鍵字“ab”202的條目。葉節(jié)點(diǎn)一般都指向關(guān)鍵字的條目,例如與關(guān)鍵字相關(guān)聯(lián)的記錄。
對于關(guān)鍵字表200中的第二個(gè)關(guān)鍵字“abc”204,節(jié)點(diǎn)306指向孩子節(jié)點(diǎn)312,其對應(yīng)于關(guān)鍵字“abc”204在第三節(jié)點(diǎn)層314中的符號“c”。節(jié)點(diǎn)312指向葉節(jié)點(diǎn)316,而葉節(jié)點(diǎn)316又指向關(guān)鍵字“abc”204的條目。
對于關(guān)鍵字表200中的第三個(gè)關(guān)鍵字“abd”206,節(jié)點(diǎn)306也指向孩子節(jié)點(diǎn)318,其對應(yīng)于第三節(jié)點(diǎn)層314中的符號“d”。節(jié)點(diǎn)318依次又指向葉節(jié)點(diǎn)320,而葉節(jié)點(diǎn)320指向了關(guān)鍵字“abd”206的條目。
對于關(guān)鍵字表200中的第四個(gè)關(guān)鍵字“abcd”208,節(jié)點(diǎn)312指向孩子節(jié)點(diǎn)322,其對應(yīng)于關(guān)鍵字“abcd”208在第四節(jié)點(diǎn)層324中的符號“d”。節(jié)點(diǎn)322依次又指向葉節(jié)點(diǎn)326,而葉節(jié)點(diǎn)326指向了關(guān)鍵字“abcd”208的條目。
對于關(guān)鍵字表200中的第五個(gè)關(guān)鍵字“apples”210,節(jié)點(diǎn)302指向孩子節(jié)點(diǎn)328,其對應(yīng)于關(guān)鍵字“apples”210在第二節(jié)點(diǎn)層308中的符號“p”。節(jié)點(diǎn)328指向孩子節(jié)點(diǎn)330,其對應(yīng)于新的節(jié)點(diǎn)層332中的第二“p”符號。節(jié)點(diǎn)330指向節(jié)點(diǎn)334,其對應(yīng)于第四節(jié)點(diǎn)層336中的符號“l(fā)”。節(jié)點(diǎn)334指向節(jié)點(diǎn)338,其對應(yīng)于下一節(jié)點(diǎn)層340中的符號“e”。節(jié)點(diǎn)338指向節(jié)點(diǎn)342,其對應(yīng)于第六節(jié)點(diǎn)層344中的符號“s”。節(jié)點(diǎn)342依次指向葉節(jié)點(diǎn)346,而葉節(jié)點(diǎn)346指向了關(guān)鍵字“apples”210的條目。
對于關(guān)鍵字表200中以符號“b”開頭的關(guān)鍵字,第一樹層304中的節(jié)點(diǎn)348對應(yīng)于符號“b”。對于關(guān)鍵字“bl”212而言,對應(yīng)于符號“b”的節(jié)點(diǎn)348指向節(jié)點(diǎn)350,其對應(yīng)于在與符號“b”相對應(yīng)的節(jié)點(diǎn)348之下的第二層節(jié)點(diǎn)353中的符號“l(fā)”。節(jié)點(diǎn)350依次又指向葉節(jié)點(diǎn)352,而葉節(jié)點(diǎn)352指向關(guān)鍵字“bl”212的條目。
對于關(guān)鍵字“blueberries”214,對應(yīng)于“blueberries”214的符號“l(fā)”的節(jié)點(diǎn)350指向孩子節(jié)點(diǎn)354,其對應(yīng)于新的節(jié)點(diǎn)層356中的符號“u”。后面的孩子節(jié)點(diǎn)358、362、366、370、374、378、382和386對應(yīng)于該關(guān)鍵字在后面的各層360、364、368、372、376、380、384和388中的接下來的符號。節(jié)點(diǎn)386依次又指向葉節(jié)點(diǎn)390,而葉節(jié)點(diǎn)390指向了關(guān)鍵字“blueberries”214的條目。
圖4示出了根據(jù)本發(fā)明教導(dǎo)的MRT的第一實(shí)施例400,將它和圖3中對傳統(tǒng)MRT的描繪做比較。根據(jù)所圖示的實(shí)施例,本發(fā)明建立MRT 400的根節(jié)點(diǎn),該MRT 400被構(gòu)建用來存儲(chǔ)關(guān)鍵字,每個(gè)關(guān)鍵字都有一串符號。可以在計(jì)算機(jī)的寄存器、電存儲(chǔ)器和/或任何能夠以樹形數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)關(guān)鍵字的其它設(shè)備中建立MRT 400。MRT 400的樹形結(jié)構(gòu)是這樣發(fā)展起來的對于每一個(gè)關(guān)鍵字,都有一個(gè)指向該關(guān)鍵字的條目的葉節(jié)點(diǎn)。每個(gè)葉節(jié)點(diǎn)都依附于樹,距離根節(jié)點(diǎn)有“n”層,其中n可能小于所述葉節(jié)點(diǎn)所對應(yīng)的關(guān)鍵字中的符號數(shù)。只在一種情況下(關(guān)鍵字中的最后一個(gè)符號是可被用來找到用于存儲(chǔ)關(guān)鍵字條目的空節(jié)點(diǎn)的唯一符號)才會(huì)基于關(guān)鍵字中的所有符號來存儲(chǔ)關(guān)鍵字條目,即當(dāng)n等于關(guān)鍵字長度時(shí)。
根據(jù)本發(fā)明的一個(gè)方面,通過向“物理”節(jié)點(diǎn)層指派一個(gè)邏輯層號,從而可建立改進(jìn)型MRT,所述邏輯層號可能和物理層號相同或不同。根據(jù)傳統(tǒng)的MRT模型,物理層號代表一個(gè)節(jié)點(diǎn)層,并可代表被分配給一個(gè)節(jié)點(diǎn)層的一層實(shí)際的存儲(chǔ)器空間。相反,邏輯層號被指派給一個(gè)關(guān)鍵字或一個(gè)節(jié)點(diǎn)層的所選中特性。例如,在本發(fā)明的一個(gè)實(shí)施例中,邏輯層號代表關(guān)鍵字長度以及關(guān)鍵字在傳統(tǒng)的MRT中將被存儲(chǔ)的層。由于邏輯層號可被指派來代表關(guān)鍵字將被存儲(chǔ)的層,所以邏輯層號可被用來插入及取得關(guān)鍵字,而不象傳統(tǒng)的MRT技術(shù)那樣,沿著樹上代表關(guān)鍵字中每個(gè)符號的節(jié)點(diǎn)之間的路徑來插入并取得所述關(guān)鍵字。例如,由七個(gè)符號組成的關(guān)鍵字將使得存儲(chǔ)該關(guān)鍵字的物理節(jié)點(diǎn)層被指派給一個(gè)值為7的邏輯層值。如果物理層號小于所指派的邏輯層號,例如如果物理層2被指派了值為7的邏輯層值,則節(jié)省了資源,這是因?yàn)樵谶@個(gè)例子中,在傳統(tǒng)的MRT中存儲(chǔ)關(guān)鍵字所需的七層節(jié)點(diǎn)被兩個(gè)物理節(jié)點(diǎn)層取代。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,對于一個(gè)具有很多符號的長關(guān)鍵字,由于僅使用該關(guān)鍵字中的第一個(gè)符號和最后一個(gè)符號來描述這個(gè)長關(guān)鍵字,因此只需要兩個(gè)物理節(jié)點(diǎn)層來代表該關(guān)鍵字中的第一個(gè)符號和最后一個(gè)符號,第一物理節(jié)點(diǎn)層被指派給一個(gè)邏輯層號,該邏輯層號對應(yīng)于傳統(tǒng)的MRT中代表該關(guān)鍵字中第一個(gè)符號的節(jié)點(diǎn)所在的層,而指派給第二物理節(jié)點(diǎn)層的邏輯層號對應(yīng)于傳統(tǒng)的MRT中代表該關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)所在的層。使用上述技術(shù)的改進(jìn)型MRT在多個(gè)邏輯節(jié)點(diǎn)層之間具有鏈接(“指針”)。具體地說,在上述實(shí)施例中,有一個(gè)指針存儲(chǔ)在雙親節(jié)點(diǎn)(位于第一邏輯節(jié)點(diǎn)層中)中,這個(gè)雙親節(jié)點(diǎn)將搜索指引到(“指向”)代表所述關(guān)鍵字中最后一個(gè)符號的孩子節(jié)點(diǎn)(位于第二邏輯節(jié)點(diǎn)層中)。在傳統(tǒng)的MRT中,一次搜索需要遍歷關(guān)鍵字各個(gè)連續(xù)符號之間的指針,以到達(dá)該關(guān)鍵字中的最后一個(gè)符號(該關(guān)鍵字的條目被存儲(chǔ)在這里),本發(fā)明與傳統(tǒng)MRT不同,它可以在關(guān)鍵字的第一個(gè)符號和最后一個(gè)符號之間建立一條路徑,或者在比傳統(tǒng)MRT所使用的符號更少的關(guān)鍵字符號之間建立路徑。在傳統(tǒng)的MRT中可能需要很多節(jié)點(diǎn)層的長關(guān)鍵字在本發(fā)明的改進(jìn)型MRT中可能只需要兩個(gè)節(jié)點(diǎn)層或少一些的節(jié)點(diǎn)層。
根據(jù)本發(fā)明的另一個(gè)方面,在改進(jìn)型MRT中存儲(chǔ)某個(gè)關(guān)鍵字可能需要插入物理節(jié)點(diǎn)層和/或邏輯節(jié)點(diǎn)層,在對一個(gè)或多個(gè)前面的關(guān)鍵字進(jìn)行存儲(chǔ)的過程中并沒有插入這些節(jié)點(diǎn)層。這特別出現(xiàn)在以下情形中前面的關(guān)鍵字被存儲(chǔ)在對應(yīng)于該關(guān)鍵字中最后一個(gè)符號的邏輯層上,但是沒有指派與第一個(gè)符號和最后一個(gè)符號之間的中間符號相對應(yīng)的邏輯節(jié)點(diǎn)層。例如,當(dāng)前在邏輯上基于其最后一個(gè)符號而被存儲(chǔ)的關(guān)鍵字(因此以及它的關(guān)鍵字長度)可能需要一個(gè)在存儲(chǔ)具有不同長度的在先關(guān)鍵字時(shí)省去的邏輯節(jié)點(diǎn)層。換言之,對在先關(guān)鍵字的存儲(chǔ)已經(jīng)建立了一條指針的路徑,該路徑可能從前面關(guān)鍵字的第一個(gè)符號直接前進(jìn)到該在先關(guān)鍵字的最后一個(gè)符號。沿著這條為在先關(guān)鍵字而建立的截短路徑來尋找與當(dāng)前等待存儲(chǔ)的關(guān)鍵字的長度相對應(yīng)的先前存在的邏輯節(jié)點(diǎn)層時(shí),插入過程或設(shè)備可能發(fā)現(xiàn)在建立指針時(shí),所需要的邏輯層已被省略。例如,如果長度為4的關(guān)鍵字需要邏輯層4,則邏輯層1可能已被直接鏈接到正被搜索以尋找插入點(diǎn)的路徑中的邏輯層11。為新的關(guān)鍵字插入所需邏輯層的一種方法就是插入一個(gè)或多個(gè)將由新的關(guān)鍵字和先前存儲(chǔ)的關(guān)鍵字共同使用的新邏輯層,使得穿過新的“中間”邏輯層的指針可以導(dǎo)向上述兩個(gè)關(guān)鍵字。從以上兩個(gè)關(guān)鍵字中任意一個(gè)的起點(diǎn)出發(fā),前進(jìn)到該關(guān)鍵字的后續(xù)符號,對于在兩個(gè)關(guān)鍵字之間相互匹配的每一對符號都插入一個(gè)中間邏輯層。在兩個(gè)關(guān)鍵字中的后續(xù)符號不匹配之處,不插入任何附加的中間節(jié)點(diǎn)層??赡苄枰粋€(gè)附加的節(jié)點(diǎn)層來提供代表新關(guān)鍵字的最后一個(gè)符號的節(jié)點(diǎn)。在新的(多個(gè))中間節(jié)點(diǎn)層和先前存在的節(jié)點(diǎn)層之間可能要增加指針和/或?qū)χ羔樧龀稣{(diào)整,以指向代表先前存在的關(guān)鍵字和新關(guān)鍵字的最后一個(gè)符號的節(jié)點(diǎn)。
本發(fā)明所建立的MRT消除了多層空節(jié)點(diǎn)。因此,總的來說,本發(fā)明所建立的MRT具有較少的空節(jié)點(diǎn)層,或者不具有任何空節(jié)點(diǎn)層,以下情況可能除外,即一個(gè)關(guān)鍵字條目被刪除,而用來存儲(chǔ)這個(gè)關(guān)鍵字條目的節(jié)點(diǎn)未被刪除,由此產(chǎn)生了空節(jié)點(diǎn)層。
以關(guān)鍵字“appaloosa”為例,根節(jié)點(diǎn)401指向樹的第一層,該層被稱為第一節(jié)點(diǎn)層404。由于根節(jié)點(diǎn)401在任何邏輯搜索的起始層都存在,所以這個(gè)關(guān)鍵字的第一個(gè)符號(即“a”)在根節(jié)點(diǎn)401層用來搜索指向孩子節(jié)點(diǎn)402的指針。如果應(yīng)當(dāng)包括被搜索的孩子節(jié)點(diǎn)402的第一節(jié)點(diǎn)層404不存在,則建立該節(jié)點(diǎn)層。因而,如果代表符號“a”的孩子節(jié)點(diǎn)402不存在,則它被建立。此時(shí),如果孩子節(jié)點(diǎn)402已存在,但沒有指向自己的任何其它孩子節(jié)點(diǎn),則新條目“appaloosa”可以作為孩子節(jié)點(diǎn)而被插入。要想插入這個(gè)新的節(jié)點(diǎn),則要建立新的節(jié)點(diǎn)層408。對于每個(gè)新的層都指派一個(gè)“邏輯層”,其中,如果為所述關(guān)鍵字中的每個(gè)符號都建立了一層,則所述“邏輯層”實(shí)際上定義了所述條目在傳統(tǒng)的MRT中本應(yīng)被插入的層。這個(gè)“邏輯層”被設(shè)定為等于正被插入的關(guān)鍵字的長度,即,由于在這一層所插入的關(guān)鍵字自身具有9個(gè)符號,所以新的節(jié)點(diǎn)層408相當(dāng)于邏輯層“9”。因此,對應(yīng)于所述關(guān)鍵字的第九個(gè)符號(即“appaloosa”中結(jié)尾的“a”)建立新的節(jié)點(diǎn)409,。最后插入葉節(jié)點(diǎn)406,節(jié)點(diǎn)層408中的節(jié)點(diǎn)409指向該葉節(jié)點(diǎn)406。對節(jié)點(diǎn)層404中的節(jié)點(diǎn)402中的指針進(jìn)行調(diào)整,以指向節(jié)點(diǎn)層408中的節(jié)點(diǎn)409。
在圖4中圖示了上述MRT的實(shí)施例,通過本發(fā)明的解釋性代碼實(shí)施方案,還可以理解本發(fā)明的其它方面●建立一個(gè)用于存儲(chǔ)條目的根節(jié)點(diǎn),即,該根節(jié)點(diǎn)可用于存儲(chǔ)指向一個(gè)或多個(gè)孩子節(jié)點(diǎn)的指針,其中每一個(gè)孩子節(jié)點(diǎn)都代表了關(guān)鍵字中的一個(gè)符號。從所述根節(jié)點(diǎn)開始搜索關(guān)鍵字“k1”的插入點(diǎn)。
●將當(dāng)前節(jié)點(diǎn)的邏輯層變量設(shè)置為所述根節(jié)點(diǎn)。
●開始while循環(huán),即只要當(dāng)前節(jié)點(diǎn)的邏輯層號小于或等于關(guān)鍵字k1的長度,則○尋找與關(guān)鍵字k1的第n個(gè)符號相對應(yīng)的條目T1,其中n是所述節(jié)點(diǎn)的邏輯層。
○如果當(dāng)前邏輯層等于關(guān)鍵字k1的長度,則在這一邏輯層中的某個(gè)節(jié)點(diǎn)處添加關(guān)鍵字k1的條目,然后結(jié)束。
●否則,如果當(dāng)前邏輯層不等于關(guān)鍵字k1的長度,則跳到下一節(jié)點(diǎn)層○如果下一節(jié)點(diǎn)層不存在,則建立新的節(jié)點(diǎn)層,并向這個(gè)新層指派一個(gè)等于關(guān)鍵字k1的長度的邏輯層號,并且在這個(gè)邏輯層中的某個(gè)節(jié)點(diǎn)處插入關(guān)鍵字k1的條目,然后結(jié)束。
●否則,如果T1所指向的下一節(jié)點(diǎn)層存在,則○如果下一層的邏輯層號不是比當(dāng)前層的層號大1(這意味著有些中間節(jié)點(diǎn)層已被本發(fā)明遺漏了),則將這一層上的任一條目T2與關(guān)鍵字k1做比較,以確定預(yù)計(jì)在哪一邏輯層上,關(guān)鍵字k1中的符號開始與T2所指向的關(guān)鍵字中的符號不同(換言之,這兩個(gè)關(guān)鍵字共有哪個(gè)(些)起始符號?)○如果關(guān)鍵字k1的長度正好使得在當(dāng)前層和具有T2所指向的關(guān)鍵字的層之間,即在現(xiàn)有的層之間需要一個(gè)新的邏輯層,則建立新的中間層以插入關(guān)鍵字k1,邏輯層號對應(yīng)于關(guān)鍵字k1和T2所指向的關(guān)鍵字從每個(gè)關(guān)鍵字的起始處開始計(jì)數(shù)的所共有的起始符號的數(shù)量。
○在代表關(guān)鍵字k1和T1所指向的關(guān)鍵字所共有的最后一個(gè)公共符號的節(jié)點(diǎn)處,插入一個(gè)新指針,其指向T2所指向的關(guān)鍵字所在的層。
●將當(dāng)前節(jié)點(diǎn)增加到下一層。
●結(jié)束while循環(huán)。
當(dāng)前節(jié)點(diǎn)被增加到下一層之后,如果關(guān)鍵字k1的最后一個(gè)符號不是關(guān)鍵字k1和T2所指向的關(guān)鍵字之間的最后一個(gè)公共符號,則代碼將循環(huán)回去,以建立新的節(jié)點(diǎn)層,從而在代表關(guān)鍵字k1中最后一個(gè)符號的節(jié)點(diǎn)處存儲(chǔ)關(guān)鍵字k1。
以上的解釋性代碼實(shí)施方案建立了改進(jìn)型MRT,其使用最少數(shù)量的層來存儲(chǔ)關(guān)鍵字。當(dāng)向MRT中添加新的關(guān)鍵字時(shí),所述實(shí)施方案或者使用現(xiàn)有的節(jié)點(diǎn)層,或者建立最少數(shù)量的新節(jié)點(diǎn)層,以維護(hù)MRT的邏輯結(jié)構(gòu),其中所有的指針都被準(zhǔn)確地維護(hù)著。然而,上述代碼實(shí)施方案只是用于實(shí)施本發(fā)明的一種示例性代碼實(shí)施方案。在本發(fā)明的精神和范圍內(nèi)還可能存在很多其它的代碼變動(dòng)。
圖5示出了用于實(shí)現(xiàn)本發(fā)明的MRT的示例性方法500的流程圖。建立根節(jié)點(diǎn)和第一節(jié)點(diǎn)層502。沿著一個(gè)指針從根節(jié)點(diǎn)到達(dá)與關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn)504。搜索與關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以得到指向下一節(jié)點(diǎn)層的指針506。估計(jì)所述指針的存在性508。如果所述指針不存在,則建立下一節(jié)點(diǎn)層,所述關(guān)鍵字的條目被存儲(chǔ)在與該關(guān)鍵字的最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中,并向存儲(chǔ)所述關(guān)鍵字的節(jié)點(diǎn)層指派一個(gè)邏輯層號,其對應(yīng)于所述關(guān)鍵字中的最后一個(gè)符號和/或所述關(guān)鍵字的長度510。如果所述指針存在,則估計(jì)所指向的層的邏輯層號512。如果所述指針指向的節(jié)點(diǎn)層具有與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號,則在與所述關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)處為所述關(guān)鍵字存儲(chǔ)一個(gè)條目514。如果所述指針?biāo)赶虻墓?jié)點(diǎn)層不具有與所述關(guān)鍵字中最后一個(gè)符號和/或關(guān)鍵字長度相對應(yīng)的邏輯層號,則在現(xiàn)有的層之間插入新的節(jié)點(diǎn)層,在與所述關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目,并向這個(gè)層指派一個(gè)邏輯層號,其對應(yīng)于所述關(guān)鍵字的長度516。給出這個(gè)示例性的方法只是為了說明本發(fā)明。所述方法的各種變化可以包括使用不同于關(guān)鍵字長度的標(biāo)準(zhǔn)來存儲(chǔ)關(guān)鍵字。例如,另一種方法可能一直來這樣設(shè)置改進(jìn)型MRT,以在根節(jié)點(diǎn)和關(guān)鍵字的條目所依附的節(jié)點(diǎn)之間產(chǎn)生最短路徑。在另一種變化中,所述方法可能基于某個(gè)關(guān)鍵字中不同于MRT中已有關(guān)鍵字的最短符號序列來存儲(chǔ)關(guān)鍵字。
圖6示出了根據(jù)本發(fā)明的一個(gè)方面用于搜索改進(jìn)型MRT的示例性方法600。搜索根節(jié)點(diǎn)以找到指向?qū)?yīng)于關(guān)鍵字中第一個(gè)符號的節(jié)點(diǎn)的指針602。搜索對應(yīng)于關(guān)鍵字中第一個(gè)符號的節(jié)點(diǎn)以找到指向下一節(jié)點(diǎn)層的指針604。檢查下一節(jié)點(diǎn)層,以確認(rèn)指派給它的邏輯層號是否對應(yīng)于關(guān)鍵字的長度606。如果下一節(jié)點(diǎn)層的邏輯層號與關(guān)鍵字長度相匹配,則在這個(gè)節(jié)點(diǎn)層上搜索關(guān)鍵字的條目608。能否找到該關(guān)鍵字的條目取決于這個(gè)MRT中是否存在著條目。如果沒有為所述關(guān)鍵字存儲(chǔ)任何條目,則搜索返回空結(jié)果,然后結(jié)束609。如果搜索找到了所述關(guān)鍵字的條目,則搜索也會(huì)結(jié)束609。如果向下一節(jié)點(diǎn)層指派的邏輯層號與對應(yīng)于關(guān)鍵字長度的邏輯層號并不相同,則搜索當(dāng)前節(jié)點(diǎn),以找到指向后續(xù)的下一節(jié)點(diǎn)層的指針610。這個(gè)過程將不斷重復(fù),直到找到所述關(guān)鍵字條目、不再有指向后續(xù)節(jié)點(diǎn)層的其他指針、和/或?qū)?yīng)于所述關(guān)鍵字中所有符號的節(jié)點(diǎn)層都已被搜索612。
圖7示出了本發(fā)明的MRT的第二實(shí)施例700。為了存儲(chǔ)關(guān)鍵字“bl”,對根節(jié)點(diǎn)701進(jìn)行搜索以找到指向節(jié)點(diǎn)層702的指針,具體地說是要找到對應(yīng)于符號“b”的節(jié)點(diǎn)。如果不存在對應(yīng)于“b”的節(jié)點(diǎn),則建立與“b”相對應(yīng)的新節(jié)點(diǎn)704。(如果節(jié)點(diǎn)704已存在,則搜索這個(gè)節(jié)點(diǎn)以找到指向下一節(jié)點(diǎn)層的指針。)由于所述指針不存在,所以建立新的節(jié)點(diǎn)層706(等于2的邏輯層)。在節(jié)點(diǎn)層706重復(fù)同樣的過程,以找到所述關(guān)鍵字的第二個(gè)符號,即“l(fā)”。建立與“l(fā)”相對應(yīng)的節(jié)點(diǎn)708,并且葉節(jié)點(diǎn)710依附于節(jié)點(diǎn)708,以指向關(guān)鍵字“bl”的條目。
對于關(guān)鍵字“blueberries”而言,搜索對應(yīng)于符號“b”的節(jié)點(diǎn)704,以找到指向下一層的指針。節(jié)點(diǎn)704已經(jīng)有了一個(gè)指向下一節(jié)點(diǎn)層706的指針,接下來對所述節(jié)點(diǎn)層706進(jìn)行搜索以找到所述關(guān)鍵字的第二個(gè)符號“l(fā)”。節(jié)點(diǎn)708對應(yīng)于“l(fā)”。然后搜索節(jié)點(diǎn)708以找到指向下一節(jié)點(diǎn)層中任一孩子節(jié)點(diǎn)的指針。如果不存在指向下一節(jié)點(diǎn)層的指針,則建立下一節(jié)點(diǎn)層712,并且建立一個(gè)指針。由于“blueberries”的關(guān)鍵字長度是11個(gè)符號,所以向新的節(jié)點(diǎn)層712指派等于11的邏輯層。在這個(gè)新的節(jié)點(diǎn)層712,建立與所述關(guān)鍵字的第11個(gè)符號,即“blueberries”中最后一個(gè)符號“s”相對應(yīng)的新節(jié)點(diǎn)714。最后,葉節(jié)點(diǎn)716依附到節(jié)點(diǎn)714上,以指向關(guān)鍵字“blueberries”的條目。對與“l(fā)”相對應(yīng)的節(jié)點(diǎn)708中的指針進(jìn)行調(diào)整,以指向?qū)?yīng)于“s”的節(jié)點(diǎn)714。
如上所述,關(guān)鍵字“bl”710和關(guān)鍵字“blueberries”716的條目依附于改進(jìn)型MRT中相鄰的物理層706、712。然而,這些相鄰的物理層在邏輯上并不是相鄰的。層706被指派給邏輯層2,而層712被指派給邏輯層11。一個(gè)新的關(guān)鍵字為了存儲(chǔ)在MRT中只需要對應(yīng)于其關(guān)鍵字長度的那個(gè)邏輯層,當(dāng)這個(gè)新的關(guān)鍵字與先前所存儲(chǔ)的、在關(guān)鍵字中具有相似起始符號的關(guān)鍵字在長度上相差超過一個(gè)符號時(shí),例如“bl”和“blueberries”,才會(huì)發(fā)生跳越邏輯層的特性。將被添加到改進(jìn)型MRT中的新關(guān)鍵字可能需要在MRT中兩個(gè)相鄰的現(xiàn)有層之間還不存在的被越過的邏輯層。新的邏輯層必須被插入到所述兩個(gè)相鄰的現(xiàn)有層之間,并且必須對這兩個(gè)相鄰的現(xiàn)有層之間的已有指針進(jìn)行調(diào)整,以在將新的邏輯層包括進(jìn)來的同時(shí)保持指針指向的完整性。
根據(jù)本發(fā)明的層插入方面,圖7示出了在節(jié)點(diǎn)層702和節(jié)點(diǎn)層720之間如何插入新的邏輯節(jié)點(diǎn)層718。關(guān)鍵字“archie”先前已被插入到MRT700中,這是通過以下過程實(shí)現(xiàn)的首先在節(jié)點(diǎn)層702上建立對應(yīng)于符號“a”的節(jié)點(diǎn)704,所述節(jié)點(diǎn)層702相當(dāng)于邏輯層1,然后建立下一節(jié)點(diǎn)層720,并將節(jié)點(diǎn)層720指派為邏輯層6。在節(jié)點(diǎn)層720中建立節(jié)點(diǎn)722以對應(yīng)于“archie”中最后一個(gè)符號“e”,并且用于“archie”的條目724依附到節(jié)點(diǎn)722上。在節(jié)點(diǎn)層702和節(jié)點(diǎn)層720之間的指針從對應(yīng)于符號“a”的節(jié)點(diǎn)702前進(jìn)到對應(yīng)于符號“e”的節(jié)點(diǎn)722。為了在MRT 700中插入新的關(guān)鍵字“arc”,必須在節(jié)點(diǎn)層702和節(jié)點(diǎn)層720之間插入新的邏輯節(jié)點(diǎn)層718。
從根節(jié)點(diǎn)701出發(fā),到達(dá)了節(jié)點(diǎn)702,其對應(yīng)于所要存儲(chǔ)的新關(guān)鍵字中的第一個(gè)符號“a”,對節(jié)點(diǎn)702進(jìn)行搜索以尋找指針,然后找到了指向下一節(jié)點(diǎn)層720的指針726(此時(shí),節(jié)點(diǎn)層718還不存在)。確定指針726所指向的節(jié)點(diǎn)層720相當(dāng)于邏輯層6。關(guān)鍵字“arc”將需要其邏輯層為3的節(jié)點(diǎn)層。對節(jié)點(diǎn)層720進(jìn)行搜索以尋找關(guān)鍵字條目,結(jié)果找到了關(guān)鍵字“archie”的條目724。對于將要插入的關(guān)鍵字“arc”和被指到的關(guān)鍵字“archie”,從起始符號開始對它們進(jìn)行比較,一直順序地前進(jìn)到符號開始出現(xiàn)差異為止。將插入新的中間邏輯層718,其邏輯層對應(yīng)于上述兩個(gè)關(guān)鍵字所共有的符號序列中的最后一個(gè)符號。關(guān)鍵字“arc”和關(guān)鍵字“archie”的前三個(gè)符號是相同的,因此將插入新的邏輯層718,并向其指派一個(gè)等于3的邏輯層,其對應(yīng)于每個(gè)關(guān)鍵字中的符號“c”。符號“c”恰好是關(guān)鍵字“arc”的最后一個(gè)符號,因此“arc”的條目728將依附在與符號“c”相對應(yīng)的節(jié)點(diǎn)730上。
如果所存儲(chǔ)的關(guān)鍵字是“arcus”而不是“arc”,則在節(jié)點(diǎn)層718之外,還要增加相當(dāng)于邏輯層為5的附加節(jié)點(diǎn)層,從代表“arcus”和“arc”之間所共有的最后一個(gè)符號“c”的節(jié)點(diǎn)730指向該附加節(jié)點(diǎn)層。代表符號“c”的節(jié)點(diǎn)730本應(yīng)是一個(gè)分支點(diǎn),用于遍歷樹直到“arcus”和“archie”。但是由于關(guān)鍵字“arc”是以一個(gè)到“archie”的路徑當(dāng)中的符號結(jié)尾的,所以不需要附加的節(jié)點(diǎn)層來存儲(chǔ)“arc” (即,以關(guān)鍵字“arc”開始的符號是關(guān)鍵字“archie”中符號的子集)。
接著,對前面的指針726進(jìn)行調(diào)整,以適應(yīng)新的節(jié)點(diǎn)層718。插入新的中間節(jié)點(diǎn)層718的過程已經(jīng)在節(jié)點(diǎn)702和節(jié)點(diǎn)730之間建立了指針732。在節(jié)點(diǎn)層718中的節(jié)點(diǎn)730和節(jié)點(diǎn)層720中的節(jié)點(diǎn)722之間建立一個(gè)新的指針734。對關(guān)鍵字“archie”的搜索前面已在邏輯層1和6中進(jìn)行了。在增加了新的邏輯節(jié)點(diǎn)層718之后,現(xiàn)在對關(guān)鍵字“archie”的搜索將穿過節(jié)點(diǎn)層1、3和6。因此,被具有相似符號的關(guān)鍵字填滿的改進(jìn)型MRT可能具有與傳統(tǒng)MRT相接近的結(jié)構(gòu)式樣。然而,本發(fā)明中稀疏填充的樹與稀疏填充的傳統(tǒng)MRT相比,相應(yīng)地更有效率。
圖8示出了實(shí)現(xiàn)本發(fā)明的裝置800。接收器802接收關(guān)鍵字,每個(gè)關(guān)鍵字都具有一串符號。耦合于接收器802的寄存器804在表示一張表的樹形數(shù)據(jù)結(jié)構(gòu)中將關(guān)鍵字的各個(gè)符號存儲(chǔ)為多個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)發(fā)生器806按照對關(guān)鍵字的條目進(jìn)行存儲(chǔ)的需要,基于關(guān)鍵字中的一個(gè)符號將一個(gè)節(jié)點(diǎn)807添加到樹中。用作為存儲(chǔ)標(biāo)準(zhǔn)的符號可以是關(guān)鍵字中代表關(guān)鍵字長度的最后一個(gè)符號,或者在某種不同的方案中,可以是以下這種符號當(dāng)被添加到關(guān)鍵字的在前符號序列(如果有的話)中時(shí),該符號形成了在樹上還未存儲(chǔ)另一關(guān)鍵字條目的某個(gè)節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目所需的最短符號序列。插入器808在節(jié)點(diǎn)發(fā)生器806所建立的節(jié)點(diǎn)807中或者在節(jié)點(diǎn)807所指向的存儲(chǔ)器空間中為每一個(gè)接收到的關(guān)鍵字存儲(chǔ)一個(gè)條目。
所述裝置還可以包括關(guān)鍵字尋找器810,用于遍歷樹來尋找某個(gè)關(guān)鍵字。在一個(gè)實(shí)施例中,關(guān)鍵字尋找器810沿著指針814到達(dá)節(jié)點(diǎn)816,該節(jié)點(diǎn)816所對應(yīng)的第一個(gè)符號與正被搜索的關(guān)鍵字中的第一個(gè)符號相同,從而對所存儲(chǔ)的關(guān)鍵字812進(jìn)行搜索。關(guān)鍵字尋找器810估計(jì)節(jié)點(diǎn)816的邏輯層號,如果節(jié)點(diǎn)816的邏輯層不是正被搜索的關(guān)鍵字的邏輯層,則搜索節(jié)點(diǎn)816以找到與正被搜索的所存儲(chǔ)關(guān)鍵字812中的下一符號相對應(yīng)的指針。如果指針818存在,則關(guān)鍵字尋找器810沿著指針818到達(dá)下一邏輯層上的后續(xù)節(jié)點(diǎn)812,并對包含這一節(jié)點(diǎn)812的層估計(jì)邏輯層號。如果該邏輯層號與所搜索的關(guān)鍵字812的預(yù)計(jì)邏輯層號相匹配,則在這一層上對與關(guān)鍵字812相關(guān)聯(lián)的條目進(jìn)行搜索。正被搜索的所存儲(chǔ)關(guān)鍵字812被找到。關(guān)鍵字尋找器810重復(fù)以上過程,即搜索下一節(jié)點(diǎn)層,估計(jì)邏輯層號,直到所述關(guān)鍵字的條目被找到、不再有指向下一節(jié)點(diǎn)層的指針、或者對應(yīng)于所述關(guān)鍵字中所有符號的節(jié)點(diǎn)層都已被搜索。
在一些裝置變動(dòng)方案中,節(jié)點(diǎn)可以是存儲(chǔ)器空間,并且關(guān)鍵字可以是該存儲(chǔ)器空間中的條目。本發(fā)明的裝置800可按模塊化的方式來理解,這些模塊中的一些可用來處理存儲(chǔ)器中關(guān)鍵字的接收和插入,例如接收器802和插入器808,而其它一些模塊可用于動(dòng)態(tài)地分配存儲(chǔ)器,例如寄存器804和節(jié)點(diǎn)發(fā)生器806。雖然以“模塊”的方式描述了本發(fā)明的裝置實(shí)施例800以便于說明,但是一種或多種電路、組件、寄存器、處理器、軟件子例程、對象或它們的組合可用來替換這些模塊中的一個(gè)、幾個(gè)或全部。
圖9根據(jù)本發(fā)明的一種可替換實(shí)施例示出了一件產(chǎn)品900,其包括提供指令902的機(jī)器可讀介質(zhì),所述指令使得機(jī)器實(shí)現(xiàn)本發(fā)明的MRT和/或一種或多種相關(guān)方法。
上面用最基本的形式描述了一些方法和裝置,但是在不偏離本發(fā)明基本范圍的前提下可以做出多種修改。本領(lǐng)域的普通技術(shù)人員將會(huì)清楚,可以做出很多進(jìn)一步的修改和調(diào)整。所給出的具體實(shí)施例不是為了限制本發(fā)明,而是為了解釋本發(fā)明。本發(fā)明的范圍不由所給出的特定例子來決定,而是由所附的權(quán)利要求來決定。
權(quán)利要求
1.一種方法,包括向包括一串符號的關(guān)鍵字中的符號指派邏輯層號;以及至少部分地基于所述邏輯層號,而不是基于代表所述關(guān)鍵字中每個(gè)符號的節(jié)點(diǎn)之間的路徑,在多路基數(shù)樹的一個(gè)節(jié)點(diǎn)層中存儲(chǔ)所述關(guān)鍵字的條目。
2.如權(quán)利要求1所述的方法,其中,所述數(shù)據(jù)結(jié)構(gòu)由多個(gè)節(jié)點(diǎn)層組成,這些節(jié)點(diǎn)層是根據(jù)指派給它們的邏輯層號的大小升序來排列的。
3.如權(quán)利要求2所述的方法,其中,所述關(guān)鍵字中最少數(shù)量的符號被用來將該關(guān)鍵字與存儲(chǔ)在所述樹中的其它關(guān)鍵字區(qū)分開來,并且所述數(shù)據(jù)結(jié)構(gòu)只具有用于所述關(guān)鍵字中某些符號的節(jié)點(diǎn)層,所述某些符號是用來將所述關(guān)鍵字與存儲(chǔ)在所述樹中的其它關(guān)鍵字區(qū)分開來的符號。
4.如權(quán)利要求2所述的方法,其中,對所述關(guān)鍵字的搜索使用與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號來尋找存儲(chǔ)所述關(guān)鍵字的節(jié)點(diǎn)層。
5.一種方法,包括為了在存儲(chǔ)器中存儲(chǔ)關(guān)鍵字,建立樹的根節(jié)點(diǎn)和第一層節(jié)點(diǎn),其中每個(gè)關(guān)鍵字具有一串符號;建立一個(gè)指針,該指針從所述根節(jié)點(diǎn)指向所述第一層節(jié)點(diǎn)中與某個(gè)關(guān)鍵字的第一個(gè)符號相對應(yīng)的節(jié)點(diǎn);建立第二節(jié)點(diǎn)層,以在對應(yīng)于所述關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目;以及建立一個(gè)指針,該指針從所述第一層節(jié)點(diǎn)中對應(yīng)于所述關(guān)鍵字中第一個(gè)符號的節(jié)點(diǎn)指向所述第二節(jié)點(diǎn)層中對應(yīng)于所述關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)。
6.如權(quán)利要求5所述的方法,還包括向用于所述第一節(jié)點(diǎn)層的邏輯層號指派與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的、等于1的第一邏輯層值;并且向?qū)?yīng)于所述關(guān)鍵字中的最后一個(gè)符號的所述第二節(jié)點(diǎn)層的邏輯層號指派等于n的第二邏輯層值,其中n等于所述關(guān)鍵字中符號的數(shù)量。
7.如權(quán)利要求6所述的方法,其中,用于在與新關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中存儲(chǔ)所述新關(guān)鍵字的條目的新節(jié)點(diǎn)層被添加到和/或插入到所述樹中現(xiàn)有的節(jié)點(diǎn)層之間,在此過程中,根據(jù)邏輯層號的升序來依次排列所述樹中的所有節(jié)點(diǎn)層。
8.如權(quán)利要求7所述的方法,還包括當(dāng)邏輯層號處在雙親節(jié)點(diǎn)層和孩子節(jié)點(diǎn)層的邏輯層號之間的節(jié)點(diǎn)層被插入到所述雙親節(jié)點(diǎn)層和孩子節(jié)點(diǎn)層之間時(shí),重新設(shè)置存在于所述雙親節(jié)點(diǎn)層和孩子節(jié)點(diǎn)層之間的指針。
9.如權(quán)利要求8所述的方法,其中,所述的重新設(shè)置包括當(dāng)代表關(guān)鍵字中第一個(gè)符號和該關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)之間的邏輯層的數(shù)量改變時(shí),維護(hù)代表所述關(guān)鍵字中各符號的節(jié)點(diǎn)之間的邏輯路徑。
10.一種方法,包括a)在被構(gòu)建為多節(jié)點(diǎn)的樹、由已存儲(chǔ)的關(guān)鍵字條目組成的表中,確定與包括一串n個(gè)符號的關(guān)鍵字的長度相對應(yīng)的邏輯層號;b)搜索所述樹中的根節(jié)點(diǎn),以找到指向與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn)的指針;c)搜索與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以找到指向下一節(jié)點(diǎn)層的指針;d)確認(rèn)所述下一節(jié)點(diǎn)層是否被指派了與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號;e)如果向所述下一節(jié)點(diǎn)層指派了所述邏輯層號,則在所述下一節(jié)點(diǎn)層中搜索所述關(guān)鍵字的條目;f)如果未向所述下一節(jié)點(diǎn)層指派與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號,則在所述下一節(jié)點(diǎn)層中搜索指向后續(xù)的下一節(jié)點(diǎn)層的指針;以及g)重復(fù)d-f步驟,直到發(fā)現(xiàn)了關(guān)鍵字條目之一、不再有指向后續(xù)節(jié)點(diǎn)層的指針、以及與所述關(guān)鍵字中的所有符號相對應(yīng)的節(jié)點(diǎn)層都已被搜索。
11.如權(quán)利要求10所述的方法,還包括如果所述關(guān)鍵字未被找到,則插入新的節(jié)點(diǎn)層以存儲(chǔ)所述關(guān)鍵字,包括沿著第一指針從所述根節(jié)點(diǎn)到達(dá)與所述關(guān)鍵字中的第一個(gè)符號相對應(yīng)的節(jié)點(diǎn);搜索與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以找到指向下一節(jié)點(diǎn)層的第二指針;如果所述第二指針不存在,則建立下一節(jié)點(diǎn)層,在與所述關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目,并向存儲(chǔ)有所述關(guān)鍵字的節(jié)點(diǎn)層指派與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號;如果所述第二指針存在并指向了具有與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號的節(jié)點(diǎn)層,則在對應(yīng)于所述關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目;以及如果所述第二指針存在并指向了不具有與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號的節(jié)點(diǎn)層,則插入新的節(jié)點(diǎn)層以存儲(chǔ)所述關(guān)鍵字的條目,并根據(jù)所述樹中從根節(jié)點(diǎn)開始的所有節(jié)點(diǎn)層的邏輯層號的大小升序來插入該新層。
12.一種裝置,包括寄存器,用于在代表一張表的樹形數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)具有一串符號的關(guān)鍵字的條目;和節(jié)點(diǎn)發(fā)生器,用于向所述樹中添加節(jié)點(diǎn),以基于所述關(guān)鍵字的最后一個(gè)符號來存儲(chǔ)所述關(guān)鍵字條目,其中所述節(jié)點(diǎn)被分配了與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號;并且其中,尋找所述關(guān)鍵字時(shí)所使用的是存儲(chǔ)所述關(guān)鍵字的節(jié)點(diǎn)的邏輯層號,而不是與所述關(guān)鍵字中每個(gè)符號相對應(yīng)的節(jié)點(diǎn)之間的路徑。
13.如權(quán)利要求12所述的裝置,還包括接收器,用于接收關(guān)鍵字;和插入器,用于為每個(gè)將被存儲(chǔ)到由所述節(jié)點(diǎn)發(fā)生器建立的節(jié)點(diǎn)中的關(guān)鍵字插入條目。
14.如權(quán)利要求12所述的裝置,還包括尋找器,用于沿著一個(gè)指針到達(dá)與正被搜索的關(guān)鍵字的第一個(gè)符號相對應(yīng)的節(jié)點(diǎn);搜索與所述關(guān)鍵字的第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以找到指向具有正被搜索的關(guān)鍵字的邏輯層號的節(jié)點(diǎn)層的指針;以及在具有正被搜索的關(guān)鍵字的邏輯層號的節(jié)點(diǎn)層上搜索所述關(guān)鍵字的條目。
15.一件產(chǎn)品,包括包括指令的機(jī)器可讀介質(zhì),所述指令在被執(zhí)行時(shí)使得機(jī)器生成用于在存儲(chǔ)器中存儲(chǔ)關(guān)鍵字的樹,所述樹具有根節(jié)點(diǎn),每個(gè)關(guān)鍵字具有一串符號;接收一個(gè)具有條目的關(guān)鍵字,所述條目將被存儲(chǔ)在所述樹的某個(gè)節(jié)點(diǎn)中;以及在被指派了與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號的節(jié)點(diǎn)層中,在與所述關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目。
16.如權(quán)利要求15所述的產(chǎn)品,還包括以下指令,這些指令在被執(zhí)行時(shí)使得機(jī)器a)通過確定與具有一串n個(gè)符號的關(guān)鍵字的長度相對應(yīng)的邏輯層號,在被構(gòu)建為多節(jié)點(diǎn)的樹、由已存儲(chǔ)的關(guān)鍵字條目組成的表中搜索所述關(guān)鍵字的條目;b)搜索所述樹中的根節(jié)點(diǎn),以找到指向與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn)的指針;c)搜索與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以找到指向下一節(jié)點(diǎn)層的指針;d)確定所述下一節(jié)點(diǎn)層是否被指派了與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號;e)如果向所述下一節(jié)點(diǎn)層指派了所述邏輯層號,則在所述下一節(jié)點(diǎn)層中搜索所述關(guān)鍵字的條目;f)如果未向所述下一節(jié)點(diǎn)層指派與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號,則搜索指向后續(xù)的下一節(jié)點(diǎn)層的指針;以及g)重復(fù)d-f步驟,直到發(fā)現(xiàn)了關(guān)鍵字條目之一、不再有指向后續(xù)節(jié)點(diǎn)層的指針、以及與所述關(guān)鍵字中的所有符號相對應(yīng)的節(jié)點(diǎn)層都已被搜索。
17.如權(quán)利要求15所述的產(chǎn)品,還包括以下指令,這些指令在被執(zhí)行時(shí)使得機(jī)器沿著第一指針從所述根節(jié)點(diǎn)到達(dá)與所述關(guān)鍵字中的第一個(gè)符號相對應(yīng)的節(jié)點(diǎn);搜索與所述關(guān)鍵字中第一個(gè)符號相對應(yīng)的節(jié)點(diǎn),以找到指向下一節(jié)點(diǎn)層的第二指針;如果所述第二指針不存在,則建立下一節(jié)點(diǎn)層,在與所述關(guān)鍵字中最后一個(gè)符號相對應(yīng)的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目,并向存儲(chǔ)有所述關(guān)鍵字的節(jié)點(diǎn)層指派與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號;如果所述第二指針存在并指向了具有與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號的節(jié)點(diǎn)層,則在對應(yīng)于所述關(guān)鍵字中最后一個(gè)符號的節(jié)點(diǎn)中存儲(chǔ)所述關(guān)鍵字的條目;以及如果所述第二指針存在并指向了不具有與所述關(guān)鍵字的長度相對應(yīng)的邏輯層號的節(jié)點(diǎn)層,則插入新的節(jié)點(diǎn)層以存儲(chǔ)所述關(guān)鍵字的條目,并根據(jù)所述樹中從根節(jié)點(diǎn)開始的所有節(jié)點(diǎn)層的邏輯層號的大小升序來插入新層。
全文摘要
本發(fā)明提供了一種方法和裝置,用于向包括一串符號的關(guān)鍵字中的符號指派邏輯層號,并且至少部分基于所述邏輯層號,而不是基于代表所述關(guān)鍵字中每個(gè)符號的節(jié)點(diǎn)之間的路徑,在多路基數(shù)樹的一個(gè)節(jié)點(diǎn)層中存儲(chǔ)所述關(guān)鍵字的條目。
文檔編號G06F17/30GK1613073SQ03802024
公開日2005年5月4日 申請日期2003年1月3日 優(yōu)先權(quán)日2002年1月8日
發(fā)明者阿爾沙納·尼赫魯, 馬諾耶·保羅 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1