python使用字典(dict)实现TrieTree

腾讯电面被问到字符串搜索的问题,当时只答出来O(n^2)级别的线性搜索.
其实trie树的概念在脑里一直有初步概念,只是没有归纳总结,一时被问到自然很难答出来.提醒自己,对于脑子里一些有初步设想的算法概念都应该在网络上找找相关知识,毕竟开源的世界里,你能想到的,总有人想得比你更远,考虑得比你更完善.
关于海量字符串数据的问题都可以用tire树解决,典型应用就是搜索框的自动联想功能. 每个结点带有的exist变量可以灵活修改以实现不同的功能.如,exist改为出现次数的统计,可以实现热门搜索词的统计排序.
对于python而言,dict就是python的hashmap.各种相关算法都应该想到dict解决.

#测试用例
#tree.add("abc")
#tree.add("bcd")
class TireTree(object):
    def __init__(self):
        self.tree = {}

    def add(self,s):
        tree = self.tree

        for c in s:
            #Pythonic Tips:善用dict.get()替代冗余代码
            tree[c] = tree.get(c,{})
            tree = tree[c]

            #if c in tree:
            #    tree = tree[c]
            #else:
            #    tree[c] = {}
            #    tree = tree[c]

        tree['exist'] = True

    def search(self,s):
        tree = self.tree

        for c in s:
            if c in tree:
                tree = tree[c]
            else:
                return False

        return tree.get('exist',False)
atree = TireTree()
atree.search('abc')
False
atree.add('abc')
atree.search('abc')
True
atree.tree
{'a': {'b': {'c': {'exist': True}}}}
atree.add('bcd')
atree.search('b')
False
atree.search('bcd')
True
atree.tree
{'a': {'b': {'c': {'exist': True}}}, 'b': {'c': {'d': {'exist': True}}}}
atree.add('ab')
atree.tree
{'a': {'b': {'c': {'exist': True}, 'exist': True}},
 'b': {'c': {'d': {'exist': True}}}}
atree.search('ab')
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值