国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種廣義后綴樹快速遍歷的方法及系統(tǒng)的制作方法

      文檔序號(hào):6523325閱讀:345來源:國(guó)知局
      一種廣義后綴樹快速遍歷的方法及系統(tǒng)的制作方法
      【專利摘要】本發(fā)明適用于計(jì)算機(jī)科學(xué)領(lǐng)域,提供了一種廣義后綴樹快速遍歷的方法,包括:為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu);為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。本發(fā)明還提供了一種廣義后綴樹快速遍歷的系統(tǒng)。本發(fā)明所提供的廣義后綴樹快速遍歷的方法及系統(tǒng)能極大降低遍歷統(tǒng)計(jì)過程的時(shí)間復(fù)雜度,且不需要遞歸,進(jìn)而大大提高了運(yùn)行效率。
      【專利說明】一種廣義后綴樹快速遍歷的方法及系統(tǒng)
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計(jì)算機(jī)科學(xué)領(lǐng)域,尤其涉及一種廣義后綴樹快速遍歷的方法及系統(tǒng)?!颈尘凹夹g(shù)】
      [0002]后綴樹是一種廣泛使用的數(shù)據(jù)結(jié)構(gòu),通常用于字符串的處理,能快速解決很多關(guān)于字符串的問題。當(dāng)同時(shí)用于多個(gè)字符串,即是說把給定的N個(gè)源字符串的所有的后綴建成一顆樹,這種數(shù)據(jù)結(jié)構(gòu)叫做廣義后綴樹。
      [0003]目前,傳統(tǒng)的廣義后綴樹遍歷采用廣度優(yōu)先遍歷的方法,不過當(dāng)需要進(jìn)行信息統(tǒng)計(jì),比如統(tǒng)計(jì)根節(jié)點(diǎn)(Root)到每個(gè)節(jié)點(diǎn)的路徑所代表的子字符串的時(shí)候,傳統(tǒng)的方法會(huì)通過遞歸多次重復(fù)遍歷底層節(jié)點(diǎn),需要在遍歷每個(gè)節(jié)點(diǎn)的時(shí)候遞歸調(diào)用方法來統(tǒng)計(jì)該節(jié)點(diǎn)子節(jié)點(diǎn)里葉子的個(gè)數(shù)和索引數(shù),使得時(shí)間復(fù)雜度大大提高,并且遞歸嵌套過多程序容易發(fā)生堆棧溢出,而且運(yùn)行效率降低很多。
      [0004]因此,亟需設(shè)計(jì)一種廣義后綴樹快速遍歷的方法及系統(tǒng),從而可以實(shí)現(xiàn)能極大降低遍歷統(tǒng)計(jì)過程的時(shí)間復(fù)雜度,進(jìn)而大大提高了運(yùn)行效率。

      【發(fā)明內(nèi)容】

      [0005]有鑒于此,本發(fā)明實(shí)施例的目的在于提供一種廣義后綴樹快速遍歷的方法及系統(tǒng),旨在解決現(xiàn)有技術(shù)中在采用廣度優(yōu)先遍歷的方法時(shí)調(diào)用遞歸統(tǒng)計(jì)會(huì)造成底層節(jié)點(diǎn)的多次訪問和底層堆棧負(fù)擔(dān)的加大,進(jìn)而影響運(yùn)行效率的問題。
      [0006]本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種廣義后綴樹快速遍歷的方法,包括:
      [0007]為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu);
      [0008]為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);
      [0009]利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0010]優(yōu)選的,所述第一屬性為循環(huán)鏈表,用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)、根節(jié)點(diǎn)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      [0011]優(yōu)選的,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      [0012]優(yōu)選的,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)、判斷區(qū)號(hào)以及索引集合,其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。
      [0013]優(yōu)選的,所述通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)的步驟具體包括:[0014]對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn);
      [0015]重復(fù)上述第一步里對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根節(jié)點(diǎn)。
      [0016]另一方面,本發(fā)明還提供一種廣義后綴樹快速遍歷的系統(tǒng),包括:
      [0017]第一更改模塊,用于為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu);
      [0018]第二更改模塊,用于為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);
      [0019]遍歷統(tǒng)計(jì)模塊,用于利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0020]優(yōu)選的,所述第一屬性為循環(huán)鏈表,用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)、根節(jié)點(diǎn)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      [0021]優(yōu)選的,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      [0022]優(yōu)選的,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)、判斷區(qū)號(hào)以及索引集合,其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。
      [0023]優(yōu)選的,所述遍歷統(tǒng)計(jì)模塊包括:
      [0024]遍歷調(diào)用子模塊,用于對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn);
      [0025]循環(huán)處理子模塊,用于重復(fù)上述第一步里對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根節(jié)點(diǎn)。
      [0026]在本發(fā)明實(shí)施例中,本發(fā)明提供的技術(shù)方案,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      【專利附圖】

      【附圖說明】
      [0027]圖1為本發(fā)明一實(shí)施方式中廣義后綴樹快速遍歷的方法流程圖;
      [0028]圖2為本發(fā)明一實(shí)施方式中新增屬性的新型數(shù)據(jù)結(jié)構(gòu)示例示意圖;
      [0029]圖3為本發(fā)明一實(shí)施方式中圖1的步驟S13的具體方法流程圖;
      [0030]圖4為本發(fā)明一實(shí)施方式中假設(shè)的廣義后綴樹的初始狀態(tài)圖;
      [0031]圖5為本發(fā)明一實(shí)施方式中假設(shè)的廣義后綴樹在完成第一次迭代后的狀態(tài)圖;
      [0032]圖6為本發(fā)明一實(shí)施方式中廣義后綴樹快速遍歷的系統(tǒng)的結(jié)構(gòu)示意圖;[0033]圖7為本發(fā)明一實(shí)施方式中圖6所示的遍歷統(tǒng)計(jì)模塊103的具體結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】
      [0034]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
      [0035]本發(fā)明【具體實(shí)施方式】提供了一種廣義后綴樹快速遍歷的方法,主要包括如下步驟:
      [0036]S11、為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu);
      [0037]S12、為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);
      [0038]S13、利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0039]本發(fā)明所提供的一種廣義后綴樹快速遍歷的方法,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      [0040]以下將對(duì)本發(fā)明所提供的一種廣義后綴樹快速遍歷的方法進(jìn)行詳細(xì)說明。
      [0041]請(qǐng)參閱圖1,為本發(fā)明一實(shí)施方式中廣義后綴樹快速遍歷的方法流程圖。
      [0042]在步驟Sll中,為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)。
      [0043]在本實(shí)施方式中,后綴樹是一種廣泛使用的數(shù)據(jù)結(jié)構(gòu),通常用于字符串的處理,能快速解決很多關(guān)于字符串的問題,當(dāng)同時(shí)用于多個(gè)字符串,即是說把給定的N個(gè)源字符串的所有的后綴建成一顆樹,這種數(shù)據(jù)結(jié)構(gòu)叫做廣義后綴樹。
      [0044]在本實(shí)施方式中,所述第一屬性為循環(huán)鏈表(List),用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)(Node)、根節(jié)點(diǎn)(Root)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      [0045]在本實(shí)施方式中,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)(LNode)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針(Next)以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      [0046]在本實(shí)施方式中,在建立廣義后綴樹過程里每次新增一個(gè)葉節(jié)點(diǎn),便將原始循環(huán)鏈表剪斷,然后將末尾節(jié)點(diǎn)的next指針指向代表新葉子的節(jié)點(diǎn)。
      [0047]在步驟S12中,為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。
      [0048]在本實(shí)施方式中,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)(Counting)、判斷區(qū)號(hào)(Num)以及索引集合(Set),其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。[0049]在本實(shí)施方式中,在傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上新增了第二屬性以形成新的廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),新增的第二屬性目的是便于保存每一個(gè)子樹的統(tǒng)計(jì)信息,從而避免了多層遞歸和底層的多次調(diào)用,進(jìn)而提高系統(tǒng)運(yùn)行的效率。在本實(shí)施方式中,圖2是這些新增屬性的新型數(shù)據(jù)結(jié)構(gòu)示例示意圖。
      [0050]請(qǐng)參閱圖2,為本發(fā)明一實(shí)施方式中新增屬性的新型數(shù)據(jù)結(jié)構(gòu)示例示意圖。
      [0051]在圖2中,“C”表示計(jì)數(shù)器計(jì)數(shù)Counting,“N”表示判斷區(qū)號(hào)N.,廣義后綴樹代表兩個(gè)字符串“BANANA”和“NA”,注意該圖2只是對(duì)于屬性的示例介紹而并不代表后續(xù)算法的具體狀態(tài)參數(shù)。
      [0052]請(qǐng)繼續(xù)參閱圖1,在步驟S13中,利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0053]在本實(shí)施方式中,所述通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)的步驟具體包括S131,如圖3所示。
      [0054]請(qǐng)參閱圖3,為本發(fā)明一實(shí)施方式中圖1的步驟S13的具體方法流程圖。
      [0055]在步驟S131中,對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn)。
      [0056]在本實(shí)施方式中,對(duì)每一個(gè)LNode的處理如下:
      [0057]如果LNode指向的節(jié)點(diǎn)為根節(jié)點(diǎn),則如果LNode的next指針也指向根節(jié)點(diǎn),則退出程序,以及如果LNode的next指針不是指向根節(jié)點(diǎn),則LNode的前趨next指針指向LNode.next ;
      [0058]如果LNode所指向的節(jié)點(diǎn)Node的判斷區(qū)Num大小等于Node, edges的個(gè)數(shù)即Node出發(fā)指向后代的邊的個(gè)數(shù)則分以下情況處理:1)如果LNode的父節(jié)點(diǎn)的判斷區(qū)等于0,則LNode的Set信息及其Counting信息加到其父節(jié)點(diǎn),其父節(jié)點(diǎn)的判斷區(qū)Num置為1,最后將父節(jié)點(diǎn)賦值到LNode (current.LNode=current.parent);2)如果LNode的父節(jié)點(diǎn)判斷區(qū)不等于O,則LNode的Set信息及其Counting信息加到其父節(jié)點(diǎn),其父節(jié)點(diǎn)的判斷區(qū)Num加上I,最后該LNode退休,即將LNode前趨的next指針指向LNode.next。
      [0059]在步驟S132中,重復(fù)上述第一步(即步驟S131)里對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根節(jié)點(diǎn)。
      [0060]在本實(shí)施方式中,在步驟S131與步驟S132的基礎(chǔ)上直接進(jìn)行遍歷便可知道每個(gè)子串重復(fù)了多少次,且在哪些位置重復(fù)出現(xiàn),由于這個(gè)遍歷過程無需再調(diào)用遞歸方法,時(shí)間復(fù)雜度也就降低到線性復(fù)雜度,也避免了程序溢出。
      [0061]舉例來說明,假如廣義后綴樹的初始狀態(tài)圖如圖4所示。
      [0062]請(qǐng)參閱圖4,為本發(fā)明一實(shí)施方式中假設(shè)的廣義后綴樹的初始狀態(tài)圖。在本實(shí)施方式中,當(dāng)完成第一次迭代,即將循環(huán)鏈表每個(gè)節(jié)點(diǎn)遍歷過一次后狀態(tài)變?yōu)閳D5所示,余下部分按照本部分給出的方法介紹依次類推。
      [0063]請(qǐng)參閱圖5,為本發(fā)明一實(shí)施方式中假設(shè)的廣義后綴樹在完成第一次迭代后的狀態(tài)圖。
      [0064]本發(fā)明所提供的一種廣義后綴樹快速遍歷的方法,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      [0065]本發(fā)明【具體實(shí)施方式】還提供一種廣義后綴樹快速遍歷的系統(tǒng)10,主要包括:
      [0066]第一更改模塊101,用于為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu);
      [0067]第二更改模塊102,用于為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);
      [0068]遍歷統(tǒng)計(jì)模塊103,用于利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0069]本發(fā)明所提供的一種廣義后綴樹快速遍歷的系統(tǒng)10,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      [0070]以下將對(duì)本發(fā)明所提供的一種廣義后綴樹快速遍歷的系統(tǒng)10進(jìn)行詳細(xì)說明。
      [0071]請(qǐng)參閱圖6,所示為本發(fā)明一實(shí)施方式中廣義后綴樹快速遍歷的系統(tǒng)10的結(jié)構(gòu)示意圖。在本實(shí)施方式中,廣義后綴樹快速遍歷的系統(tǒng)10包括第一更改模塊101、第二更改模塊102以及遍歷統(tǒng)計(jì)模塊103。
      [0072]第一更改模塊101,用于為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)。
      [0073]在本實(shí)施方式中,后綴樹是一種廣泛使用的數(shù)據(jù)結(jié)構(gòu),通常用于字符串的處理,能快速解決很多關(guān)于字符串的問題,當(dāng)同時(shí)用于多個(gè)字符串,即是說把給定的N個(gè)源字符串的所有的后綴建成一顆樹,這種數(shù)據(jù)結(jié)構(gòu)叫做廣義后綴樹。
      [0074]在本實(shí)施方式中,所述第一屬性為循環(huán)鏈表(List),用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)(Node)、根節(jié)點(diǎn)(Root)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      [0075]在本實(shí)施方式中,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)(LNode)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針(Next)以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      [0076]在本實(shí)施方式中,在建立廣義后綴樹過程里每次新增一個(gè)葉節(jié)點(diǎn),便將原始循環(huán)鏈表剪斷,然后將末尾節(jié)點(diǎn)的next指針指向代表新葉子的節(jié)點(diǎn)。
      [0077]第二更改模塊102,用于為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。
      [0078]在本實(shí)施方式中,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)(Counting)、判斷區(qū)號(hào)(Num)以及索引集合(Set),其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。
      [0079]在本實(shí)施方式中,在傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上新增了第二屬性以形成新的廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),新增的第二屬性目的是便于保存每一個(gè)子樹的統(tǒng)計(jì)信息,從而避免了多層遞歸和底層的多次調(diào)用,進(jìn)而提高系統(tǒng)運(yùn)行的效率。
      [0080]遍歷統(tǒng)計(jì)模塊103,用于利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      [0081]在本實(shí)施方式中,遍歷統(tǒng)計(jì)模塊103具體包括遍歷調(diào)用子模塊1031以及循環(huán)處理子模塊1032,如圖7所示。
      [0082]請(qǐng)參閱圖7,所示為本發(fā)明一實(shí)施方式中圖6所示的遍歷統(tǒng)計(jì)模塊103的具體結(jié)構(gòu)示意圖。
      [0083]遍歷調(diào)用子模塊1031,用于對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn)。
      [0084]在本實(shí)施方式中,對(duì)每一個(gè)LNode的處理如下:
      [0085]如果LNode指向的節(jié)點(diǎn)為根節(jié)點(diǎn),則如果LNode的next指針也指向根節(jié)點(diǎn),則退出程序,以及如果LNode的next指針不是指向根節(jié)點(diǎn),則LNode的前趨next指針指向LNode.next ;
      [0086]如果LNode所指向的節(jié)點(diǎn)Node的判斷區(qū)Num大小等于Node, edges的個(gè)數(shù)即Node出發(fā)指向后代的邊的個(gè)數(shù)則分以下情況處理:1)如果LNode的父節(jié)點(diǎn)的判斷區(qū)等于0,則LNode的Set信息及其Counting信息加到其父節(jié)點(diǎn),其父節(jié)點(diǎn)的判斷區(qū)Num置為1,最后將父節(jié)點(diǎn)賦值到LNode (current.LNode=current.parent);2)如果LNode的父節(jié)點(diǎn)判斷區(qū)不等于O,則LNode的Set信息及其Counting信息加到其父節(jié)點(diǎn),其父節(jié)點(diǎn)的判斷區(qū)Num加上I,最后該LNode退休,即將LNode前趨的next指針指向LNode.next。
      [0087]循環(huán)處理子模塊1032,用于重復(fù)上述遍歷調(diào)用子模塊1031對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根節(jié)點(diǎn)。
      [0088]在本實(shí)施方式中,在經(jīng)過遍歷調(diào)用子模塊1031以及循環(huán)處理子模塊1032處理的基礎(chǔ)上直接進(jìn)行遍歷便可知道每個(gè)子串重復(fù)了多少次,且在哪些位置重復(fù)出現(xiàn),由于這個(gè)遍歷過程無需再調(diào)用遞歸方法,時(shí)間復(fù)雜度也就降低到線性復(fù)雜度,也避免了程序溢出。
      [0089]本發(fā)明所提供的一種廣義后綴樹快速遍歷的系統(tǒng)10,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      [0090]在本發(fā)明實(shí)施例中,本發(fā)明提供的技術(shù)方案,通過更改廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),提出了一種自下而上的高效快速遍歷統(tǒng)計(jì)方法,使得在遍歷統(tǒng)計(jì)的過程中時(shí)間復(fù)雜度大大降低,而且不需要調(diào)用遞歸統(tǒng)計(jì),極大的降低了計(jì)算機(jī)硬件負(fù)擔(dān),避免了程序堆棧溢出,進(jìn)而大大提高了運(yùn)行效率。
      [0091]值得注意的是,上述實(shí)施例中,所包括的各個(gè)單元只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。
      [0092]另外,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述各實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,相應(yīng)的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤或光盤等。
      [0093]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
      【權(quán)利要求】
      1.一種廣義后綴樹快速遍歷的方法,其特征在于,所述方法包括: 為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu); 為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu); 利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      2.如權(quán)利要求1所述的廣義后綴樹快速遍歷的方法,其特征在于,所述第一屬性為循環(huán)鏈表,用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)、根節(jié)點(diǎn)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      3.如權(quán)利要求2所述的廣義后綴樹快速遍歷的方法,其特征在于,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      4.如權(quán)利要求3所述的廣義后綴樹快速遍歷的方法,其特征在于,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)、判斷區(qū)號(hào)以及索引集合,其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。
      5.如權(quán)利要求4所述的廣義后綴樹快速遍歷的方法,其特征在于,所述通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)的步驟具體包括: 對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn); 重復(fù)上述第一步里對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根節(jié)點(diǎn)。
      6.一種廣義后綴樹快速遍歷的系統(tǒng),其特征在于,所述系統(tǒng)包括: 第一更改模塊,用于為廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)添加第一屬性,以更改所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu); 第二更改模塊,用于為廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)添加第二屬性,以更改所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu); 遍歷統(tǒng)計(jì)模塊,用于利用更改后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)以及更改后的所述廣義后綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),通過自下而上的方式對(duì)廣義后綴樹的節(jié)點(diǎn)信息進(jìn)行遍歷統(tǒng)計(jì)。
      7.如權(quán)利要求6所述的廣義后綴樹快速遍歷的系統(tǒng),其特征在于,所述第一屬性為循環(huán)鏈表,用于表示廣義后綴樹葉子的信息,其中,更后的所述廣義后綴樹的數(shù)據(jù)結(jié)構(gòu)的屬性包括類型、內(nèi)容、樹里節(jié)點(diǎn)、根節(jié)點(diǎn)、所述循環(huán)鏈表以及所有葉子循環(huán)鏈表。
      8.如權(quán)利要求7所述的廣義后綴樹快速遍歷的系統(tǒng),其特征在于,所述循環(huán)鏈表中的每一個(gè)節(jié)點(diǎn)的屬性包括類型、內(nèi)容、循環(huán)鏈表里的節(jié)點(diǎn)、樹里的一個(gè)葉節(jié)點(diǎn)的引用、指針以及指針指向鏈表里的下一個(gè)節(jié)點(diǎn)。
      9.如權(quán)利要求8所述的廣義后綴樹快速遍歷的系統(tǒng),其特征在于,所述第二屬性包括計(jì)數(shù)器計(jì)數(shù)、判斷區(qū)號(hào)以及索引集合,其中,所述計(jì)數(shù)器計(jì)數(shù)用于計(jì)算對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的索引數(shù)量之和,所述判斷區(qū)號(hào)用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里已經(jīng)完成統(tǒng)計(jì)遍歷的個(gè)數(shù),所述索引集合用于表示對(duì)應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)里的所有葉子的索引的集合。
      10.如權(quán)利要求9所述的廣義后綴樹快速遍歷的系統(tǒng),其特征在于,所述遍歷統(tǒng)計(jì)模塊包括: 遍歷調(diào)用子模塊,用于對(duì)于所述所有葉子循環(huán)鏈表,設(shè)LNode代表鏈表里的每一個(gè)節(jié)點(diǎn),對(duì)于每一個(gè)LNode依次遍歷,遍歷完一個(gè)節(jié)點(diǎn)后調(diào)用next指針遍歷對(duì)應(yīng)的下一個(gè)節(jié)占.循環(huán)處理子模塊,用于重復(fù)上述第一步里對(duì)每一個(gè)節(jié)點(diǎn)的處理,直到循環(huán)鏈表里只有一個(gè)節(jié)點(diǎn)且其LNode為根 節(jié)點(diǎn)。
      【文檔編號(hào)】G06F17/30GK103699593SQ201310674975
      【公開日】2014年4月2日 申請(qǐng)日期:2013年12月11日 優(yōu)先權(quán)日:2013年12月11日
      【發(fā)明者】黃鑫, 羅軍 申請(qǐng)人:中國(guó)科學(xué)院深圳先進(jìn)技術(shù)研究院
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1