原理解释:
java实现:https://blog.csdn.net/yuhk231/article/details/51539840
c实现:https://blog.csdn.net/qq_31175231/article/details/77827324
代码模板:缺点,只能检索出在一个分支中的前缀匹配内容

package com.xq.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;/** 无数据结构设计下的蛮力中文键树*/
class TrieNode {public String value;public ArrayList<TrieNode> ptr = null;public TrieNode(String value) {this.value=value;ptr =new ArrayList<TrieNode>();}
}public class TrieTree_1 {private static TrieNode root = null;ArrayList<String> searchResult=new ArrayList<String>();StringBuffer tempWord=new StringBuffer();int start=0;public TrieTree_1() {root = new TrieNode(null);}public void insert(String key) {TrieNode p = root;String tempWord;boolean contains;TrieNode tempNode;for (int i = 0; i < key.length(); i++) {tempWord=String.valueOf(key.charAt(i));contains=false;for(TrieNode tn:p.ptr){if(tn.value.equals(tempWord)){p=tn;contains=true;break;}}if(!contains){tempNode=new TrieNode(tempWord);p.ptr.add(tempNode);p=tempNode;}}}public ArrayList<String> search(String key) {  //模糊查询就是这个方法,打个比方比如key是"ap",那么ArrayList里就有{"apple","application"}TrieNode p = root;String temp;boolean contains=false;for (int i = 0; i < key.length(); i++) {temp=String.valueOf(key.charAt(i));contains=false;for(TrieNode tn:p.ptr){if(tn.value.equals(temp)){p=tn;contains=true;break;}}if(contains){continue;}else{break;}}if(contains){if(!(p.ptr.isEmpty())){//查找到关键字searchResult.clear();tempWord.delete(0, tempWord.length());tempWord.append(key);start=key.length();traverseTree(p);}else{//已经查找到键树的底部return null;}}else{//没有查找到相应关键字return null;}return searchResult;}private void traverseTree(TrieNode p){if(!(p.ptr.isEmpty())){for(TrieNode tn:p.ptr){tempWord.append(tn.value);start++;traverseTree(tn);start--;tempWord.delete(start,tempWord.length());}}else{searchResult.add(tempWord.toString());}}public static void main(String[] args) {TrieTree_1 chinese = new TrieTree_1();chinese.insert("中");chinese.insert("中国人");chinese.insert("中国");chinese.insert("中华人民");chinese.insert("中华人崛起");chinese.insert("中华上下五千年");ArrayList<String> list = chinese.search("中华");for (String string : list) {System.out.println(string);}}
}

java字典树(Trie)实现中文模糊匹配相关推荐

  1. java trie_java字典树(Trie)实现中文模糊匹配

    package com.xq.algorithm; import java.io.BufferedReader; import java.io.IOException; import java.uti ...

  2. Java实现字典树 Trie

    Java实现字典树 Trie 一.字典树介绍 二.Trie实现以及基本的插入查询操作 数组实现: HashMap实现: Trie插入(这里都以数组实现为例): Trie查询: 三.相关例题: 1.le ...

  3. HDU 1247 Hat’s Words 字典树(Trie树)

    HDU 1247 Hat's Words 字典树(Trie树) 字典树的建立是应该都是一样的 下面是我的做法: 建立完后, 对每一个单词都进行find_string()判断是否符合, 分别对其分成两半 ...

  4. 《恋上数据结构第1季》字典树 Trie

    字典树Trie Trie 简介 Trie 实现 接口设计 源码 测试 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基础推荐看这个: Java 强化笔记目录 Tri ...

  5. 用Python实现字典树(Trie)与双数组字典树(DATrie)

    1. 字典树(Trie) 假如我们把字典中的词以记录的形式(无序)存入数据库中.现给定一串字符,要查找该字符串是否为字典中的词.因为数据库中的记录是无序的,所以,最朴素的方法就逐记录匹配.此方法简单, ...

  6. 快乐学算法之:字典树Trie

    文章目录 简介 Trie的特性 Trie树和Hashing,BST的对比 Trie树的程序化表示 Trie树的插入 Trie树的搜索 Trie树的删除 Trie树的疑惑 简介 字典树的英文名叫做Tri ...

  7. php trie,数据结构-PHP 字典树(Trie)的实现

    ​这篇文章介绍一下字典树的实现原理,又称单词查找树.Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统 ...

  8. Java实现伪查询(全匹配+模糊匹配)

    Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...

  9. xls文件操作,中文模糊匹配

    对xls文件操作,中文模糊匹配 python读取xls 编辑xls文件 python 字符串有关操作 字符串模糊匹配 jieba中文分词 fuzzywuzzy python读取xls 安装xlrd包 ...

最新文章

  1. Siamese-RPN目标跟踪算法
  2. 2022.2.17自制辣白菜
  3. android 一个activity定时更新另一个activity的UI
  4. 如何用Postman做接口测试
  5. 光盘刻录制作Ubuntu等操作系统的启动盘
  6. JS动态赋值同时触发onchange方法
  7. 利用matlab做dsp实验,华工DSP实验一利用Matlab进行频谱分析
  8. Stanford公开课《编译原理》学习笔记(1~4课)
  9. Magic Maze dfs + dp
  10. Oracle 密码过期问题
  11. resin服务器中间件
  12. 学习笔记75—方差分析(主效应和交互效应)
  13. 二层交换机与三层交换机区别
  14. 图论trainning-part-1 A. 最短路
  15. 高德h5定位误差_#高德地图api移动端定位失败解决方案 #H5 原生Geollocation接口Chomre浏览器的坑...
  16. 《Android源码设计模式解析与实战》读书笔记(七)——策略模式
  17. 约束你的git操作,让你生无可恋。
  18. 喜报 | 炼石入选北京市“专精特新”企业
  19. 桁架工业机器人编程_《上下料桁架机器人》编制说明.doc
  20. EPSON RX8010SJ RTC 简要功能说明及性能参数

热门文章

  1. 激光slam_机器人主流定位技术,激光SLAM与视觉SLAM谁更胜一筹
  2. python in memory_使用 in_memory 工作空间的注意事项
  3. C 怎么读取Cpp文件_从PCD文件写入和读取点云数据
  4. IOC操作Bean管理XML方式(创建对象和set注入属性)
  5. python文本聚类分析_python机器学习kmeans算法——对文本进行聚类分析
  6. python获取坐标颜色,python – 根据一组坐标的数据着色地图
  7. 【LeetCode笔记】101. 对称二叉树(Java、回溯)
  8. c语言 静态变量 初始化,c – 静态变量初始化两次
  9. 下列不属于PHP开发优势的是,php开发的优势有哪些?
  10. python的界面文字翻译_一个把网站全英文转成中文的方法,让你轻松看懂python官网...