Trie數的Python實現代碼

來源:互聯網
上載者:User

關於Trie樹的原理這裡不做介紹,網上相關的資料非常多,可以參考July的文章:http://blog.csdn.net/v_july_v/article/details/6897097。不過Trie確實是非常的強大,原理不複雜,使用起來也非常的方便。代碼實現其實也不難,如果用C++實現的話需要自己定義資料結構(結構體)來構建樹,這裡我介紹怎樣用Python實現,用Python實現起來尤為的方便,不用自己定義資料結構,用Python的dictionary類型即可。說一句題外話:我發現自從學會用Python以後就愛不釋手,確實是使用起來非常方便。言歸正傳,看看Python實現的簡易Trie樹,為什麼說是簡易呢?因為沒有實現複雜的功能,只是為了說明Trie的基本原理,而且只支援ascii字元。實現了以下幾項準系統:

1、添加單詞:LBTrie的add方法;

2、尋找單詞:LBTrie的search方法;

3、列印Trie樹:LBTrie的output方法。

class LBTrie:    """    simple implemention of Trie in Python by authon liubing, which is not     perfect but just to illustrate the basis and principle of Trie.     """    def __init__(self):        self.trie = {}        self.size = 0           #添加單詞     def add(self, word):        p = self.trie        word = word.strip()        for c in word:            if not c in p:                p[c] = {}            p = p[c]        if word != '':            #在單詞末尾處添加索引值''作為標記,即只要某個字元的字典中含有''鍵即為單詞結尾            p[''] = ''           #查詢單詞          def search(self, word):        p = self.trie        word = word.lstrip()        for c in word:            if not c in p:                return False            p = p[c]        #判斷單詞結束標記''        if '' in p:            return True        return False                  #列印Trie樹的介面    def output(self):        print '{'        self.__print_item(self.trie)            print '}'                #實現Trie樹列印的私人遞迴函式,indent控制縮排    def __print_item(self, p, indent=0):             if p:            ind = '' + '\t' * indent            for key in p.keys():                label = "'%s' : " % key                print ind + label + '{'                self.__print_item(p[key], indent+1)            print ind + ' '*len(label) + '}'                  if __name__ == '__main__':    trie_obj = LBTrie()    #添加單詞    trie_obj.add('hello')    trie_obj.add('help')    trie_obj.add('world')    trie_obj.add('abc')    #列印構建的Trie樹    trie_obj.output()    #尋找單詞         if trie_obj.search('hello'):        print 'Yes'    else:        print 'No'    if trie_obj.search('China'):        print 'Yes'    else:        print 'No'

列印的Trie樹如所示:

尋找輸出結果為:

Yes

No

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.