• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            A Za, A Za, Fighting...

            堅信:勤能補拙

            [zz] Trie樹|字典樹的簡介及實現


            Trie,又稱字典樹、單詞查找樹,是一種樹形結構,用于保存大量的字符串。它的優點是:利用字符串的公共前綴來節約存儲空間。
            相對來說,Trie樹是一種比較簡單的數據結構.理解起來比較簡單,正所謂簡單的東西也得付出代價.故Trie樹也有它的缺點,Trie樹的內存消耗非常大.當然,或許用左兒子右兄弟的方法建樹的話,可能會好點.

            其基本性質可以歸納為:
            1. 根節點不包含字符,除根節點外每一個節點都只包含一個字符。
            2. 從根節點到某一節點,路徑上經過的字符連接起來,為該節點對應的字符串。
            3. 每個節點的所有子節點包含的字符都不相同。

            其基本操作有:查找 插入和刪除,當然刪除操作比較少見.我在這里只是實現了對整個樹的刪除操作,至于單個word的刪除操作也很簡單.

            搜索字典項目的方法為:

            (1) 從根結點開始一次搜索;

            (2) 取得要查找關鍵詞的第一個字母,并根據該字母選擇對應的子樹并轉到該子樹繼續進行檢索;
            (3) 在相應的子樹上,取得要查找關鍵詞的第二個字母,并進一步選擇對應的子樹進行檢索。
            (4) 迭代過程……
            (5) 在某個結點處,關鍵詞的所有字母已被取出,則讀取附在該結點上的信息,即完成查找。
            其他操作類似處理.



             1/*
             2Name: Trie樹的基本實現 
             3Author: MaiK 
             4Description: Trie樹的基本實現 ,包括查找 插入和刪除操作*/

             5#include<algorithm>
             6#include<iostream>
             7using namespace std;
             8
             9const int sonnum=26,base='a';
            10struct Trie
            11{
            12    int num;//to remember how many word can reach here,that is to say,prefix
            13    bool terminal;//If terminal==true ,the current point has no following point
            14    struct Trie *son[sonnum];//the following point
            15}
            ;
            16Trie *NewTrie()// create a new node
            17{
            18    Trie *temp=new Trie;
            19    temp->num=1;temp->terminal=false;
            20    for(int i=0;i<sonnum;++i)temp->son[i]=NULL;
            21    return temp;
            22}

            23void Insert(Trie *pnt,char *s,int len)// insert a new word to Trie tree
            24{
            25    Trie *temp=pnt;
            26    for(int i=0;i<len;++i)
            27    {
            28        if(temp->son[s[i]-base]==NULL)temp->son[s[i]-base]=NewTrie();
            29        else temp->son[s[i]-base]->num++;
            30        temp=temp->son[s[i]-base];
            31    }

            32    temp->terminal=true;
            33}

            34void Delete(Trie *pnt)// delete the whole tree
            35{
            36    if(pnt!=NULL)
            37    {
            38        for(int i=0;i<sonnum;++i)if(pnt->son[i]!=NULL)Delete(pnt->son[i]);
            39        delete pnt; 
            40        pnt=NULL;
            41    }

            42}

            43Trie* Find(Trie *pnt,char *s,int len)//trie to find the current word
            44{
            45    Trie *temp=pnt;
            46    for(int i=0;i<len;++i)
            47        if(temp->son[s[i]-base]!=NULL)temp=temp->son[s[i]-base];
            48        else return NULL;
            49    return temp;
            50}
             

            posted on 2010-11-01 15:28 simplyzhao 閱讀(222) 評論(0)  編輯 收藏 引用 所屬分類: G_其他

            導航

            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品99久久免费观看| 色婷婷久久久SWAG精品| 久久久久亚洲精品无码蜜桃 | 亚洲国产精品无码成人片久久| 狠狠色狠狠色综合久久| 亚洲国产精品高清久久久| 久久青青草原亚洲av无码app| a高清免费毛片久久| 国产AV影片久久久久久| 久久精品国产亚洲av麻豆蜜芽| av无码久久久久久不卡网站| 欧美精品福利视频一区二区三区久久久精品 | 久久99这里只有精品国产| 香蕉久久夜色精品升级完成| 色综合合久久天天综合绕视看| 久久精品中文字幕大胸| 久久久91人妻无码精品蜜桃HD| 久久综合亚洲色HEZYO社区 | 亚洲国产精品狼友中文久久久| 99国产欧美精品久久久蜜芽 | 国产精品女同久久久久电影院| 18禁黄久久久AAA片| 久久国产热这里只有精品| 国产精品久久99| 波多野结衣中文字幕久久| 久久久久久久女国产乱让韩| 亚洲国产精品狼友中文久久久| 狠狠色伊人久久精品综合网 | 婷婷久久香蕉五月综合加勒比| 久久综合视频网| 青草国产精品久久久久久| 久久99国产精品尤物| 久久久久久亚洲精品不卡| 久久99九九国产免费看小说| 亚洲综合伊人久久综合| 久久国产色AV免费观看| 精品久久人人爽天天玩人人妻| 综合久久给合久久狠狠狠97色| 性欧美大战久久久久久久久| 国产亚洲精品自在久久| 亚洲AV伊人久久青青草原|