亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

Trie樹_字典樹(字符串排序)簡介及實現
來源:易賢網 閱讀:1332 次 日期:2014-08-11 15:37:01
溫馨提示:易賢網小編為您整理了“Trie樹_字典樹(字符串排序)簡介及實現”,方便廣大網友查閱!

1.綜述

又稱單詞查找樹,Trie樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計,排序和保存大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。

它的優點是:利用字符串的公共前綴來節約存儲空間,最大限度地減少無謂的字符串比較,查詢效率比哈希表高。

Trie樹結構的優點在于:

1) 不限制子節點的數量;

2) 自定義的輸入序列化,突破了具體語言、應用的限制,成為一個通用的框架;

3) 可以進行最大Tokens序列長度的限制;

4) 根據已定閾值輸出重復的字符串;

5) 提供單個字符串頻度查找功能;

6) 速度快,在兩分鐘內完成1998年1月份人民日報(19056行)的重復字符串抽取工作。

2.性質

它有3個基本性質:

1)     根節點不包含字符,除根節點外每一個節點都只包含一個字符。

2)     從根節點到某一節點,路徑上經過的字符連接起來,為該節點對應的字符串。

3)     每個節點的所有子節點包含的字符都不相同。

3.基本操作

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

4.實現方法

搜索字典項目的方法為:

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

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

  (3) 在相應的子樹上,取得要查找關鍵詞的第二個字母,并進一步選擇對應的子樹進行檢索。

  (4) 迭代過程……

(5) 在某個結點處,關鍵詞的所有字母已被取出,則讀取附在該結點上的信息,即完成查找。

其他操作類似處理

5. Trie原理——Trie的核心思想是空間換時間。利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。

6.代碼實現

代碼如下:

const int branchNum = 26; //聲明常量

int i;

struct Trie_node

{

       boolisStr;                //記錄此處是否構成一個串。

       Trie_node*next[branchNum];//指向各個子樹的指針,下標0-25代表26字符

       Trie_node():isStr(false)

       {

              memset(next,NULL,sizeof(next));

       }

};

class Trie

{

 public:

     Trie();

     voidinsert(const char* word);

     boolsearch(char* word);

     voiddeleteTrie(Trie_node *root);

       // voidprintTrie(Trie_node *root);   //new add

private:

    Trie_node* root;

 };

Trie::Trie()

{

     root =new Trie_node();

}

void Trie::insert(const char* word)

 {

    Trie_node*location = root;

   while(*word)

     {

       if(location->next[*word-'a'] == NULL)//不存在則建立

         {

           Trie_node *tmp = new Trie_node();

           location->next[*word-'a'] = tmp;

        }  

       location = location->next[*word-'a']; //每插入一步,相當于有一個新串經過,指針要向下移動

       word++;

    }

   location->isStr = true; //到達尾部,標記一個串

 }

bool Trie::search(char *word)

{

       Trie_node*location = root;

       while(*word&& location)

       {

              location= location->next[*word-'a'];

              word++;

       }

       return(location!=NULL && location->isStr);

 }

void Trie::deleteTrie(Trie_node *root)

{

       for(i =0; i < branchNum; i++)

       {

              if(root->next[i]!= NULL)

              {

                     deleteTrie(root->next[i]);

              }

       }

       deleteroot;

}

void main() //簡單測試

{

       Trie t;

       t.insert("a");       

       t.insert("abandon");

       char * c= "abandoned";

       t.insert(c);

       t.insert("abashed");

       if(t.search("abashed"))

       {

          printf("true\n");  //已經插入了

       }

}

有時,我們會碰到對字符串的排序,若采用一些經典的排序算法,則時間復雜度一般為O(n*lgn),但若采用Trie樹,則時間復雜度僅為O(n)。

Trie樹又名字典樹,從字面意思即可理解,這種樹的結構像英文字典一樣,相鄰的單詞一般前綴相同,之所以時間復雜度低,是因為其采用了以空間換取時間的策略。

下圖為一個針對字符串排序的Trie樹(我們假設在這里字符串都是小寫字母),每個結點有26個分支,每個分支代表一個字母,結點存放的是從root節點到達此結點的路經上的字符組成的字符串。

將每個字符串插入到trie樹中,到達特定的結尾節點時,在這個節點上進行標記,如插入"afb",第一個字母為a,沿著a往下,然后第二個字母為f,沿著f往下,第三個為b,沿著b往下,由于字符串最后一個字符為'\0',因而結束,不再往下了,然后在這個節點上標記afb.count++,即其個數增加1.

之后,通過前序遍歷此樹,即可得到字符串從小到大的順序。

圖片一

實現代碼如下(g++、VC++都編譯通過):

代碼如下:

#include <iostream>

#include <string.h>

using namespace std;

#define NUM 26

class Node

{

public:

    int count; //記錄該處字符串個數

    Node* char_arr[NUM];  //分支

    char* current_str;   //記錄到達此處的路徑上的所有字母組成的字符串

    Node();

};

class Trie

{

public:

    Node* root;

    Trie();

    void insert(char* str);

    void output(Node* &node, char** str, int& count);

};

//程序未考慮delete動態內存

int main()

{

    char** str = new char*[12];

    str[0] = "zbdfasd";

    str[1] = "zbcfd";

    str[2] = "zbcdfdasfasf";

    str[3] = "abcdaf";

    str[4] = "defdasfa";

    str[5] = "fedfasfd";

    str[6] = "dfdfsa";

    str[7] = "dadfd";

    str[8] = "dfdfasf";

    str[9] = "abcfdfa";

    str[10] = "fbcdfd";

    str[11] = "abcdaf";

    //建立trie樹

    Trie* trie = new Trie();

    for(int i = 0; i < 12; i++)

        trie->insert(str[i]);

    int count = 0;

    trie->output(trie->root, str, count);

    for(int i = 0; i < 12; i++)

        cout<<str[i]<<endl;

    return 0;

}

Node::Node()

{

    count = 0;

    for(int i = 0; i < NUM; i++)

        char_arr[i] = NULL;

    current_str = new char[100];

    current_str[0] = '\0';

}

Trie::Trie()

{

    root = new Node();

}

void Trie::insert(char* str)

{

    int i = 0;

    Node* parent = root;

    //將str[i]插入到trie樹中

    while(str[i] != '\0')

    {

        //如果包含str[i]的分支存在,則新建此分支

        if(parent->char_arr[str[i] - 'a'] == NULL)

        {

            parent->char_arr[str[i] - 'a'] = new Node();

            //將父節點中的字符串添加到當前節點的字符串中

            strcat(parent->char_arr[str[i] - 'a']->current_str, parent->current_str);

            char str_tmp[2];

            str_tmp[0] = str[i];

            str_tmp[1] = '\0';

            //將str[i]添加到當前節點的字符串中

            strcat(parent->char_arr[str[i] - 'a']->current_str, str_tmp);

            parent = parent->char_arr[str[i] - 'a'];

        }

        else

        {

            parent = parent->char_arr[str[i] - 'a'];

        }

        i++;

    }

    parent->count++;

}

//采用前序遍歷

void Trie::output(Node* &node, char** str, int& count)

{

    if(node != NULL)

    {

        if(node->count != 0)

        {

            for(int i = 0; i < node->count; i++)

                str[count++] = node->current_str;

        }

        for(int i = 0; i < NUM; i++)

        {

            output(node->char_arr[i], str, count);

        }

    }

}

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
国产综合精品| 一区二区三区国产在线| 亚洲精品视频啊美女在线直播| 亚洲欧美在线网| 亚洲黑丝一区二区| 久久高清一区| 亚洲高清视频在线观看| 男女av一区三区二区色多| 久久综合精品一区| 亚洲第一黄色| 欧美1区3d| 日韩午夜激情| 欧美黄色aaaa| 国产农村妇女毛片精品久久莱园子| 亚洲欧美久久久| 欧美高清不卡| 国产乱码精品| 亚洲人成久久| 国自产拍偷拍福利精品免费一| 国产亚洲欧美另类一区二区三区| 欧美日韩网址| 欧美一区1区三区3区公司| 在线免费观看欧美| 欧美日韩国产高清视频| 久久av在线| 国产日韩欧美一区二区| 亚洲激情国产| 亚洲电影成人| 亚洲视频碰碰| 国内外成人免费视频| 欧美成人综合一区| 久久综合导航| 午夜日韩电影| 欧美日韩喷水| 欧美xxx在线观看| 老鸭窝毛片一区二区三区| 在线天堂一区av电影| 亚洲激情av| 伊人激情综合| 亚洲高清资源| 亚洲激情黄色| 国产欧美亚洲一区| 国产美女诱惑一区二区| 亚洲一区二区三区欧美| 国产乱码精品| 久久久久久黄| 欧美日韩国产综合网| 欧美日韩成人| 在线日韩欧美| 国产视频一区免费看| 99热精品在线| 亚洲欧美成人| 欧美精品91| 极品中文字幕一区| 亚洲精品无人区| 亚洲一区激情| 午夜精品电影| 亚洲精品乱码视频| 香蕉久久夜色精品国产| 欧美国产91| 在线看片成人| 亚洲制服av| 国产精品mm| 99在线精品视频在线观看| 国产精品视区| 欧美日本久久| 国产欧美不卡| 久久狠狠久久综合桃花| 欧美精品v日韩精品v国产精品| 国产真实久久| 在线亚洲观看| 欧美一区二区三区在线播放| 亚洲性图久久| 国产精品一级久久久| 欧美伊人久久| 亚洲国产网站| 久久人人精品| 亚洲国产婷婷| 久久免费高清| 亚洲精品社区| 欧美日韩精品免费看| 99综合在线| 欧美私人啪啪vps| 国产伦精品一区二区三区四区免费| 欧美777四色影| 一区二区毛片| 精品91视频| 老妇喷水一区二区三区| 国产日韩综合| 在线观看成人av电影| 久久精品主播| 国产亚洲高清视频| 136国产福利精品导航网址| 久久一区二区三区av| 国产日韩欧美高清免费| 在线观看一区欧美| 欧美日韩精品一区| 久久一区免费| 欧美综合国产| 国产精品欧美久久| 99xxxx成人网| 日韩午夜激情| 亚洲成人直播| 伊人久久av导航| 国产精品s色| 午夜精品美女久久久久av福利| 国产精品一区二区三区四区五区| 亚洲成色精品| 在线观看成人av电影| 欧美精选一区| 久久综合伊人| 久热综合在线亚洲精品| 午夜亚洲福利在线老司机| 在线视频精品一区| 一区二区冒白浆视频| 99精品国产高清一区二区| 在线成人www免费观看视频| 亚洲调教视频在线观看| 国产综合精品一区| 亚洲午夜精品福利| 亚洲高清在线| 99国产精品视频免费观看一公开| 亚洲高清在线播放| 亚洲理伦在线| 亚洲一区二区三区在线观看视频| 国产视频在线观看一区| 亚洲一区网站| 狼狼综合久久久久综合网| 快she精品国产999| 欧美日韩蜜桃| 亚洲欧洲日本mm| 亚洲色诱最新| 久久精品日产第一区二区| 午夜欧美精品久久久久久久| 欧美日韩国产综合网| 亚洲午夜精品久久| av成人黄色| 美女精品网站| 国内揄拍国内精品久久| 亚洲国产免费看| 国产伦精品一区二区| 久久久久久久尹人综合网亚洲| 久久伊人一区二区| 亚洲国内精品| 久久精品主播| 99riav国产精品| 久久亚洲国产精品一区二区| 海角社区69精品视频| 在线综合视频| 欧美日韩国产高清| 亚洲深夜福利| 国产精品av久久久久久麻豆网| 亚洲国产午夜| 久久亚裔精品欧美| 亚洲精品一级| 欧美久久99| 亚洲一区日韩在线| 伊人久久婷婷色综合98网| 欧美亚洲专区| 亚洲高清在线播放| 午夜精品亚洲| 久久都是精品| 一区二区精品在线观看| 欧美午夜欧美| 久久激情婷婷| 国产精品欧美久久| 精品成人在线| 欧美久久电影| 久久精品国产第一区二区三区最新章节 | 亚洲黄页一区| 久久在线91| 国产一区二区三区高清| 国内一区二区在线视频观看| 美女诱惑一区| 亚洲免费影院| 亚洲一区免费| 亚洲一区精品视频| 国产亚洲精品久久飘花| 亚洲开发第一视频在线播放| 国产专区一区| 国产一区二区三区四区三区四| 久久国产免费| 美女精品在线| 久久精品主播| 久久久久九九九| 女人香蕉久久**毛片精品| 久久国产日本精品| 久久亚洲电影| 久久综合亚州| 欧美激情一区二区三区在线视频| 欧美一区二区三区在线免费观看| 久久久久久久久久久久久久一区| 国产精品丝袜xxxxxxx| 国产亚洲精品久久飘花| 亚洲一区日韩| 老司机精品久久| 欧美婷婷久久| 99精品视频网| 噜噜噜在线观看免费视频日韩| 性感少妇一区| 欧美搞黄网站| 亚洲国产影院| 性刺激综合网| 国产精品hd| 亚洲精品影视| 久久av二区| 国产在线欧美日韩| 一本不卡影院| 久久精品一本| 伊人影院久久| 亚洲一区精彩视频| 欧美精品一区二区三区在线看午夜| 欧美视频四区| 国产欧美二区| 欧美激情四色| 中文亚洲免费| 欧美三级在线| 国产伦精品一区二区三区照片91 | 一本色道久久综合亚洲精品不 | 亚洲图片在线| 一本色道久久综合亚洲精品高清| 亚洲一区在线直播| 欧美午夜免费| 亚洲一区二区三区高清| 欧美日本韩国在线| 亚洲深夜av| 欧美日韩三区| 亚洲在线网站| 亚洲视频在线二区| 亚洲女人av| 国产精品v欧美精品v日韩精品 | 国产综合欧美| 亚洲最黄网站| 欧美va天堂在线| 亚洲精品孕妇| 欧美日韩免费高清| 国产一区二区高清不卡| 欧美日韩一区二区视频在线观看| 中文亚洲字幕| 亚洲性图久久| 久久久xxx| 亚洲日本成人| 黑人一区二区三区四区五区| 麻豆精品视频| 一区二区精品在线观看| 欧美日韩精品久久| 牛牛国产精品| 久久久久久夜| 国产精品久久亚洲7777| 亚洲午夜av| 欧美私人啪啪vps| 亚洲一区二区三区精品视频 | 欧美视频二区| 欧美一区二区三区四区夜夜大片| 99在线精品视频在线观看| 国产精品a久久久久| 女人香蕉久久**毛片精品| 亚洲欧美日韩在线观看a三区| 亚洲经典自拍| 亚洲天堂黄色| 极品少妇一区二区三区| 欧美欧美全黄| 午夜视频一区| 欧美激情日韩| 欧美成人国产| 欧美一区1区三区3区公司 | 欧美在线视屏| 久久久999| 蜜桃久久av| 久久精品主播| 欧美国产高清| 亚洲精品乱码| 国产精品激情电影| 亚洲影院在线| 国产精品久久久久毛片大屁完整版 | 欧美精品97| 午夜国产精品视频| 久久久噜噜噜| 欧美激情偷拍| 欧美三级第一页| 好吊视频一区二区三区四区| 欧美日韩精品不卡| 亚洲视频福利| 一区二区三区四区五区精品| 夜夜嗨一区二区三区| 国产精品试看| 欧美伊人久久| 激情偷拍久久| 日韩午夜激情| 久久久777| 亚洲视频一二| 在线天堂一区av电影| 欧美中日韩免费视频| 欧美破处大片在线视频| 亚洲高清不卡| 先锋亚洲精品| 黄色亚洲在线| 国产精品资源| 欧美三级视频| 国产精品日本一区二区| 亚洲欧美在线网| 99国产精品久久久久久久成人热| 国产日韩高清一区二区三区在线| 久久精品观看| 亚洲国产专区校园欧美| 免费看的黄色欧美网站| 国产综合网站| 翔田千里一区二区| 黄色在线成人| 香蕉久久夜色精品| 亚洲视屏一区| 免费在线日韩av| 最新亚洲一区| 欧美日韩一区二区三区在线视频| 在线视频精品一区| 国产精品jizz在线观看美国| 国产伦精品一区二区三区| 国产主播一区二区三区四区| 午夜亚洲影视| 精品二区久久| 欧美久久在线| 新67194成人永久网站| 亚洲黄色精品| 韩日成人av| 午夜激情一区| 久久久福利视频| 亚洲一区免费| 一区二区精品国产| 亚洲黄色天堂| 伊人久久久大香线蕉综合直播| 久久久久久穴| 噜噜噜躁狠狠躁狠狠精品视频| av成人国产| 亚洲激情成人| 国产伊人精品| 午夜精品剧场| 久久久久在线| 亚洲在线免费| 香蕉久久久久久久av网站| 国产一区二区高清不卡| 亚洲精品一区二区三区蜜桃久| 国产尤物精品| 欧美网站在线| 国产精品v欧美精品v日本精品动漫| 另类亚洲自拍| 久久国产精品免费一区| 国产精品一区二区欧美| 国产精品免费区二区三区观看| aa亚洲婷婷| 国产精品美女黄网| 亚洲综合社区| 老司机一区二区三区| 免费看的黄色欧美网站| 久久xxxx| 欧美一区1区三区3区公司 | 欧美一区成人| 米奇777在线欧美播放| 噜噜噜噜噜久久久久久91| 麻豆精品网站| 久久综合一区二区三区| 欧美日韩高清免费| 国产精品xvideos88| 亚洲夜间福利| 99香蕉国产精品偷在线观看 | 久久久久一区二区三区| 久久久人人人| 欧美日韩亚洲一区| 亚洲国产日韩欧美一区二区三区| 亚洲大胆视频| 国产伦精品一区| 欧美高清一区二区| 韩国久久久久| 中文精品一区二区三区| 免费在线一区二区| 国产精品v亚洲精品v日韩精品| 亚洲国产专区| 久久综合网络一区二区| 在线国产日韩| 六月丁香综合| 红桃视频欧美| 美女尤物久久精品| 在线精品亚洲一区二区| 久久高清国产| 在线视频国内自拍亚洲视频| 国产精品久久久免费 | 日韩图片一区| 亚洲在线播放| 亚洲天堂黄色| 午夜在线一区| 国产综合欧美| 先锋亚洲精品| 亚洲国产激情| 欧美激情偷拍| 亚洲一区网站| 在线播放亚洲| 欧美 日韩 国产精品免费观看| 中文高清一区| 在线成人亚洲| 欧美成人首页| 媚黑女一区二区|