首页 > 编程语言 >前缀树(Trie)的java实现

前缀树(Trie)的java实现

时间:2023-09-02 16:56:24浏览次数:42  
标签:Node insert java 前缀 Trie cur int apple

前缀树

prefix tree, 又叫做 trie。关键Feature如下:

  • 树形结构

  • 根节点为空

  • 结点包含

    Node [] nexts;// size 26
    int isEnd; //有多少个字符串以当前字符结尾
    int pass; // 多少个字符串经过了当前字符
    
  • 常用操作

    • insert
    • delete
    • search //字符串在前缀树中出现的次数
    • prefixNumber

一个”word“怎么储存在trie中,自根节点,从上往下阅读。懒得画图了,可去别的博客看看

package data_structure;

/**
 * @author yyq
 * @create 2023-09-02 11:26
 */
public class Trie {
    private Node root=new Node();

    public class Node{
        Node[] nexts=new Node[26];
        int pass=0;//多少条路径经过了此节点
        int isEnd=0;//多少条路径以此节点为end
    }


    public static void main(String[] args) {
        Trie t = new Trie();
        t.insert("apple");
        t.insert("app");
        t.insert("bana");
        t.insert("b");
        t.prefixCount("ap");
        t.prefixCount("apple");
        t.search("apple");
        t.delete("apple");
        t.search("apple");
        t.prefixCount("ap");
    }
    public void insert(String word){
        System.out.println(word+" inserted");
        Node cur = root;
        cur.pass++;
        for(int i=0;i<word.length();i++){
            int chIndex = word.charAt(i)-'a';
            if(cur.nexts[chIndex]==null){
                cur.nexts[chIndex] = new Node();
            }
            cur = cur.nexts[chIndex];
            cur.pass++;
        }
        cur.isEnd++;
    }

    public int search(String word){
        Node cur = root;
        for(int i=0;i<word.length();i++){
            int chIndex = word.charAt(i)-'a';
            cur = cur.nexts[chIndex];
            if(cur==null){
                break;
            }
        }
        int res = cur!=null?cur.isEnd:0;
        System.out.println(word + " count: "+ res);
        return res;
    }

    public int prefixCount(String prefix){
        Node cur = root;
        for(int i=0;i<prefix.length();i++){
            int chIndex = prefix.charAt(i) - 'a';
            cur = cur.nexts[chIndex];
            if(cur==null)break;
        }

        int res = ( cur==null?0:cur.pass);
        System.out.println(prefix+ " count(prefix): "+ res);
        return res;
    }

    public void delete(String word){
        if(search(word)>0){
            Node cur = root;
            cur.pass--;
            for(int i=0;i<word.length();i++){
                int chIndex = word.charAt(i) - 'a';
                cur = cur.nexts[chIndex];
                cur.pass--;
            }
            cur.isEnd--;
            System.out.println(word+ " deleted");
        }

    }
}

标签:Node,insert,java,前缀,Trie,cur,int,apple
From: https://www.cnblogs.com/pitaya01/p/17673884.html

相关文章

  • 无涯教程-JavaScript - GAMMADIST函数
    GAMMADIST函数取代了Excel2010中的GAMMA.DIST函数。描述该函数返回伽马分布。您可以使用此功能来研究可能具有偏斜分布的变量。伽马分布通常用于排队分析。语法GAMMADIST(x,alpha,beta,cumulative)争论Argument描述Required/OptionalXThevalueatwhichyouwantt......
  • Java Map常见面试题
    你好,面试官|你拿JavaMap考验老干部?面试官:请说下对理解HashMap及LinkedHashMap的理解(八股文)(qq.com)你用过哪些Map?HashMap、LinkedHashMap、TreeMap、ConCurrentHashMap一般涉及到键值对的存取,我们第一时间想到的就是HashMap如果需要根据Key顺序实现存储键值对,TreeMap较......
  • JavaScript Map.groupBy All In One
    JavaScriptMap.groupByAllInOneMap.groupBy(items,callbackFn)constinventory=[{name:"asparagus",type:"vegetables",quantity:9},{name:"bananas",type:"fruit",quantity:5},{name:"goa......
  • 无涯教程-JavaScript - FLOOR函数
    描述FLOOR函数将数字向下舍入为零,直到最接近的有效倍数。语法FLOOR(number,significance)争论Argument描述Required/OptionalNumberThenumericvalueyouwanttoround.RequiredSignificanceThemultipletowhichyouwanttoround.RequiredNotes如果数......
  • javascript: confirm alert box costomer style
     //JavaScriptDocument/*參考資源:https://developer.mozilla.org/en-US/docs/Web/API/Window/alerthttps://developer.mozilla.org/en-US/docs/Web/API/Window/confirmhttps://reactkungfu.com/2015/08/beautiful-confirm-window-with-react/https://www.jquery-az.co......
  • java opencv读取rtsp
     要使用Java和OpenCV读取RTSP流,您需要使用JavaCV库。JavaCV是一个Java绑定库,它提供了与OpenCV的接口,使您可以在Java中方便地使用OpenCV的功能。以下是一个简单的Java程序,它使用JavaCV库从RTSP流中读取视频帧: importorg.bytedeco.javacv.*;publicclassRTSPReader{p......
  • java POI实现导入导出功能
    导入POI库的依赖项,在项目中加入以下Maven依赖项:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi......
  • 基于Java的高校学生请假审批系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义:计算机技术的发展,带来了时代变革,我们的生活方式发生了重大改变。计算机网络的普及使得信息共享成为现实,利用数据库进行信息存储分析,优化了工作方式,提高了工作效率,经过多年的发展,数据库已经应用到社会生活的方方面面,完善的数据库技术和理论基础为计算机软件提......
  • 从零开发Java入门项目--十天掌握
    ​ 原文网址:从零开发Java入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客简介这是一个靠谱的Java入门项目实战,名字叫蚂蚁爱购。从零开发项目,视频加文档,十天就能学会开发Java项目,教程路线是:搭建环境=>安装软件=>创建项目=>添加依赖和配置=>通过表生成代码=>编写Java代码=>......
  • Flink 1.17教程:wordcount maven工程java代码示例(批、流实现方式)
    批、流实现wordcount代码示例pom.xml<properties><flink.version>1.17.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><......