Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Trie实现问题

Trie实现问题
EN

Stack Overflow用户
提问于 2009-03-23 11:19:02
回答 5查看 3.5K关注 0票数 1

我正在为VB.NET中的预测文本输入实现一个trie --就trie的使用而言,基本上是自动补全。我的trie是一个基于泛型字典类的递归数据结构。

它基本上是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class WordTree Inherits Dictionary(of Char, WordTree)

单词中的每个字母(全部大写)用作新WordTrie的键。叶子上的空字符表示单词的终止。为了找到以前缀开头的单词,我遍历trie,直到我的前缀,然后收集所有孩子的单词。

我的问题基本上是关于trie本身的实现。我正在使用字典哈希函数来分支我的树。我可以使用列表,对列表进行线性搜索,或者做其他事情。这里的平稳移动是什么?这是一种合理的分支方式吗?

谢谢。

更新:

只是为了澄清,我基本上是在问字典分支方法是否明显不如其他替代方法。我使用这种数据结构的应用程序只使用大写字母,所以数组方法可能是最好的。将来,我可能会在更复杂的typeahead情况下使用相同的数据结构(更多字符)。在这种情况下,听起来字典是正确的方法-直到我需要使用更复杂的东西。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-23 11:26:31

如果它只有26个字母,就像一个26个条目的数组。然后按索引进行查找。如果bucket-list长于26,则它可能比字典使用更少的空间。

票数 3
EN

Stack Overflow用户

发布于 2009-03-23 13:01:21

如果您担心空间问题,您可以对有效的字节转换使用位图压缩,假设限制为26个字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class State  // could be struct or whatever
{
    int valid; // can handle 32 transitions -- each bit set is valid
    vector<State> transitions;

    State getNextState( int ch )
    {
         int index;
         int mask  = ( 1 << ( toupper( ch ) - 'A' )) -1;
         int bitsToCount = valid & mask;

         for( index = 0; bitsToCount ; bitsToCount  >>= 1)
         {
             index  += bitsToCount  & 1;
         }  
         transitions.at( index );
    }
};

还有其他方法可以进行位计数Here,向量中的索引是有效位集中设置的位数。另一种选择是状态的直接索引数组;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class State
{
    State transitions[ 26 ]; // use the char as the index.

    State getNextState( int ch )
    {
        return transitions[ ch ];
    }
};
票数 3
EN

Stack Overflow用户

发布于 2009-03-23 11:46:03

一个好的数据结构是三元搜索树,它在空间上是有效的,并且可能提供亚线性前缀查找。关于它的Peter Kankowski has a article。他使用的是C,但是一旦你理解了数据结构,代码就会变得简单明了。正如他提到的,这是ispell用于拼写更正的结构。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/674844

复制
相关文章
js实现trie树
function Node(options) { options = options || {}; this.val = options.val; this.isCapital = null; this.position = options.position; } function position(str) { var code = str.charCodeAt(0); if (code >= 65 && code <= 97) { ret
theanarkh
2019/03/06
2.8K0
字典书Trie的实现
身为程序员,需要弄懂Trie(字典书的实现) 具体应用场景和讲解-请一定要看 提供的API如下 insert(String world) 向字典中插入 search(String world) 字典中查询此字符串 startWith(String world) 查询字典中的公有开头 class TrieNode { private TrieNode[] links; private final int R = 26; private boolean isEnd; p
用户2436820
2019/04/09
5350
208. 实现 Trie (前缀树)
这是一种叫做 单词查找树 的结构。它由字符串键中所有的字符构造而成,允许使用被查找键中的字符进行查找。其中包括插入、查找、删除,寻找前缀等操作. [站外图片上传中...(image-832521-1636112029289)]
名字是乱打的
2021/12/24
3090
208. 实现 Trie (前缀树)
请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。 boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。 boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。 输入 ["T
CaesarChang张旭
2021/07/08
3820
LeetCode208. 实现 Trie (前缀树)
题目链接:[LeetCode208]()  板子题,就不说了 class Trie { class TrieNode { public int end; p
mathor
2018/08/17
6500
LeetCode208. 实现 Trie (前缀树)
Trie树实现自动补全功能
Trie树,也叫字典树,又称单词查找树,是一种树形结构, 是一种哈希树的变种。典型应用是用于统计, 排序和保存大量的字符串(但不仅限于字符串), 所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间, 最大限度地减少无谓的字符串比较,查询效率比哈希树高
每天学Java
2020/06/01
1.4K0
Trie Tree 实现中文分词器
前言 继上一篇HashMap实现中文分词器后,对Trie Tree的好奇,又使用Trie Tree实现了下中文分词器。效率比HashMap实现的分词器更高。 Trie Tree 简介 Trie Tree,又称单词字典树、查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 性质 它有3个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
java404
2018/05/18
1.5K0
LeetCode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 参考:Trie树 class Trie { private: bool isEnd = false; Trie* next[26] = { nullptr }; public: Trie() {} void insert(const string& word)//插入单词 { Trie* root = this; for (c
Michael阿明
2020/07/13
2340
LeetCode 208. 实现 Trie (前缀树)
LC208—实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
Java架构师必看
2021/05/14
4860
LC208—实现 Trie (前缀树)
力扣208——实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
健程之道
2020/02/12
4480
力扣208——实现 Trie (前缀树)
Trie树
他会自动显示相关的搜索,不知道有没有想过这个功能是如何实现的呢?面对海量的数据,它怎么能在我输入的同时,如此快速的检索到相关内容呢?当我查找资料后,就遇到了它,Trie树。
烟草的香味
2019/11/11
6460
Trie树
基于Trie 树实现简单的中文分词
中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需要事先分词,但标注效果往往比先分词后标注差),实体识别、句法分析、语义分析。常用的分词方法主要有依赖词典的机械分词和序列标注方法。
致Great
2022/05/13
9191
基于Trie 树实现简单的中文分词
Trie - 208. Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods.
ppxai
2020/09/23
5470
TRIE(2)
 其中MAX_NODE是trie中最大能存储的节点数目,CHARSET是字符集的大小,k是当前trie中包含有多少个节点。Triei的值是0表示trie树中i号节点,并没有一条连出去的边,满足边上的字符标识是字符集中第j个字符(从0开始);triei的值是正整数x表示trie树中i号节点,有一条连出去的边,满足边上的字符标识是字符集中第j个字符,并且这条边的终点是x号节点  举个例子,下图中左边是trie树,右边是二维数组trie中非0的值
mathor
2018/07/24
6180
TRIE(2)
TRIE(1)
 Trie又被称为前缀树或者字典树。它的基本作用是用来存储一个字符串集合:{W1, W2, W3, … WN},并且可以用来查询一个字符串S是不是在集合里  具体来说,Trie一般支持两个操作: Trie.insert(W):第一个操作是插入操作,就是将一个字符串W加入到集合中 Trie.search(S):第二个操作是查询操作,就是查询一个字符串S是不是在集合中  由于Trie的特性,它还特别适合处理一些与前缀有关的查询,比如集合中有几个字符串与S有公共前缀这样的查询  首先我们来看一下Trie长什么
mathor
2018/07/05
3570
Trie树
Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
全栈程序员站长
2022/07/14
2540
LeetCode 208.实现Trie(字典树) - JavaScript
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
心谭博客
2020/04/21
6790
TRIE(4)
 这道题的大意是我们有一个网站,然后要配置规则,决定哪些IP能访问,哪些IP不能。这些规则大概长这个样子:
mathor
2018/07/24
5490
TRIE(4)
Trie树
这周将Trie树看了一下下面进行总结 概念:Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本
用户1624346
2018/04/11
7600
Trie树
使用 trie 树实现简单的中文分词
导语:工作中偶尔遇到需要对中文进行分词的情况,不要求非常高的精确度和语境符合度,仅是为了统计某些词出现的热度。本文提供了一种简单易行的中文分词方法。 工作中,偶尔会遇到需要进行中文分词统计的情况,但是并不需要做到高精度时,我们可以使用 trie 树,也就是 前缀树 来实现这个功能。 trie 树,可以叫前缀树,有时也称字典树,是字符串算法中比较常用的一种结构。关于 trie 树的概念及其扩展的其他更高效的数据结构,自行百度,这里不再占篇幅。 如果使用 trie 树来实现英文单词的查找,那么最终形成的结构,如
胖兔子兔胖
2018/01/15
3.2K0
使用 trie 树实现简单的中文分词

相似问题

Trie实现

123

优化Trie实现

20

“简单”Trie实现

18

编写trie实现

41

Ocaml TRIE实现

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文