首页 > 编程语言 >[AIGC] 字典树Trie树详解及其Java实现

[AIGC] 字典树Trie树详解及其Java实现

时间:2024-06-09 21:30:15浏览次数:17  
标签:node Java Trie AIGC 节点 TrieNode word public

字典树,也称为Trie树或前缀树,是一种常见的搜索数据结构,广泛应用于字符串查询的场景中,比如网络词典的实现,或者是搜索引擎中词语的自动补全。


文章目录

Trie树的概念

Trie树是一种特别的n叉树模型,它的主要应用是用于统计和排序大量的字符串,经常被搜索引擎系统用于文本词频统计。

Trie树特性

  1. 根节点代表空字符串;
  2. 从根节点到每一个节点,路径上经过的字符连起来,为该节点对应的字符串;
  3. 每个节点的所有子节点路径代表的字符都不相同。

Trie树的操作

Trie树的主要有两个基本操作:插入和查询。

插入操作

从根节点开始,依次遍历要插入的单词中的每一个字符,如果此字符对应的子节点存在,就向下继续遍历;如果不存在,就创建一个新的节点。

查询操作

和插入操作类似,从根节点开始,依次遍历要查询的单词中的每一个字符,如果此字符对应的子节点存在,就继续向下遍历;如果不存在,说明字典树中不存在此单词。

Java实现Trie树

下面我们使用Java语言,实现一个基础的Trie树结构:

public class Trie {
    private TrieNode root;

    public Trie() {
        root = new TrieNode();
    }

    // Inserts a word into the trie.
    public void insert(String word) {
        TrieNode node = root;
        for (int i = 0; i < word.length(); i++) {
            char currentChar = word.charAt(i);
            if (!node.containsKey(currentChar)) {
                node.put(currentChar, new TrieNode());
            }
            node = node.get(currentChar);
        }
        node.setEnd();
    }
    // search a prefix or whole key in trie and
    // returns the node where search ends
    private TrieNode searchPrefix(String word) {
        TrieNode node = root;
        for (int i = 0; i < word.length(); i++) {
            char curLetter = word.charAt(i);
            if (node.containsKey(curLetter)) {
                node = node.get(curLetter);
            } else {
                return null;
            }
        }
        return node;
    }

    // Returns if the word is in the trie.
    public boolean search(String word) {
        TrieNode node = searchPrefix(word);
        return node != null && node.isEnd();
    }

    // Returns if there is any word in the trie
    // that starts with the given prefix.
    public boolean startsWith(String prefix) {
        TrieNode node = searchPrefix(prefix);
        return node != null;
    }
}

class TrieNode {

    // R links to node children
    private TrieNode[] links;

    private final int R = 26;

    private boolean isEnd;

    public TrieNode() {
        links = new TrieNode[R];
    }

    public boolean containsKey(char ch) {
        return links[ch -'a'] != null;
    }
    public TrieNode get(char ch) {
        return links[ch -'a'];
    }
    public void put(char ch, TrieNode node) {
        links[ch -'a'] = node;
    }
    public void setEnd() {
        isEnd = true;
    }
    public boolean isEnd() {
        return isEnd;
    }
}

上述示例代码实现了一个基本的 Trie 树,包括了插入单词,查找单词以及查找指定的前缀等功能。TrieNode 代表了 Trie 树的每一个节点,每个节点包含26个链接,分别对应26个小写英文字母。

以上就是我对字典树Trie的简单解释以及如何使用Java语言实现字典树。希望对你有所帮助。任何关于数据结构或其他编程相关的问题,都欢迎向我提问。

标签:node,Java,Trie,AIGC,节点,TrieNode,word,public
From: https://blog.csdn.net/qq_45704048/article/details/139566470

相关文章

  • JS(JavaScript)学习总结
    概念:JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语   言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范......
  • java for循环打印三角形
    通过嵌套for循环实现控制台打印一个三角形,外层的循环来规定这个三角形是多少行,内部循环来行成三角形//比如我规定输出六行的三角形,循环次数是设置为6次for(inti=1;i<=6;i++){//首先要我们要输出一个倒着的直角三角形,这个倒着的直角三角形是我们打印这个三......
  • 第一章:java的历史、环境搭建
    第一章:java的历史、环境搭建Java是一种计算机编程语言;除了除了java还有很多编程语言:c语言、c++、c#、python等不同的计算机编程语言语法不同;应用场景不同;java是一种后端开发编程语言一、Java的历史1995年,sun公司推出的一款面向对象的编程语言jdk:java开发的必要......
  • Java程序是如何执行的
    在日常开发工作中,我们常使用开发工具如IntelliJIDEA或Eclipse来调试程序,或者通过打包工具将项目打包成JAR包或WAR包,并放入Tomcat等Web容器中运行。然而,Java程序在内部是如何执行的呢?无论是在开发工具中运行还是在Tomcat中运行,Java程序的执行流程基本相同。以......
  • Java JVM——10.对象实例化、内存布局与访问定位
    对象实例化对象创建方式★ new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法。★ Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器。★ Constructor的newInstance(Xxx):反射的方式,可以调用空参的,或者带......
  • 【JavaWeb入门】了解HTTP
    HTTP协议简介超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wi......
  • 应聘Java开发工程师应具备的能力有哪些?
    1.熟悉J2EE主流开发框架,如Spring、SpringBoot、MyBatis、MyBatisplus、SSH等主流框架,有独立开发项目、实际应用经验。Hibernate-ORM框架,用于对象和关系型数据库之间的映射。Dubbo-阿里巴巴开源的分布式服务框架,用于构建SOA服务化架构的高性能RPC通信框架。2.熟悉Oracl......
  • Java Web学习笔记29——Vue路由
    Vue路由:前端路由:点击菜单栏,地址栏会发生变化,会显示对应的组件。URL中的Hash(#号后面的部分)与组件之间的对应关系。Hash是/dept,那么就是部门管理组件;Hash是/emp,那么就是员工管理组件;VueRouter:介绍:VueRouter是Vue的官方路由;组成:1)VueRouter:路由器类,根据路由请求在路......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript旅游网站(中山)
    HTML+CSS+JS【旅游网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript广东传统文化
    HTML+CSS+JS【传统文化】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......