美文网首页
a 字典树

a 字典树

作者: cookyo | 来源:发表于2019-06-05 17:43 被阅读0次
1 trie树

又称单词查找树或键树,是哈希树的变种。典型应用是用于统计和排序大量的字符串,经常被搜索引擎系统用于文本词频统计。
优点:最大限度的减少无畏的字符串比较,查询效率比哈希表高。
思想:空间换时间
性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符

实际问题(如搜索):
搜索 bit
返回 bitcoin
     bitfinex icon
     bitcoin price等
python:
class TrieNode:
    # Trie node class
    def __init__(self):
        self.children = [Node] * ALPHABET_SIZE
        self.isEndOfWord = False
2 实现Trie (leetcode 208)
class Trie:
    def __init__(self):
        self.root = {}
        self.end_of_word = '#'
    
    def insert(self, word):
        node = self.root
        for char in word:
            node = node.setdefault(char, {})
        node[self.end_of_word] = self.end_of_word

    def search(self, word):
        node = self.root
        for char in word:
            if char not in node:
                return False
            node = node[char]
        return self.end_of_word in node

    def startsWith(self, prefix):
        node = self.root
        for char in prefix:
            if char not in node:
                return False
            node = node[char]
        return True
3 二维网格中的单词搜索问题 (leetcode 212)
输入:
words = ['oath','pea','eat','rain']
board = [
         ['o','a','a','n'],
         ['e','t','a','e'],
         ['i','h','k','r'],
         ['i','f','l','v']
          ]
输出:['eat', 'oath']
#method1 DFS
#method2 Trie
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

END_OF_WORD = '#'

class Solution:
    def findWords(self, board, words):
        if not board or not board[0]: return []
        if not words: return []

        self.result = set()
        root = collections.defaultdict()
        for word in words:
            node = root
            for char in word:
                node = node.setdefault(char, collections.defaultdict())
            node[END_OF_WORD] = END_OF_WORD

        self.m, self.n = len(board), len(board[0])
        
        for i in range(self.m):
            for j in range(self.n):
                if board[i][j] in root:
                    self._dfs(board, i, j, '', root)

    def _dfs(self, board, i, j, cur_word, cur_dict):
        cur_word += board[i][j]
        cur_dict = cur_dict[board[i][j]]
        if END_OF_WORD in cur_dict:
            self.result.add(cur_word)
        tmp, board[i][j] = board[i][j], '@'
        for k in range(4):
            x, y = i + dx[k], j + dy[k]
            if 0 <= x < self.m and 0 <= y < self.n and board[x][y] != '@' and board[x][y] != '@' and board[x][y] in cur_dict:
                self._dfs(board, x, y, cur_word, cur_dict)
        board[i][j] = tmp

相关文章

  • 2019-03-31字典树Tire

    字典树图示 字典树案例

  • Trie

    字典树 01字典树

  • (六)树结构---字典树

    1.字典树基础 1.1.字典树 字典树又称前缀树,对于一个字符串在加入字典树结构时,会合并相同的字符,字典树是一种...

  • 字典树

  • 字典树

    需求: 判断文本中是否包含某个词, 以及词频问题:中文分词实际使用的词典往往在几十万个词以上,逐个匹配成本太大。方...

  • 字典树

    功能 字典树是用数组存储大量字符串的一种算法 字典树算法开辟空间非常大,但是对于字符串插入和查询有很快的速度 用法...

  • 字典树

    UVA 11488题目链接https://uva.onlinejudge.org/index.php?option...

  • 字典树

    应用场景: 又称“单词查找树”,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但...

  • 字典树

    直接上代码: 什么是字典树? 百度 字典树的牛逼之处: 1.利用字符串的公共前缀来节约存储空间。 2.最大限度地减...

  • a 字典树

    1 trie树 又称单词查找树或键树,是哈希树的变种。典型应用是用于统计和排序大量的字符串,经常被搜索引擎系统用于...

网友评论

      本文标题:a 字典树

      本文链接:https://www.haomeiwen.com/subject/zedsxctx.html