字典树实现拼音九键按照词典的词频进行提示补全算法

class Trieroot():
    def __init__(self):
        self.isEnd = False
        self.next = {}
        self.pre = ""
        self.count = 0
class Trie(object):
    
    def __init__(self):
        self.root = Trieroot()
        
        self.w2i_dict = {}
        
        self.w2i_dict['a'] = 2
        self.w2i_dict['b'] = 2
        self.w2i_dict['c'] = 2
        
        self.w2i_dict['d'] = 3
        self.w2i_dict['e'] = 3
        self.w2i_dict['f'] = 3
        
        self.w2i_dict['g'] = 4
        self.w2i_dict['h'] = 4
        self.w2i_dict['i'] = 4
        
        self.w2i_dict['j'] = 5
        self.w2i_dict['k'] = 5
        self.w2i_dict['l'] = 5

        self.w2i_dict['m'] = 6
        self.w2i_dict['n'] = 6
        self.w2i_dict['o'] = 6

        self.w2i_dict['p'] = 7
        self.w2i_dict['q'] = 7
        self.w2i_dict['r'] = 7
        self.w2i_dict['s'] = 7

        self.w2i_dict['t'] = 8
        self.w2i_dict['u'] = 8
        self.w2i_dict['v'] = 8
    
        self.w2i_dict['w'] = 9
        self.w2i_dict['x'] = 9
        self.w2i_dict['y'] = 9
        self.w2i_dict['z'] = 9

    
    def insert(self,word):
        node = self.root
        for st in word:
            ind = self.w2i_dict[st]
            if ind not in node.next:
                node.next[ind] = Trieroot()
            node = node.next[ind]
        node.isEnd = True
        node.pre = word
        node.count+=1
    
    def startwith(self,inter):
        def show(node):
            if node.isEnd:
                save[node.pre] = node.count 
            for ind in node.next:
                show(node.next[ind])
        node = self.root
        for ind in inter:
            ind = int(ind)
            if ind not in node.next:
                return False
            node = node.next[ind]
        #print(node.pre)
        save = {}
        show(node)
        #print(save)
        print(sorted(save,reverse=True))
算法分析 空间复杂度O(26N) 其中N为最长的单词长度
时间复杂度插入O(N);前缀O(26(N-M)) 其中N为输入长度M为字典中最长单词的长度
全部评论
楼主你这也太牛了
点赞 回复 分享
发布于 2022-10-23 13:10 山西

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务