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

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

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

            搜索字典項目的方法為:

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

            (2) 取得要查找關鍵詞的第一個字母,并根據該字母選擇對應的子樹并轉到該子樹繼續(xù)進行檢索;

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

             

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

            #include
            <algorithm>
            #include
            <iostream>
            using namespace std;

            const int sonnum=26,base='a';
            struct Trie
            {
                
            int num;//to remember how many word can reach here,that is to say,prefix
                bool terminal;//If terminal==true ,the current point has no following point
                struct Trie *son[sonnum];//the following point
            }
            ;
            Trie 
            *NewTrie()// create a new node
            {
                Trie 
            *temp=new Trie;
                temp
            ->num=1;temp->terminal=false;
                
            for(int i=0;i<sonnum;++i)temp->son[i]=NULL;
                
            return temp;
            }

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

                temp
            ->terminal=true;
            }

            void Delete(Trie *pnt)// delete the whole tree
            {
                
            if(pnt!=NULL)
                
            {
                    
            for(int i=0;i<sonnum;++i)if(pnt->son[i]!=NULL)Delete(pnt->son[i]);
                    delete pnt; 
                    pnt
            =NULL;
                }

            }

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


            轉自:http://hi.baidu.com/luyade1987/blog/item/2667811631106657f2de320a.html
            posted on 2010-01-28 17:07 chatler 閱讀(566) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品免费看久久久| 色婷婷综合久久久中文字幕 | 亚州日韩精品专区久久久| 亚洲欧美精品伊人久久| 久久播电影网| 日日噜噜夜夜狠狠久久丁香五月| 久久久久久亚洲精品成人| 久久国产影院| 精品国产一区二区三区久久蜜臀| 日本欧美国产精品第一页久久| 久久综合狠狠综合久久综合88 | 大蕉久久伊人中文字幕| 国产精品99久久久精品无码 | 99久久超碰中文字幕伊人| 久久久久久久综合日本| 996久久国产精品线观看| 女人高潮久久久叫人喷水| 99精品伊人久久久大香线蕉| 久久无码国产专区精品| 久久久国产精品| 久久青青草原国产精品免费| 亚洲成色WWW久久网站| 日本精品久久久久影院日本 | 精品国产一区二区三区久久蜜臀| 亚洲中文字幕久久精品无码喷水 | 久久国产精品久久精品国产| 伊人久久大香线蕉AV色婷婷色 | 久久免费的精品国产V∧| 亚洲综合久久久| 久久久久综合国产欧美一区二区| 日本免费久久久久久久网站| 国产精品九九九久久九九| 伊人久久大香线蕉av不卡 | 国产精品久久久久影院色| 色婷婷久久综合中文久久蜜桃av| 精品久久久无码人妻中文字幕| 要久久爱在线免费观看| 欧美亚洲国产精品久久| 99久久国产宗和精品1上映| 国产美女亚洲精品久久久综合| 久久亚洲AV成人无码软件|