`
gaofen100
  • 浏览: 1227902 次
文章分类
社区版块
存档分类
最新评论

Trie的java实现

 
阅读更多

关注Trie 这种结构已经很久,Trie有一个很有趣的用途,那就是自动提示。而且,前不久在一次面试里,也需要用Trie来解答。所以,在此对这个数据结构进行总结。


Trie,又称单词查找树键树,是一种形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

它有3个基本性质:

  1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符
  2. 根节点到某一节点路径上经过的字符连接起来,为该节点对应的字符串
  3. 每个节点的所有子节点包含的字符都不相同。

下面这个图就是Trie的表示,每一条边表示一个字符,如果结束,就用星号表示。在这个Trie结构里,我们有下面字符串,比如do, dork, dorm等,但是Trie里没有ba, 也没有sen,因为在a, 和n结尾,没有结束符号(星号)。



有了这样一种数据结构,我们可以用它来保存一个字典,要查询改字典里是否有相应的词,是否非常的方便呢?我们也可以做智能提示,我们把用户已经搜索的词存在Trie里,每当用户输入一个词的时候,我们可以自动提示,比如当用户输入 ba, 我们会自动提示 bat 和 baii.

现在来讨论Trie的实现。

首先,我们定义一个Abstract Trie,Trie 里存放的是一个Node。这个类里有两个操作,一个是插入,另一个是查询。具体实现放在后面。

Node 类的实现

现在我们来看这个Trie类的具体实现。


时间复杂度分析:

对于insert, 如果被插入的String长度是 k, 每对一个字符进行查询,我们最多在child linkedlist里面查询26次(最多26个字母),所以,复杂度为O(26*k) = O(k). 对于 search, 复杂度是一样的。

本文代码来自:http://www.technicalypto.com/2010/04/trie-in-java.html


另一个版本的Trie的JAVA实现。思路是一样的,只是实现方式有少许区别。




分享到:
评论

相关推荐

    trie4j:PATRICIA,双数组,LOUDS Trie Java实现

    Trie4J-Java的各种trie实现。 Trie4J是各种trie实现的集合。 您可以使用Maven获取二进制文件: < groupId>com.github.takawitter</ groupId> < artifactId>trie4j < version>0.9.8 或从 即将发布:无计划。...

    实现Trie_java_

    在Java中实现Trie数据结构,可以帮助我们快速处理大量字符串数据,例如在搜索引擎中进行关键词索引或者在自动补全功能中提供快速建议。 Trie的基本思想是利用字符串的公共前缀来节省存储空间。每个节点代表一个字符...

    Java实现字典树TrieTree

    总的来说,Java实现的字典树TrieTree是一个强大的工具,尤其适用于处理大量字符串数据,如四六级高频词汇的存储和查询。通过理解和运用这种数据结构,我们可以提高算法效率,优化应用程序的性能。

    trie:Trie数据结构的Java实现

    Prefix Trie数据结构的Java实现。 介绍 尝试是类似于基于有序树的数据结构的地图,可快速搜索O(k)的顺序,其中k是键的长度。 阅读有关trie的更多信息。 动机 它最初是为在我的Android应用程序T9 App Launcher中使用...

    基于Java链表实现的字典树(trie)

    基于Java链表实现的字典树(trie),实现了增删改查等功能,它说摘要必须大于50字我还能说啥啥啥啥

    java数组-基于java实现的双数组Trie树.zip

    本项目聚焦于利用Java实现的双数组Trie树,这是一种在字符串处理和搜索中广泛使用的数据结构。 Trie树,又称“前缀树”或“字典树”,是一种用于存储键值对的数据结构,特别适用于字符串。它的主要特点是能以O(1)的...

    Trie树(字典树)的介绍及Java实现

    在Java中实现Trie树,首先定义节点类`TrieNode`,包括指向26个子节点的数组(表示26个英文字母),字符数据成员`data`,以及词频计数器`freq`。例如: ```java public class TrieNode { public TrieNode[] ...

    JAVA实现的中文分词程序

    Java实现的中文分词程序是一种基于Java编程语言的文本处理工具,主要应用于处理中文文本,将其拆分成有意义的词汇单元,这一过程被称为分词。在自然语言处理(NLP)领域,分词是预处理阶段的关键步骤,为后续的文本...

    string-trie-java:Java实现的Trie数据结构来存储字符串

    该项目包含一个Java类(StringTrie),该类实现了用于存储字符串的trie数据结构,以及一个用于操纵StringTrie对象的基于菜单的控制台应用程序。 描述 StringTrie支持包含英文字母(A-Za-z),撇号('),连字符/破...

    [图灵社区]《深度学习搜索引擎开发:Java实现》源代码.zip

    《深度学习搜索引擎开发:Java实现》是一本专著,它探讨了如何利用深度学习技术构建高效、智能的搜索引擎。本书的源代码包含了作者为阐述理论和技术而编写的Java程序,这些程序是理解并实践深度学习搜索引擎开发的...

    模糊匹配算法java实现

    本篇将深入探讨如何使用Java实现模糊匹配,并介绍一些核心的概念和技术。 首先,我们要理解模糊匹配的基本原理。模糊匹配是指在两个字符串之间进行比较时,允许一定程度的不精确性,如字符差异、位置差异等。常见的...

    Java实现单词查询程序

    在本项目中,我们主要探讨的是...综上所述,这个Java实现的单词查询程序融合了多种Java技术,从基本的面向对象编程到高级的用户界面设计和数据管理。它的实现不仅体现了Java语言的强大,也展示了软件开发的良好实践。

    Java实现:月,日,年,周,访问量统计

    在Java编程中,实现月、日、年、周和访问量统计是一项常见的需求,尤其是在构建数据分析或Web应用中。这通常涉及到数据收集、处理和可视化。以下是一些关键知识点: 1. **日期和时间处理**:Java提供了多种库来处理...

    AC算法(java实现)

    AC自动机(Aho-Corasick Algorithm)是一种用于字符串搜索的高效算法,它在多模式匹配问题中表现出色。...通过理解AC算法的原理和Java实现,初学者可以深入掌握字符串搜索技术,并进一步探索更高级的文本处理算法。

    java实现敏感词过滤

    本项目是用Java实现的一个敏感词过滤工具,它能对输入的字符串进行检查,并返回其中的敏感词汇。以下是关于这个Java敏感词过滤实现的详细知识讲解。 首先,我们要理解敏感词过滤的基本原理。通常,敏感词过滤系统会...

    基于Trie树模仿谷歌百度搜索框提示

    在Java中实现Trie树,我们需要定义一个TrieNode类,它包含一个字符数组(代表子节点)和一个布尔值(表示当前节点是否为单词的结尾)。我们还需要一个方法来插入字符串到Trie树中,这个过程涉及遍历字符串的每个字符...

    DoubleArrayTrie:高级结构双数组Trie树(DoubleArrayTrie) java实现

    DoubleArrayTrie Java编写的DoubleArrayTrie介绍用法// construct and buildDoubleArrayTrie dat = new DoubleArrayTrie(); for(String word: words) { dat.Insert(word); } System.out.println(dat.Base.length); ...

    java实现自动补全功能

    也可以实现更复杂的算法,如Trie树或Levenshtein距离计算,以提高匹配效率和精度。 4. **RESTful API**: 使用Spring Boot或类似框架,定义一个RESTful API,如`/api/autocomplete`,接收GET请求,参数为用户的部分...

    Java实现编译原理DFA图转换

    给定算术表达式的DFA图,利用Java语言构建Trie树,实现对输入文法的判断

    suffixtrie:使用后缀尝试重新组合文本片段的简单示例

    后缀 使用后缀尝试重新组合文本...要使用 Java 7 进行编译,请从 src 目录执行以下操作 javac片段/提交/ Keexa.java 然后运行 java片段/提交/ Keexa YOUR_TEXT_FILE.txt YOUR_TEXT_FILE.txt 的一个示例是 text.txt

Global site tag (gtag.js) - Google Analytics