專利名稱:一種有序鏈表節(jié)點(diǎn)的快速搜索方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及有序鏈表節(jié)點(diǎn)的搜索技術(shù),尤其是指一種有序鏈表節(jié)點(diǎn)的快速 搜索方法及裝置。
背景技術(shù):
在計(jì)算機(jī)軟件設(shè)計(jì)中,有序鏈表是一種經(jīng)常使用的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),這種數(shù) 據(jù)結(jié)構(gòu)相對(duì)于查詢效率更高的二叉樹、三叉樹等具有編程簡單、調(diào)試方便等特 點(diǎn),受到廣大開發(fā)人員的喜歡,有序鏈表的查詢、插入、刪除都涉及到大量的 關(guān)鍵值(即排序關(guān)鍵域的值)在有序鏈表中進(jìn)行搜索的操作。
圖1為現(xiàn)有技術(shù)中有序鏈表節(jié)點(diǎn)的搜索方法示意圖,如圖所示從一個(gè)節(jié) 點(diǎn)(一般為有序鏈表的頭節(jié)點(diǎn))開始,將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與有序鏈表中各節(jié) 點(diǎn)的關(guān)鍵值逐一地進(jìn)行比較,最終在有序鏈表中搜索到合適的節(jié)點(diǎn),即目標(biāo)節(jié) 點(diǎn),完成在有序鏈表中的搜索過程。
這種搜索方法由于需要將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各節(jié)點(diǎn)的關(guān)鍵值逐一進(jìn)行比 較,因此處理速度非常慢,影響了CPU的性能,尤其是在嵌入式系統(tǒng)中,CPU 性能一般較差,內(nèi)存也相當(dāng)匱乏,尋找一種快速、高效,且占用額外內(nèi)存小的 目標(biāo)節(jié)點(diǎn)搜索方法顯得尤為重要。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種有序鏈表節(jié)點(diǎn)的快速搜索方法 及裝置,利用本方法及裝置,可以快速、高效地在有序鏈表中搜索到目標(biāo)節(jié)點(diǎn)。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的 一種有序鏈表節(jié)點(diǎn)的快速搜索方法,該方法主要包括以下步驟 A、按照設(shè)定規(guī)則在有序鏈表中選取節(jié)點(diǎn),把所述節(jié)點(diǎn)作為索引節(jié)點(diǎn),建
立索引表;B、 在索引表中搜索到目標(biāo)索引節(jié)點(diǎn);C、 通過目標(biāo)索引節(jié)點(diǎn)在有序鏈表中搜索目標(biāo)節(jié)點(diǎn)。其中,所述索引節(jié)點(diǎn)的數(shù)目與有序鏈表中所有節(jié)點(diǎn)的數(shù)目比值為1: 100。 所述索引表中至少包括所述索引節(jié)點(diǎn)指向所述有序鏈表的節(jié)點(diǎn)的指針、所 述索引節(jié)點(diǎn)的關(guān)鍵值。所述索引表中索引節(jié)點(diǎn)的排列順序與有序鏈表中節(jié)點(diǎn)的排列順序一致。 所述索引表是數(shù)組或鏈表。進(jìn)一步地,所述步驟B為將目標(biāo)節(jié)點(diǎn)的關(guān)鍵:值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn) 行逐一比較搜索到目標(biāo)索引節(jié)點(diǎn)。較佳地,所述步驟C為通過目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定 索引節(jié)點(diǎn)在有序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與所述 位置附近的各節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。在有序鏈表中節(jié)點(diǎn)插入、刪除時(shí),更新索引表使其與有序鏈表保持同步。一種有序鏈表節(jié)點(diǎn)的快速搜索裝置,該裝置包括建立索引單元和搜索單元, 其中,建立索引單元,用來從有序鏈表中選取節(jié)點(diǎn),并把所述節(jié)點(diǎn)順序作為索引 節(jié)點(diǎn),建立索引表;搜索單元,用來依次在索引表和有序鏈表中進(jìn)行搜索,最終搜索到目標(biāo)節(jié)點(diǎn)。進(jìn)一步地,所述搜索單元包括索引節(jié)點(diǎn)搜索模塊和節(jié)點(diǎn)搜索模塊,其中, 索引節(jié)點(diǎn)搜索模塊,用來在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)索引節(jié)點(diǎn),并把目標(biāo)索引節(jié)點(diǎn)發(fā)送到節(jié)點(diǎn)搜索模塊;節(jié)點(diǎn)搜索模塊,用來根據(jù)所述目標(biāo)索引節(jié)點(diǎn)指向有序#節(jié)點(diǎn)的指針確定 索引節(jié)點(diǎn)在有序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與該位 置附近的各節(jié)點(diǎn)的關(guān)4定值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。 利用本發(fā)明,有以下的特點(diǎn)和優(yōu)點(diǎn)1 、搜索的時(shí)候首先在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)4t值與各索引節(jié)點(diǎn)的關(guān)鍵值 進(jìn)行逐一比較搜索到離可以搜索到目標(biāo)節(jié)點(diǎn)最近的索引節(jié)點(diǎn),即目標(biāo)索引節(jié)點(diǎn), 再通過目標(biāo)索引節(jié)點(diǎn)指向的有序鏈表節(jié)點(diǎn)的指針在有序鏈表中確定索引節(jié)點(diǎn)在 有序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與該位置附近的各 節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn),整個(gè)搜索過程快速、高效。2、當(dāng)索引表中索引節(jié)點(diǎn)的數(shù)目與有序鏈表中的節(jié)點(diǎn)數(shù)目的比值很小時(shí),增 加索引表所占用的內(nèi)存將很小,這樣就可以在占用額外內(nèi)存很小的情況下獲得 很高的搜索速度,很適合CPU性能較差、內(nèi)存也相當(dāng)匱乏的嵌入式系統(tǒng)。
圖1為現(xiàn)有技術(shù)中有序鏈表節(jié)點(diǎn)的搜索方法示意圖; 圖2為本發(fā)明中有序鏈表節(jié)點(diǎn)的快速搜索方法示意圖; 圖3為本發(fā)明中有序鏈表節(jié)點(diǎn)的搜索方法流程示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明圖2為本發(fā)明中有序鏈表節(jié)點(diǎn)的快速搜索方法示意圖,圖3為本發(fā)明中有 序鏈表節(jié)點(diǎn)的搜索方法流程示意圖,如圖2、圖3所示, 本發(fā)明的實(shí)現(xiàn)主要分為兩大部分 第一部分建立索引表。 步驟301、建立索引表。按照設(shè)定規(guī)則在有序鏈表中選取少量節(jié)點(diǎn),把選取的這些節(jié)點(diǎn)作為索引節(jié) 點(diǎn),建立索引表(可以是數(shù)組、鏈表等),則該索引節(jié)點(diǎn)應(yīng)該至少包含指向有序 鏈表節(jié)點(diǎn)的指針和該索引節(jié)點(diǎn)的關(guān)鍵值。索引節(jié)點(diǎn)的關(guān)4A值指有序鏈表中節(jié)點(diǎn) 從大到小或者從小到大排序的排序關(guān)鍵域的值,比如一個(gè)按年齡排序的鏈表, 每個(gè)人的年齡就是該有序鏈表節(jié)點(diǎn)的關(guān)鍵值。索引表和有序鏈表是相互獨(dú)立的。
這里,設(shè)定規(guī)則是指,既可以從頭節(jié)點(diǎn)開始在有序鏈表中等間隔地選取索 引節(jié)點(diǎn),也可以從頭節(jié)點(diǎn)開始在有序鏈表中不等間隔地選取索引節(jié)點(diǎn)。 其中,索引表必須是有序的,即與有序鏈表的升降順序保持一致。 且為了提高查詢效率,從有序鏈表中選取的索引節(jié)點(diǎn)應(yīng)該盡量平均分布在 有序鏈表中,并且選取的索引節(jié)點(diǎn)的數(shù)目(N)應(yīng)該遠(yuǎn)遠(yuǎn)小于有序鏈表的節(jié)點(diǎn)數(shù)目(M)。這樣既提高了查詢效率,又減少了索引節(jié)點(diǎn)占用的內(nèi)存,在內(nèi)存緊 張的嵌入系統(tǒng)中尤為重要,N: M的比值建議大于l: 100,索引表中索引節(jié)點(diǎn) 的數(shù)目與有序鏈表中的節(jié)點(diǎn)數(shù)目的比值越小,索引表所占用的額外內(nèi)存越小, 且搜索效率越高,這樣就可以在占用額外內(nèi)存很小的情況下獲得很高的搜索速 度,很適合CPU性能較差、內(nèi)存也相當(dāng)匱乏的嵌入式系統(tǒng)。另外,從有序鏈表中選擇索引節(jié)點(diǎn)的規(guī)則可以根據(jù)情況具體分析。例如, 有序鏈表中節(jié)點(diǎn)的關(guān)鍵值取值范圍分為間隔不等的幾組時(shí),可以在這幾個(gè)組中 選取各組中一個(gè)關(guān)鍵值最小的節(jié)點(diǎn)建立索引表;當(dāng)有序鏈表中節(jié)點(diǎn)的關(guān)鍵值取 值范圍分為間隔相等的幾組時(shí),也可以在這幾個(gè)組中選取各組中一個(gè)關(guān)鍵值最小的節(jié)點(diǎn)建立索引表。第二部分快速搜索。步驟302、在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐 一比較搜索到目標(biāo)索引節(jié)點(diǎn)。在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)4建值進(jìn)行逐一 比較,搜 索到離可以搜索到目標(biāo)節(jié)點(diǎn)最近的索引節(jié)點(diǎn),即目標(biāo)索引節(jié)點(diǎn)。步驟303、通過目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定索引節(jié)點(diǎn)在有 序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)4建值與該位置附近的各節(jié) 點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。整個(gè)搜索過程較現(xiàn)有技術(shù),不需要將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各節(jié)點(diǎn)的關(guān)鍵值 進(jìn)行逐一比較,而是先在索引表中搜索到離可以搜索到目標(biāo)節(jié)點(diǎn)最近的索引節(jié) 點(diǎn),即目標(biāo)索引節(jié)點(diǎn),然后通過目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定索 引節(jié)點(diǎn)在有序鏈表中的位置,然后在有序鏈表中搜索到目標(biāo)節(jié)點(diǎn),由此可見, 搜索速度很快,且效率有很大的提高。在有序鏈表中節(jié)點(diǎn)插入、刪除的時(shí)候要根據(jù)實(shí)際情況更新索引表使其與有 序鏈表保持同步。例如,當(dāng)增加或者刪除N次后,將索引表部分或者全部更新 一次?;蛘?,如果刪除的節(jié)點(diǎn)剛好是索引節(jié)點(diǎn),需要把本節(jié)點(diǎn)的上一節(jié)點(diǎn)或者 下一節(jié)點(diǎn)作為索引節(jié)點(diǎn),并將其指針、索引節(jié)點(diǎn)的關(guān)4建值等信息更新到索引表 中。為實(shí)現(xiàn)上述方法,本發(fā)明采用如下裝置,該裝置包括建立索引單元和搜索 單元,其中,建立索引單元,用來從有序鏈表中選取節(jié)點(diǎn),并把所述節(jié)點(diǎn)順序作為索引節(jié)點(diǎn),建立索引表;搜索單元,用來依次在索引表和有序鏈表中進(jìn)行搜索,最終搜索到目標(biāo)節(jié)點(diǎn)。且所述搜索單元又包括索引節(jié)點(diǎn)搜索模塊和節(jié)點(diǎn)搜索模塊,其中, 索引節(jié)點(diǎn)搜索模塊,用來在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)索引節(jié)點(diǎn),并把目標(biāo)索引節(jié)點(diǎn)發(fā)送到節(jié)點(diǎn)搜索模塊;節(jié)點(diǎn)搜索模塊,用來接收索引節(jié)點(diǎn)搜索模塊發(fā)送過來的目標(biāo)索引節(jié)點(diǎn),并 通過目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定索引節(jié)點(diǎn)在有序鏈表中的位 置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與該位置附近的各節(jié)點(diǎn)的關(guān)鍵值進(jìn) 行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。下面結(jié)合具體的實(shí)施例對(duì)本發(fā)明的實(shí)現(xiàn)作進(jìn)一步詳細(xì)的說明 第一實(shí)施例比如有一個(gè)有序鏈表的關(guān)鍵值取值范圍分為A (0~ 1000),B (4000 ~ 6000 ), C ( 8000 ~ 10000)三個(gè)組,在這三個(gè)組中選取各組一個(gè)關(guān)鍵值最小的節(jié)點(diǎn)建立索引表,即在有序鏈表中選取0、 4000、 8000這些關(guān)鍵值所對(duì)應(yīng)的節(jié)點(diǎn)作為索引節(jié)點(diǎn),建立索引表。第二實(shí)施例在有序鏈表中選取序號(hào)為0, K,2K,。。。。。。, nK的節(jié)點(diǎn)作為索引節(jié)點(diǎn),建立索引表(其中K-M/N)。
假定一個(gè)有序鏈表共有5000個(gè)節(jié)點(diǎn),需要搜索序號(hào)為2030的節(jié)點(diǎn)。按照 傳統(tǒng)的從有序鏈表表頭逐一比較的辦法,需要進(jìn)行2030次比較才能查找到需要 的節(jié)點(diǎn)。假定我們?yōu)殒湵硇蛱?hào)O, 100, 200,。。。。。。, n*100的節(jié)點(diǎn)建立了索引,即 選取K為100,則查找到需要的序號(hào)為2030的節(jié)點(diǎn)需要進(jìn)行的比較次數(shù)為 (2000/100+30)=50次??梢钥闯隼帽景l(fā)明使有序鏈表節(jié)點(diǎn)的搜索效率有了巨 大的提高,此處提高了約40倍。當(dāng)K的值,即M/N的比值增大時(shí),搜索效率 將會(huì)更高。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種有序鏈表節(jié)點(diǎn)的快速搜索方法,其特征在于,該方法主要包括以下步驟A、按照設(shè)定規(guī)則在有序鏈表中選取節(jié)點(diǎn),把所述節(jié)點(diǎn)作為索引節(jié)點(diǎn),建立索引表;B、在索引表中搜索到目標(biāo)索引節(jié)點(diǎn);C、通過目標(biāo)索引節(jié)點(diǎn)在有序鏈表中搜索目標(biāo)節(jié)點(diǎn)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引節(jié)點(diǎn)的數(shù)目與有序 鏈表中所有節(jié)點(diǎn)的數(shù)目比值為1: 100。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引表中至少包括所述索引節(jié)點(diǎn)指向所述有序鏈表的節(jié)點(diǎn)的指針、所述索引節(jié)點(diǎn)的關(guān)鍵:值。
4、 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述索引表中索引節(jié)點(diǎn)的排 列順序與有序鏈表中節(jié)點(diǎn)的排列順序一致。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引表是數(shù)組或鏈表。
6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B為將目標(biāo)節(jié) 點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一 比較搜索到目標(biāo)索引節(jié)點(diǎn)。
7、 根據(jù)權(quán)利要求1至6任一所述的方法,其特征在于,所述步驟C為 通過目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定索引節(jié)點(diǎn)在有序鏈表中的位 置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與所述位置附近的各節(jié)點(diǎn)的關(guān)鍵值 進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。
8、 根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括在有序 鏈表中節(jié)點(diǎn)插入、刪除時(shí),更新索引表使其與有序鏈表保持同步。
9、 一種有序鏈表節(jié)點(diǎn)的快速搜索裝置,其特征在于,該裝置包括建立索引 單元和搜索單元,其中,建立索引單元,用來從有序鏈表中選取節(jié)點(diǎn),并把所述節(jié)點(diǎn)順序作為索引 節(jié)點(diǎn),建立索引表; 搜索單元,用來依次在索引表和有序鏈表中進(jìn)行搜索,最終搜索到目標(biāo)節(jié)點(diǎn)。
10、根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述搜索單元包括索引節(jié) 點(diǎn)搜索模塊和節(jié)點(diǎn)搜索模塊,其中,索引節(jié)點(diǎn)搜索模塊,用來在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的 關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)索引節(jié)點(diǎn),并把目標(biāo)索引節(jié)點(diǎn)發(fā)送到節(jié)點(diǎn)搜索模塊;節(jié)點(diǎn)搜索模塊,用來根據(jù)所述目標(biāo)索引節(jié)點(diǎn)指向有序鏈表節(jié)點(diǎn)的指針確定 索引節(jié)點(diǎn)在有序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與該位 置附近的各節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn)。
全文摘要
一種有序鏈表節(jié)點(diǎn)的快速搜索方法及裝置,該方法主要包括以下步驟首先按照一定的規(guī)則在有序鏈表中選取少量節(jié)點(diǎn),把選取的這些節(jié)點(diǎn)作為索引節(jié)點(diǎn),建立索引表,然后在索引表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與各索引節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)索引節(jié)點(diǎn),最后通過目標(biāo)索引節(jié)點(diǎn)指向的有序鏈表節(jié)點(diǎn)的指針確定索引節(jié)點(diǎn)在有序鏈表中的位置,然后在有序鏈表中將目標(biāo)節(jié)點(diǎn)的關(guān)鍵值與所述位置附近的各節(jié)點(diǎn)的關(guān)鍵值進(jìn)行逐一比較搜索到目標(biāo)節(jié)點(diǎn),利用本方法和裝置,可以快速、高效地在有序鏈表中搜索到目標(biāo)節(jié)點(diǎn)。
文檔編號(hào)G06F17/30GK101127052SQ200710161509
公開日2008年2月20日 申請(qǐng)日期2007年9月24日 優(yōu)先權(quán)日2007年9月24日
發(fā)明者伍慧敏, 張兆元, 張紀(jì)金, 敏 蔣 申請(qǐng)人:中興通訊股份有限公司