專(zhuān)利名稱(chēng):插入節(jié)點(diǎn)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,特別涉及一種插入節(jié)點(diǎn)的方法和裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)的迅猛發(fā)展,路由表項(xiàng)的數(shù)量越來(lái)越大,比如,核心路由器的IPv4 FIB(Forwad Information Base,轉(zhuǎn)發(fā)信息表)已經(jīng)要求實(shí)現(xiàn)百萬(wàn)條的數(shù)量級(jí)。如果 用TCAM(Ternary Content Addressable Memory,三重內(nèi)容可尋址存4諸器)實(shí)現(xiàn),目 前成熟的18Mb TCAM只能實(shí)現(xiàn)256Kx72b的規(guī)格,此時(shí)就需要4片18Mb的TCAM 才能達(dá)到1M條的要求。因此,用TCAM實(shí)現(xiàn)在成本、功耗、實(shí)現(xiàn)難度上都很難 接受?;谒惴ǖ穆酚刹檎壹夹g(shù)已成為數(shù)據(jù)通信業(yè)界通用的做法,在路由容量、 成本和功耗上相比與TCAM器件有較大的優(yōu)勢(shì)。
基于算法的查找技術(shù)現(xiàn)階段有多種實(shí)現(xiàn)方式,如基于triestree (實(shí)驗(yàn)樹(shù))的 方式,基于range match (范圍匹配)的方式,以及部分基于TCAM器件的查找方 式。其中,range match的方式多采用二叉樹(shù)(Binary Tree )來(lái)實(shí)現(xiàn)路由表項(xiàng)的維 護(hù)和管理,即將路由表項(xiàng)的邊界值作為二叉樹(shù)的節(jié)點(diǎn),排序后組成一棵路由邊 界值的二叉樹(shù),以便進(jìn)行后續(xù)的查找。
二叉樹(shù)中搜索、插入、刪除的復(fù)雜度都和樹(shù)的高度相關(guān),樹(shù)高是制約二叉 樹(shù)時(shí)間效率的瓶頸。理論上,任意高度為h平衡二叉樹(shù)能容納2^ — l個(gè)節(jié)點(diǎn),即 h-O(lgn),且對(duì)此平衡二叉樹(shù)節(jié)點(diǎn)的插入、刪除所需要的維護(hù)代價(jià)最小。
為了達(dá)到一定的查找性能,在硬件實(shí)現(xiàn)的以二叉樹(shù)為^s出的查找系統(tǒng)中, 使用層高固定的二叉樹(shù)來(lái)實(shí)現(xiàn)待路由表項(xiàng)的維護(hù)。同時(shí),為了節(jié)省存儲(chǔ)空間以 及減少每次查找需要讀取的數(shù)據(jù)量,并不使用節(jié)點(diǎn)帶指針的方式來(lái)指示下一層 節(jié)點(diǎn)位置,僅靠節(jié)點(diǎn)的位置關(guān)系向下繼續(xù)查找。
由于此類(lèi)系統(tǒng)中二叉樹(shù)的層高受限,且沒(méi)有指針指示節(jié)點(diǎn)挪動(dòng)后的新的位 置,在有新的節(jié)點(diǎn)插入時(shí),將造成較多的節(jié)點(diǎn)搬移動(dòng)作,尤其是在新插入的節(jié) 點(diǎn)為遞增或遞減節(jié)點(diǎn)時(shí),隨著節(jié)點(diǎn)個(gè)數(shù)的增加,搬移動(dòng)作將會(huì)劇烈增加,從而影響整個(gè)系統(tǒng)的節(jié)點(diǎn)插入速率,在實(shí)際應(yīng)用體現(xiàn)為路由表項(xiàng)更新速度很慢,特 別是在路由震蕩時(shí),整個(gè)系統(tǒng)收斂時(shí)間較長(zhǎng)。
現(xiàn)有技術(shù)提供了如下兩種方法來(lái)實(shí)現(xiàn)在二叉樹(shù)中插入節(jié)點(diǎn) 第一種方法使用硬件邏輯來(lái)進(jìn)行節(jié)點(diǎn)的順序搬移,將需要搬移的節(jié)點(diǎn)順次 挪動(dòng)位置,使需要插入節(jié)點(diǎn)的位置形成空洞(hole),最后將待插入節(jié)點(diǎn)插入到 新出現(xiàn)的空洞。在進(jìn)行節(jié)點(diǎn)搬移時(shí),該方法還需要遵守兩條基本原則第一、 不能破壞二叉樹(shù)中各節(jié)點(diǎn)位置的大小關(guān)系;第二、從樹(shù)的根節(jié)點(diǎn)向下,尋找到 每一個(gè)有效節(jié)點(diǎn)的路徑上都不能出現(xiàn)空洞。其中,插入待插入節(jié)點(diǎn)前的二叉樹(shù)
如圖l所示,插入待插入節(jié)點(diǎn)后的二叉樹(shù)如圖2所示。
但該方法的缺陷在于,在插入遞增或遞減的節(jié)點(diǎn)時(shí),對(duì)節(jié)點(diǎn)的搬移量將逐 步增加,當(dāng)節(jié)點(diǎn)數(shù)目增加到百萬(wàn)個(gè)的數(shù)量級(jí)時(shí),幾乎每次搬移都需要搬移所有 的節(jié)點(diǎn)數(shù)目,從而使路由表項(xiàng)的更新性能將顯著下降。
第二種方法是在插入遞增或遞減節(jié)點(diǎn)時(shí),計(jì)算出插入節(jié)點(diǎn)后整個(gè)樹(shù)型結(jié)構(gòu) 所能形成的最佳狀態(tài)平衡二叉樹(shù),再將其樹(shù)型結(jié)構(gòu)一一映射到硬件存儲(chǔ)空間中, 使之在總的樹(shù)型維護(hù)時(shí)間內(nèi),所需要搬移的節(jié)點(diǎn)數(shù)目最少,達(dá)到提高節(jié)點(diǎn)插入 速率的目的。在這種搬移模式下,每插入一些節(jié)點(diǎn)后,將強(qiáng)制地調(diào)整整個(gè)樹(shù)型 結(jié)構(gòu),使其形成一棵平衡的二叉樹(shù),進(jìn)而達(dá)到平均搬移次數(shù)最少的目的。其中, 插入待插入節(jié)點(diǎn)前的二叉樹(shù)如圖3所示,插入待插入節(jié)點(diǎn)后的二叉樹(shù)如圖4所示。
但該方法的缺陷在于,將一棵不平衡的二叉樹(shù)整理為平衡的二叉樹(shù)的過(guò)程 比較繁瑣,特別是在二叉樹(shù)的容量較大時(shí),需要在高性能的硬件上使用軟件來(lái) 實(shí)現(xiàn),此時(shí)軟件還需要建立帶指針的二叉樹(shù)來(lái)映射硬件中存儲(chǔ)的樹(shù)型結(jié)構(gòu),以 便作平衡操作時(shí)使用,負(fù)荷比較大,并且需要占用一定的shadow (鏡像)內(nèi)存 空間。此外,在計(jì)算好平衡二叉樹(shù)中各節(jié)點(diǎn)的位置后,需要通過(guò)某種接口例如 PCI ( Pedpherd Component Interconnect,周邊元件擴(kuò)展)接口 ,將重新排列好的 節(jié)點(diǎn)下發(fā)到硬件邏輯中,以便能進(jìn)行高速的查找,在數(shù)據(jù)量4艮大的情況下,軟、 硬件之間的接口容易成為性能的瓶頸。
發(fā)明內(nèi)容
為了減少搬移量,提高插入效率,簡(jiǎn)化軟硬件接口,本發(fā)明實(shí)施例提供了 一種插入節(jié)點(diǎn)的方法和裝置。所述技術(shù)方案如下
8一方面,本發(fā)明實(shí)施例提供了一種插入節(jié)點(diǎn)的方法,包括
獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,才艮據(jù)連續(xù)空洞頂層的層級(jí)和 所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,才艮據(jù)所述連續(xù)空洞的頂層 的層級(jí)獲取起始插入地址,所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層, 所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn)的數(shù)目;
當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址,根據(jù)所述搬移起始地址 和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍;
根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到^:移結(jié)束地址;
才艮據(jù)所述拍更移起始地址、所述拍i移結(jié)束地址、所述起始插入地址和所述偏 移量進(jìn)行連續(xù)空洞擁S:移;
當(dāng)連續(xù)空洞搬移完成后,從所述搬移結(jié)束地址開(kāi)始向所述連續(xù)空洞方向?qū)?偏移量減1個(gè)節(jié)點(diǎn)進(jìn)行清零操作;
將所述連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。 另一方面,本發(fā)明實(shí)施例提供了一種插入節(jié)點(diǎn)的裝置,包括 第一獲取模塊,用于獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù)連 續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,根據(jù) 所述連續(xù)空洞的頂層的層級(jí)獲取起始插入地址,所述完全二叉或多叉樹(shù)樹(shù)型結(jié) 構(gòu)的層數(shù)至少為4層,所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn)的 數(shù)目;
第二獲取模塊,用于當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址,根 據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范 圍;
第三獲^^莫塊,用于根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到搬移結(jié)束地址;
搬移模塊,用于根據(jù)所述搬移起始地址、所述搬移結(jié)束地址、所述起始插 入地址和所述偏移量進(jìn)行連續(xù)空洞搬移;
清零模塊,用于當(dāng)連續(xù)空洞搬移完成后,從所述搬移結(jié)束地址開(kāi)始向所述 連續(xù)空洞方向?qū)ζ屏繙p1個(gè)節(jié)點(diǎn)進(jìn)行清零操作;
插入模塊,用于將所述連續(xù)變化的節(jié)點(diǎn)插入到包含;f寺插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。
在本發(fā)明實(shí)施例中,當(dāng)需要向完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)中插入連續(xù)變化的節(jié)點(diǎn)時(shí),利用一片連續(xù)的多個(gè)空洞,并一起搬移多個(gè)節(jié)點(diǎn),可以顯著降低叉 樹(shù)在處理遞增或遞減的節(jié)點(diǎn)插入時(shí)所需要的搬移次數(shù),提高插入效率,從而提 高路由表項(xiàng)的更新性能。此外,依據(jù)本發(fā)明實(shí)施例的技術(shù)方案完成節(jié)點(diǎn)的快速 搬移和維護(hù),可以顯著減小軟件層面所需要的計(jì)算負(fù)載量,簡(jiǎn)化軟硬件之間的
接口;也不需要占用額外的shadow空間,節(jié)省了內(nèi)存空間。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施 例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描 述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不 付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖l是現(xiàn)有技術(shù)一提供的插入待插入節(jié)點(diǎn)前的示意圖2是現(xiàn)有技術(shù)一提供的插入待插入節(jié)點(diǎn)后的示意圖3是現(xiàn)有技術(shù)二提供的插入待插入節(jié)點(diǎn)前的示意圖4是現(xiàn)有技術(shù)二提供的插入待插入節(jié)點(diǎn)后的示意圖5是本發(fā)明實(shí)施例 一提供的插入待插入節(jié)點(diǎn)前的示意圖6是本發(fā)明實(shí)施例 一提供的插入節(jié)點(diǎn)的方法的流程圖7是本發(fā)明實(shí)施例一提供的完成節(jié)點(diǎn)搬移的示意圖8是本發(fā)明實(shí)施例二4是供的插入節(jié)點(diǎn)裝置的示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明 實(shí)施方式作進(jìn)一步地詳細(xì)描述。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí) 施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在 沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范 圍。
在完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)中,在連續(xù)變化的節(jié)點(diǎn)進(jìn)行插入操作時(shí),當(dāng) 查找到多個(gè)連續(xù)空洞時(shí),則進(jìn)行一次多個(gè)節(jié)點(diǎn)的連續(xù)搬移,這樣可在待插入節(jié) 點(diǎn)位置形成多個(gè)空洞,此時(shí),在對(duì)后面插入的多個(gè)節(jié)點(diǎn)時(shí),可以減少搬移量, 提高插入效率。實(shí)施例一
本發(fā)明實(shí)施例提供了一種插入節(jié)點(diǎn)的方法,如圖6所示,包括 101:獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù)連續(xù)空洞頂層的層 級(jí)和完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,根據(jù)連續(xù)空洞的層級(jí)獲取 起始插入地址,其中,該完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層。
為了描述方便,本發(fā)明實(shí)施例以二叉樹(shù)為例,但在實(shí)際應(yīng)用中,并不限于 二叉樹(shù),也可以是三叉樹(shù)或多叉樹(shù)。如圖5所示的二叉樹(shù),該二叉樹(shù)的層高x 為7,從頂層至底層依次為0、 1、 2、 3、 4、 5、 6層,右側(cè)有連續(xù)63個(gè)空洞, 連續(xù)空洞的最頂點(diǎn)位置的空洞的層級(jí)n取值為1,偏移量offset^ 2"—"—2)=16, 所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn)的數(shù)目。其中,根據(jù)子樹(shù) 的個(gè)數(shù)公式2" -l可知,連續(xù)空洞個(gè)數(shù)為63個(gè),從而可知連續(xù)空洞頂層的地址, 當(dāng)?shù)弥B續(xù)空洞頂層的地址后,在圖5中向右平推31,即可得知起始插入地址, 向左平推31,即可得知最后一個(gè)空洞地址,用指針r一hole一t叩指向起始插入地 址。
102:當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址,根據(jù)搬移起始地址 和偏移量得到包含4寺插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍。
具體地,將搬移起始地址加偏移量得到與連續(xù)空洞相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地 址范圍為(搬移起始地址+l,搬移起始地址+偏移量-1 ),判斷相鄰的滿(mǎn)節(jié)點(diǎn)子 樹(shù)的地址范圍是否包含待插入位置,如果是,則得到包含待插入位置的滿(mǎn)節(jié)點(diǎn) 子樹(shù)的地址范圍。如杲不是,將相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍的第二邊界地址 加偏移量,得到下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍為U般移起始地址+偏移量 xm+l,搬移起始地址+偏移量x (m+l)-l),判斷下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的 地址范圍是否包含待插入位置,直到得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址 范圍,m為搬移節(jié)點(diǎn)的輪數(shù),m的取值為1、 2、 3、 4、 5、 6......。在本實(shí)施例
中,m取值為1、 2。
需要說(shuō)明的是,第二邊界地址為靠近連續(xù)空洞方向的地址,遠(yuǎn)離連續(xù)空洞 方向的地址為第一邊界地址,在圖5中,由于連續(xù)空洞位于右側(cè),因此,第一 邊界地址為擁定移起始地址+偏移量x (m+l)-l,該地址遠(yuǎn)離連續(xù)空洞方向, 第二邊界地址為搬移起始地址+偏移量x m+l,該地址靠近連續(xù)空洞方向。
以圖5為例,用指針i二src指示搬移起始地址;將搬移起始地址加上偏移量后減l,得到與連續(xù)空洞相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍為(搬移起始地址+l,搬
移起始地址+16-l),此時(shí)m-O,判斷得到的滿(mǎn)節(jié)點(diǎn)子樹(shù)地址范圍是否包含待插 入位置,如果不是,則沖艮據(jù)得到的滿(mǎn)節(jié)點(diǎn)子樹(shù)地址范圍和偏移量offset,得到下 一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)地址范圍為(搬移起始地址+16x 1+1,搬移起始地址+16 x2-l),此時(shí),m=l,并判斷得到的下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包 含待插入位置,如果不是,則根據(jù)得到的下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍 和偏移量offset,得到第三個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍為(搬移起始地址+16 x2+l,搬移起始地址+16 x 3-1 ),此時(shí),m=2,判斷得到第三個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子 樹(shù)的地址范圍是否包含待插入節(jié)點(diǎn)的位置,本領(lǐng)域人員可以理解的,通過(guò)持續(xù) 的判斷和不斷的滿(mǎn)節(jié)點(diǎn)子樹(shù)的推移,根據(jù)節(jié)點(diǎn)的搬移起始地址和offset可以得到 包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍。
在本發(fā)明實(shí)施例中,如圖5所示,可以得知第三個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍 包含待插入節(jié)點(diǎn)位置。
103:根據(jù)102得到滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到拍i移結(jié)束地址。
具體地,將包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍中的第二邊界地址減2 得到搬移結(jié)束地址。
如圖5所示,第三個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)地址范圍包含待插入節(jié)點(diǎn)位置,將第三個(gè) 滿(mǎn)節(jié)點(diǎn)子樹(shù)地址范圍的第二邊界地址減2得到最后一個(gè)需搬移節(jié)點(diǎn),即第二個(gè) 滿(mǎn)節(jié)點(diǎn)子樹(shù)的3層最右側(cè)節(jié)點(diǎn),用指針r—dst指示最后一個(gè)需搬移節(jié)點(diǎn),該節(jié)點(diǎn) 對(duì)應(yīng)的地址即為搬移結(jié)束地址。
104:根據(jù)搬移起始地址、搬移結(jié)束地址、起始插入地址和偏移量進(jìn)行連續(xù) 空洞搬移。
具體地,將起始插入位置地址增1得到第一插入地址,將搬移起始地址對(duì) 應(yīng)的節(jié)點(diǎn)復(fù)制到第一插入地址,將偏移量減1得到第一偏移量;
將第一插入地址增2得到第二插入地址,將搬移起始地址增1得到第一朝殳 移地址,將第一搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到第二插入地址,將所迷第一偏移量 減l得到第二偏移量;
將第二插入地址依次增l,將第一搬移地址依次增l,將第一搬移地址依次 增1后的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到第二插入地址依次增1后的地址,同時(shí),將所 述第二偏移量依次減1;當(dāng)?shù)诙屏康扔?時(shí),復(fù)制當(dāng)前待4般移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插 入地址,當(dāng)前待搬移地址增l,當(dāng)前待插入位置層地址減1,將所述第二偏移量
減l得到第三偏移量;
判斷當(dāng)前待搬移地址增1后的地址是否為搬移結(jié)束地址,如果是,將當(dāng)前 待搬移地址增1得到的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入位置層地址減1得到 的待插入地址,將所述第三偏移量置0,并結(jié)束連續(xù)空洞搬移。
進(jìn)一步地,當(dāng)判斷當(dāng)前待搬移地址增1后的地址不是搬移結(jié)束地址時(shí),將 搬移起始地址賦值給起始插入地址;
將起始插入地址增i得到當(dāng)前待插入地址,判斷另一當(dāng)前待搬移節(jié)點(diǎn)的地
址是否是所述搬移結(jié)束地址,如果是,將另一當(dāng)前待搬移節(jié)點(diǎn)復(fù)制到當(dāng)前待插 入地址,結(jié)束連續(xù)空洞搬移;如果不是,完成另一當(dāng)前待搬移節(jié)點(diǎn)的搬移后, 判斷另 一 當(dāng)前待搬移節(jié)點(diǎn)的下 一 節(jié)點(diǎn)的地址是否為所述搬移結(jié)束地址,直到完 成搬移結(jié)束地址對(duì)應(yīng)節(jié)點(diǎn)的搬移。
以圖5為例,為了實(shí)現(xiàn)連續(xù)空洞搬移操作,用指針rjiole一top指向起始插入 地址,指針r—rsc指向搬移起始地址,指針r一rsd指向搬移結(jié)束地址,連續(xù)空洞 搬移操作通過(guò)3個(gè)指針的平移操作完成,具體如下
指針r—hole—t叩地址增l得到第一插入地址,即指針rJiole—top指向二叉樹(shù) 5層最右側(cè)空洞位置,將指針r—rsc指向的節(jié)點(diǎn)^:移到第一插入地址復(fù)制第一插 入地址,同時(shí)將偏移量offset減1得到笫一偏移量;
將第一插入地址增2,得到第二插入地址,即指針r—hole—top指向二叉樹(shù)4 層最右側(cè)空洞位置,將指針r—rsc地址增1得到第一搬移地址,即指針rjsc指 向與連續(xù)空洞相鄰的第一個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)的3層最右側(cè)節(jié)點(diǎn),此時(shí),將指針r一rsc 指向的節(jié)點(diǎn)搬移到此時(shí)r一hole一top指向的空洞位置,同時(shí),將第一偏移量減1 得到第二偏移量。
將第二插入地址增l,得到第三插入地址,即指針r—hole—top指向二叉樹(shù)6 層從最右側(cè)數(shù)第3個(gè)空洞位置,將第一搬移地址增l,得到第二搬移地址,即指 針r一rsc指向與連續(xù)空洞的相鄰的第一滿(mǎn)節(jié)點(diǎn)子樹(shù)2層最右側(cè)節(jié)點(diǎn),將此時(shí)指針 r一rsc指向的節(jié)點(diǎn)搬移到此時(shí)指針r_hole_top指向的空洞位置,同時(shí)將第二偏移 量減l;
在本實(shí)施例中,為了保持節(jié)點(diǎn)的連續(xù)性,對(duì)于開(kāi)始2個(gè)節(jié)點(diǎn)的插入做了特殊處理。從第三個(gè)節(jié)點(diǎn)開(kāi)始,指針rJiole—top的地址依次增1,同時(shí),指針rjsc 的地址依次增1 ,將當(dāng)前指針r一rsc指向的節(jié)點(diǎn)搬移到當(dāng)前指針r_hole_top指向 的空洞位置,同時(shí)第二偏移量依次減1 。
當(dāng)?shù)诙屏康扔?時(shí),則表示第一輪需要搬移的16節(jié)點(diǎn)已經(jīng)搬移完14 個(gè)節(jié)點(diǎn),此時(shí),指針r一hole—top指向二叉樹(shù)1層最右側(cè)空洞位置,指針r—rsc指 向圖5中第一個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)的2層的最右邊節(jié)點(diǎn),將此時(shí)指針r一rsc指向的節(jié)點(diǎn) 復(fù)制到指針r—holejop指向的空洞位置,同時(shí),第二偏移量減1,當(dāng)前插入層地 址減l,即指針r—rsc指向圖5中第一個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)的3層的最右邊節(jié)點(diǎn),指針 r—hole_top地址增1,即指針r—hole_top指向二叉樹(shù)頂層空洞地址,判斷此時(shí)指 針r一rsc指向的節(jié)點(diǎn)的地址是否為搬移結(jié)束地址,如果是,將指針rjsc指向的 節(jié)點(diǎn)搬移到指針r一hole—top指向的空洞,將第二偏移量置0,并結(jié)束連續(xù)空洞搬 移。如果不是,則將搬移起始地址賦值給起始插入地址,將開(kāi)始下一輪節(jié)點(diǎn)的 搬移。
在本實(shí)施例中,由于第一滿(mǎn)節(jié)點(diǎn)子樹(shù)3層最左側(cè)節(jié)點(diǎn)的地址不是搬移結(jié)束 地址,此時(shí),指針r一hole—t叩指向二叉樹(shù)頂層節(jié)點(diǎn)位置,指針i二rsc指向二叉樹(shù) 2層的節(jié)點(diǎn),如圖7所示;判斷此時(shí)指針rjsc指向的節(jié)點(diǎn)的地址是不是搬移結(jié) 束地址,如果不是,則將此時(shí)指針r—rsc指向的節(jié)點(diǎn)搬移到指針r—holej叩指向 的空洞位置。接下來(lái),將指針r_rsc地址依次增1,指針r—hole—top地址依次增1, 判斷此時(shí)指針rjsc指向的節(jié)點(diǎn)的地址是不是l般移結(jié)束地址,如果不是,將當(dāng)前 指針r—rsc指向的節(jié)點(diǎn)搬移到指針rJioleJop指向的空洞,如此反復(fù),直到當(dāng)前 指針r—rsc指向的節(jié)點(diǎn)的地址為搬移結(jié)束地址,則結(jié)束連續(xù)空洞搬移;如果不是, 繼續(xù)進(jìn)行下一輪節(jié)點(diǎn)的搬移操作,在本實(shí)施例中,此時(shí),指針r一rsc指向的節(jié)點(diǎn) 為指針r一rsd指向的節(jié)點(diǎn),因此,連續(xù)空洞搬移結(jié)束。
105;當(dāng)連續(xù)空洞搬移完成后,從搬移結(jié)束地址開(kāi)始向靠近連續(xù)空洞方向?qū)?offset減1個(gè)節(jié)點(diǎn)進(jìn)行清零操作。
具體地,為了使后續(xù)待插入節(jié)點(diǎn)填入二叉樹(shù),在連續(xù)空洞搬移完成后,需 要從搬移結(jié)束地址向靠近連續(xù)空洞方向?qū)ffset減1個(gè)節(jié)點(diǎn)進(jìn)行清零操作,即對(duì) 第二輪搬移的節(jié)點(diǎn)進(jìn)行清零操作,以便待插入節(jié)點(diǎn)在插入第三個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)時(shí), 為第三個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù)中的節(jié)點(diǎn)的搬移空出位置。
106:將連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。具體地,為了將待插入節(jié)點(diǎn)插入到第三個(gè)滿(mǎn)節(jié)點(diǎn)子樹(shù),需要對(duì)第三個(gè)滿(mǎn)節(jié) 點(diǎn)子樹(shù)進(jìn)行常規(guī)的節(jié)點(diǎn)擁^移操作,同時(shí)將待插入節(jié)點(diǎn)插入到待插入位置。 其中,連續(xù)變化的節(jié)點(diǎn)為遞增節(jié)點(diǎn)或遞減節(jié)點(diǎn)。
在本發(fā)明實(shí)施例中,釆用高度為22,每個(gè)節(jié)點(diǎn)為32b的BinaryTree來(lái)實(shí)現(xiàn)大 容量路由表項(xiàng)的存儲(chǔ)和查找。硬件實(shí)現(xiàn)架構(gòu)是FPGA ( FPGA Field Programmable Gate Array,現(xiàn)場(chǎng)可編程門(mén)陣列)和DDR2 ( Double Data Rate,雙倍速)SDRAM (Synchronous Dynamic Random Access Memory , 同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器), Binary Tree的節(jié)點(diǎn)存儲(chǔ)在DDR2 SDRAM和FPGA內(nèi)部,控制平面CPU (Central Processing Unit,中央處理器)通過(guò)PCI接口對(duì)FPGA和DDR2 SDRAM進(jìn)行讀寫(xiě)操 作。
在采用本發(fā)明實(shí)施例所述的插入方法前,插入512K遞增或遞減順序的節(jié)點(diǎn) 平均插入速率小于350entry/s。采用本發(fā)明實(shí)施例的方法后,對(duì)遞增或遞減的插 入動(dòng)作進(jìn)行連續(xù)的空位搬移,而控制平面CPU相對(duì)于現(xiàn)有技術(shù)的操作并不增加 計(jì)算負(fù)載量,對(duì)遞增或遞減分布的1M節(jié)點(diǎn)平均插入速率都可以超過(guò)1200 entry/s。此外,通過(guò)仿真可知,采用本發(fā)明實(shí)施例的方法,在1/2空洞連續(xù)搬移 情況下,需4般移的節(jié)點(diǎn)^:量減少為原來(lái)的30%。
在本發(fā)明實(shí)施例中,當(dāng)需要向二叉樹(shù)中插入遞增或遞減的節(jié)點(diǎn)時(shí),利用一 片連續(xù)的多個(gè)空洞,并一起搬移多個(gè)節(jié)點(diǎn),可以顯著降低叉樹(shù)在處理遞增或遞 減的節(jié)點(diǎn)插入時(shí)所需要的搬移次數(shù),提高插入效率,從而提高路由表項(xiàng)的更新 性能。此外,只需要用FPGA/ASIC (Application Specific Integrated Circuit,專(zhuān) 用集成電路)硬件邏輯,即可依據(jù)本發(fā)明實(shí)施例的方法完成節(jié)點(diǎn)的快速搬移和 維護(hù),可以顯著減小軟件層面所需要的計(jì)算負(fù)載量,筒化軟硬件之間的接口; 也不需要占用額外的shadow空間,節(jié)省了內(nèi)存空間。
實(shí)施例二
基于與方法實(shí)施例相同的發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了 一種插入節(jié)點(diǎn)的 裝置,如圖8所示,包括
第一獲取模塊801,用于獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù) 連續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,才艮 據(jù)所述連續(xù)空洞的頂層的層級(jí)獲取起始插入地址,所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層,所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn) 的數(shù)目;
第二獲取模塊802,用于當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址, 根據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址 范圍;
第三獲取模塊803,用于根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到搬移結(jié)束地
址;
具體地,第三獲^Mt塊803,用于將所述包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地 址范圍的第二邊界減2得到搬移結(jié)束地址,所述第二邊界地址為靠近連續(xù)空洞 方向的地址;
搬移模塊804,用于根據(jù)所述搬移起始地址、所述4般移結(jié)束地址、所述起始 插入地址和所述偏移量進(jìn)行連續(xù)空洞搬移;
清零模塊805,用于當(dāng)連續(xù)空洞搬移完成后,從所述搬移結(jié)束地址開(kāi)始向所 述連續(xù)空洞方向?qū)λ銎屏繙p1個(gè)節(jié)點(diǎn)進(jìn)行清零4喿作;
插入^^莫塊806,用于將所述連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn) 子樹(shù)。
其中,第一獲取模塊801根據(jù)連續(xù)空洞頂層的層級(jí)和完全二叉或多叉樹(shù)樹(shù) 型結(jié)構(gòu)的層數(shù)確定偏移量,包括
第一獲取模塊801獲取偏移量=2"—"—2),其中,x為完全二叉或多叉樹(shù) 樹(shù)型結(jié)構(gòu)的層數(shù),n為連續(xù)空洞頂層的層級(jí)。詳細(xì)過(guò)程可以參見(jiàn)方法實(shí)施例的 101,在此不再贅述。
其中,第二獲取模塊802根據(jù)搬移起始地址和偏移量得到包含待插入位置 的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,包括
第二獲取模塊802將搬移起始地址加偏移量得到與連續(xù)空洞相鄰的滿(mǎn)節(jié)點(diǎn) 子樹(shù)的地址范圍為(搬移起始地址+l,搬移起始地址+偏移量-1 ),判斷相鄰的 滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包含待插入位置,如果是,則得到包含待插入位置 的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍。
進(jìn)一步地,第二獲取模塊802,還用于當(dāng)判斷相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍 不包含待插入位置時(shí),將所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍的第 一邊界地址加 所述偏移量,得到所述下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍為(#:移起始地址+偏移量x m+l,搬移起始地址+偏移量x ( m+l ) -1 ),判斷下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn) 子樹(shù)的地址范圍是否包含待插入位置,直到得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù) 的地址范圍,其中,第一邊界地址為遠(yuǎn)離所述連續(xù)空洞方向的地址,m為4般移 節(jié)點(diǎn)的輪數(shù),m的取值為1、 2、 3、 4、 5、 6......。需要說(shuō)明的是,第二獲取模塊802的詳細(xì)過(guò)程可以參見(jiàn)方法實(shí)施例102,在 此不再贅述。其中,搬移模塊804根據(jù)搬移起始地址、搬移結(jié)束地址、起始插入地址和 偏移量進(jìn)行連續(xù)空洞搬移,包括將起始插入位置地址增1得到第一插入地址,將4般移起始地址對(duì)應(yīng)的節(jié)點(diǎn) 復(fù)制到第一插入地址,將所述偏移量減1得到第一偏移量;將第一插入地址增2得到第二插入地址,將搬移起始地址增1得到第一搬 移地址,將第一搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到第二插入地址,將所述第一偏移量 減l得到第二偏移量;將第二插入地址依次增l,將第一搬移地址依次增l,將第一搬移地址依次 增1后的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到第二插入地址依次增1后的地址,同時(shí),將所 述第二偏移量依次減1;當(dāng)所述第二偏移量等于2時(shí),復(fù)制當(dāng)前4寺搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前 待插入地址,當(dāng)前待4般移地址增1,當(dāng)前待插入位置層地址減1,將所述第二偏 移量減l得到第三偏移量;判斷當(dāng)前待搬移地址增1后的地址是否為搬移結(jié)束地址,如果是,將當(dāng)前 待搬移地址增1得到的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入位置層地址減1得到 的待插入地址,將所述第三偏移量置O,并結(jié)束連續(xù)空洞搬移。進(jìn)一步地,搬移模塊804,還用于當(dāng)判斷當(dāng)前待搬移地址增l后的地址不是 搬移結(jié)束地址時(shí),將搬移起始地址賦值給起始插入地址;將起始插入地址增1得到當(dāng)前待插入地址,判斷另一當(dāng)前待搬移節(jié)點(diǎn)的地 址是否是所述搬移結(jié)束地址,如果是,將另一當(dāng)前待搬移節(jié)點(diǎn)復(fù)制到當(dāng)前待插 入地址,結(jié)束連續(xù)空洞搬移;如果不是,完成另一當(dāng)前待搬移節(jié)點(diǎn)的搬移后, 判斷另一當(dāng)前待搬移節(jié)點(diǎn)的下一節(jié)點(diǎn)的地址是否為所述搬移結(jié)束地址,直到完 成搬移結(jié)束地址對(duì)應(yīng)節(jié)點(diǎn)的搬移。需要說(shuō)明的是,搬移模塊的詳細(xì)過(guò)程可以參見(jiàn)方法實(shí)施例的104,在此不再贅述。其中,連續(xù)變化的節(jié)點(diǎn)為連續(xù)遞增的節(jié)點(diǎn)或連續(xù)遞減的節(jié)點(diǎn)。在本發(fā)明實(shí)施例中,當(dāng)需要向樹(shù)型結(jié)構(gòu)匯中插入遞增或遞減的節(jié)點(diǎn)時(shí),利 用一片連續(xù)的多個(gè)空洞,并一起搬移多個(gè)節(jié)點(diǎn),可以顯著降低叉樹(shù)在處理遞增 或遞減的節(jié)點(diǎn)插入時(shí)所需要的搬移次數(shù),提高插入效率,從而提高路由表項(xiàng)的更新性能。此外,只需要使用FPGA/ASIC硬件邏輯,即可完成節(jié)點(diǎn)的快速搬移 和維護(hù),可以顯著減小軟件層面所需要的計(jì)算負(fù)載量,簡(jiǎn)化軟硬件之間的接口; 也不需要占用額外的shadow空間,節(jié)省了內(nèi)存空間。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是 可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取 存儲(chǔ)介質(zhì)中,所述存儲(chǔ)介質(zhì)為計(jì)算機(jī)的軟盤(pán)、硬盤(pán)或光盤(pán)等。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的 精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的 保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種插入節(jié)點(diǎn)的方法,其特征在于,包括獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù)連續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,根據(jù)所述連續(xù)空洞的頂層的層級(jí)獲取起始插入地址,所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層,所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn)的數(shù)目;當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址,根據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍;根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到搬移結(jié)束地址;根據(jù)所述搬移起始地址、所述搬移結(jié)束地址、所述起始插入地址和所述偏移量進(jìn)行連續(xù)空洞搬移;當(dāng)連續(xù)空洞搬移完成后,將所述連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。
2、 如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)連續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,包括確定所述偏移量=2"—"—2),其中,x為所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù),n為連續(xù)空洞頂層的層級(jí)。
3、 如權(quán)利要求1所述的方法,其特征在于,所述^艮據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,包括將所述搬移起始地址加所述偏移量得到與所述連續(xù)空洞相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,判斷所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包含待插入位置,如果是,則得到所述包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍。
4、 如權(quán)利要求3所述的方法,其特征在于,還包括當(dāng)判斷所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍不包含待插入位置時(shí),將所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍的第一邊界地址加所述偏移量,得到所述下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,判斷所述下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包含待插入位置,直到得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,其中,所述第 一邊界地址為遠(yuǎn)離所述連續(xù)空洞方向的地址。
5、 如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)所述搬移起始地址、所述搬移結(jié)束地址、所述起始插入地址和所述偏移量進(jìn)行連續(xù)空洞搬移,包括:將起始插入位置地址增1得到第一插入地址,將搬移起始地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到第一插入地址,將所述偏移量減l得到第一偏移量;將所述第一插入地址增2得到第二插入地址,將搬移起始地址增1得到第一搬移地址,將所述第一搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到所述第二插入地址,將所述第一偏移量減1得到第二偏移量;將所述第二插入地址依次增1,將所述第一^:移地址依次增1,將所述第一搬移地址依次增1后的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到所述第二插入地址依次增1后的地址,同時(shí),將所述第二偏移量依次減1;當(dāng)所述第二偏移量等于2時(shí),復(fù)制當(dāng)前待搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入地址,當(dāng)前待搬移地址增l,當(dāng)前待插入位置層地址減1,將所述第二偏移量減l得到第三偏移量;判斷當(dāng)前待搬移地址增1后的地址是否為搬移結(jié)束地址,如果是,將當(dāng)前待搬移地址增1得到的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入位置層地址減1得到的待插入地址,將所述第三偏移量置0,并結(jié)束連續(xù)空洞^:移。
6、 如權(quán)利要求5所述的方法,其特征在于,還包括當(dāng)判斷當(dāng)前待搬移地址增1后的地址不是搬移結(jié)束地址時(shí),將搬移起始地址賦值給起始插入地址;將起始插入地址增1得到當(dāng)前待插入地址,判斷另一當(dāng)前待搬移節(jié)點(diǎn)的地址是否是所述搬移結(jié)束地址,如果是,將另一當(dāng)前待搬移節(jié)點(diǎn)復(fù)制到當(dāng)前待插入地址,結(jié)束連續(xù)空洞搬移;如果不是,完成另一當(dāng)前待搬移節(jié)點(diǎn)的搬移后,判斷當(dāng)前待搬移節(jié)點(diǎn)的下一節(jié)點(diǎn)的地址是否為所述搬移結(jié)束地址,直到完成搬移結(jié)束地址對(duì)應(yīng)節(jié)點(diǎn)的拍史移。
7、 如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到搬移結(jié)束地址包括將所述包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍的第二邊界地址減2得到搬移結(jié)束地址,所述第二邊界地址為靠近連續(xù)空洞方向的地址。
8、 如權(quán)利要求l所述的方法,其特征在于,當(dāng)連續(xù)空洞搬移完成后,所述方法還包括從所述纟般移結(jié)束地址開(kāi)始向所述連續(xù)空洞方向?qū)ζ屏繙p1個(gè)節(jié)點(diǎn)進(jìn)行清零操作。
9、 一種插入節(jié)點(diǎn)的裝置,其特征在于,包括第一獲取模塊,用于獲取完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù)連續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,根據(jù)所述連續(xù)空洞的頂層的層級(jí)獲取起始插入地址,所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層,所述偏移量表示連續(xù)節(jié)點(diǎn)搬移操作中,每輪搬移節(jié)點(diǎn)的數(shù)目;第二獲取模塊,用于當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取搬移起始地址,根據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍;第三獲取模塊,用于根據(jù)所述滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍得到搬移結(jié)束地址;搬移模塊,用于根據(jù)所述搬移起始地址、所述搬移結(jié)束地址、所述起始插入地址和所述偏移量進(jìn)行連續(xù)空洞^:移;插入模塊,用于將所述連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。
10、 如權(quán)利要求9所述的裝置,其特征在于,所述第一獲取模塊根據(jù)連續(xù)空洞頂層的層級(jí)和所述完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,包括所述第一獲取模塊獲取所述偏移量=2"—"_2),其中,x為完全二叉或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù),n為連續(xù)空洞頂層的層級(jí)。
11、 如權(quán)利要求9所述的裝置,其特征在于,所述第二獲取模塊根據(jù)所述搬移起始地址和所述偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,包括所述第二獲取模塊將所述搬移起始地址加所述偏移量得到與所述連續(xù)空洞相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,判斷所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包含待插入位置,如果是,則得到所述包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍。
12、 如權(quán)利要求11所述的裝置,其特征在于,所述第二獲取模塊,還用于當(dāng)判斷所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍不包含待插入位置時(shí),將所述相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍的第 一邊界地址加所述偏移量,得到所述下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,判斷所述下一個(gè)相鄰的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍是否包含待插入位置,直到得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍,其中,所述第 一邊界地址為遠(yuǎn)離所述連續(xù)空洞方向的地址。
13、 如權(quán)利要求9所述的插入節(jié)點(diǎn)的裝置,其特征在于,所述搬移模塊根據(jù)所述搬移起始地址、所述搬移結(jié)束地址、所述起始插入地址和所述偏移量進(jìn)行連續(xù)空洞搬移,包括將起始插入位置地址增1得到第一插入地址,將搬移起始地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到所述第一插入地址,將所述偏移量減1得到第一偏移量;將所述第一插入地址增2得到第二插入地址,將^:移起始地址增1得到第一搬移地址,將所述第一搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到所述第二插入地址,將所述第一偏移量減1得到第二偏移量;將所述第二插入地址依次增1,將所述第一搬移地址依次增1,將所述第一搬移地址依次增1后的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到所述第二插入地址依次增1后的地址,同時(shí),將所述第二偏移量依次減1;當(dāng)所述第二偏移量等于2時(shí),復(fù)制當(dāng)前待搬移地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入地址,當(dāng)前待搬移地址增l,當(dāng)前待插入位置層地址減1,將所述第二偏移量減l得到第三偏移量;判斷當(dāng)前待搬移地址增1后的地址是否為搬移結(jié)束地址,如果是,將當(dāng)前待搬移地址增1得到的地址對(duì)應(yīng)的節(jié)點(diǎn)復(fù)制到當(dāng)前待插入位置層地址減1得到的待插入地址,將所述第三偏移量置O,并結(jié)束連續(xù)空洞搬移。
14、 如權(quán)利要求13所述的裝置,其特征在于,所述搬移模塊,還用于當(dāng)判斷當(dāng)前待搬移地址增1后的地址不是搬移結(jié)束地址時(shí),將纟般移起始地址I武值給起始插入地址;將起始插入地址增1得到當(dāng)前待插入地址,判斷另一當(dāng)前待搬移節(jié)點(diǎn)的地址是否是所述搬移結(jié)束地址,如果是,將另一當(dāng)前待搬移節(jié)點(diǎn)復(fù)制到當(dāng)前待插入地址,結(jié)束連續(xù)空洞搬移;如果不是,完成另一當(dāng)前待搬移節(jié)點(diǎn)的搬移后,另 一判斷當(dāng)前待搬移節(jié)點(diǎn)的下一節(jié)點(diǎn)的地址是否為所述搬移結(jié)束地址,直到完成搬移結(jié)束地址對(duì)應(yīng)節(jié)點(diǎn)的搬移。
15、 如權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括清零模塊,用于當(dāng)連續(xù)空洞搬移完成后,從所述搬移結(jié)束地址開(kāi)始向所述連續(xù)空洞方向?qū)ζ屏繙p1個(gè)節(jié)點(diǎn)進(jìn)行清零操作。
全文摘要
本發(fā)明實(shí)施例一種公開(kāi)了插入節(jié)點(diǎn)的方法和裝置,屬于數(shù)據(jù)通信領(lǐng)域。所述方法包括獲取二叉樹(shù)或多叉樹(shù)樹(shù)型結(jié)構(gòu)的連續(xù)空洞,根據(jù)連續(xù)空洞頂層的層級(jí)和所述二叉樹(shù)或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)確定偏移量,該二叉樹(shù)或多叉樹(shù)樹(shù)型結(jié)構(gòu)的層數(shù)至少為4層;當(dāng)有連續(xù)變化的節(jié)點(diǎn)插入時(shí),獲取起始搬移地址,根據(jù)起始搬移地址和偏移量得到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)的地址范圍;獲取搬移結(jié)束地址;根據(jù)起始搬移地址、搬移結(jié)束地址、起始插入地址和偏移量進(jìn)行連續(xù)空洞搬移;當(dāng)連續(xù)空洞搬移完成后,對(duì)搬移結(jié)束地址的相鄰的偏移量個(gè)節(jié)點(diǎn)進(jìn)行清零操作;將連續(xù)變化的節(jié)點(diǎn)插入到包含待插入位置的滿(mǎn)節(jié)點(diǎn)子樹(shù)。在本實(shí)施例中,可以減少搬移量,提高節(jié)點(diǎn)插入效率。
文檔編號(hào)H04L12/56GK101521627SQ20091008158
公開(kāi)日2009年9月2日 申請(qǐng)日期2009年4月13日 優(yōu)先權(quán)日2009年4月13日
發(fā)明者毅 易 申請(qǐng)人:華為技術(shù)有限公司