当前位置: 首页 > news >正文

南海建设网站杭州建站程序

南海建设网站,杭州建站程序,浙江省建设执业资格中心网站,赣州推广团队数据结构与算法-前缀树详解 1 何为前缀树 2 前缀树的代码表示及相关操作 1 何为前缀树 前缀树 又称之为字典树,是一种多路查找树,多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。 性质:不同字符串的相同…

数据结构与算法-前缀树详解

  • 1 何为前缀树
  • 2 前缀树的代码表示及相关操作

 

1 何为前缀树

 
前缀树 又称之为字典树,是一种多路查找树,多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。

性质:不同字符串的相同前缀只保存一份。

操作:查找,插入,删除

例如 字符数组
[“abc”,“bck”,“abd”,“ace”]
构建成一颗前缀树


 

2 前缀树的代码表示及相关操作

 

 

前缀树中的节点

 

coding

public static class TrieNode {public int pass;//前缀树节点被经过的次数public int end;// 多少个字符串在此点结尾public TrieNode[] nexts;// 下一个节点// 当字符种类很多的时候 可以使用HashMap// public Map<Character,TrieNode> trieNodeMap;// key 某条图  value 指向的下一个节点public TrieNode(){// trieNodeMap = new HashMap<>();//无序使用Hash表// trieNodeMap = new TreeMap<>();// 有序使用有序表this.pass = 0;this.end = 0;nexts = new TrieNode[26];}
}

 

前缀树代码表示及相关操作

 

public static class Trie {private TrieNode root;//头结点public Trie() {this.root = new TrieNode();}/*** 将字符串word加入到前缀树中** @param word*/public void insert(String word) {if (word == null) {return;}char[] chars = word.toCharArray();TrieNode node = root;node.pass++;int index = 0;// 从左往右遍历字符串for (int i = 0; i < chars.length; ++i) {// 由字符计算得出 该走哪条路index = chars[i] - 'a';//如果没有此字符的路 则新建if (node.nexts[index] == null) {node.nexts[index] = new TrieNode();}//来到下一个节点node = node.nexts[index];node.pass++;}node.end++;}/*** @param word* @return 字符串在前缀树中加入过几次*/public int search(String word) {if (word == null) {return 0;}// 临时前缀树节点 用于遍历前缀树TrieNode node = root;char[] chars = word.toCharArray();int index = 0;for (int i = 0; i < chars.length; ++i) {index = chars[i] - 'a';// 没有通往当前字符串的路 则说明没有加入过这个字符串 直接返回 0if (node.nexts[index] == null) {return 0;}// 下一个节点node = node.nexts[index];}// 所有字符的路都有  则返回最后一个节点的 end 值return node.end;}/*** @param pre* @return 有多少个字符串是以 pre开头的*/public int prefixNumber(String pre) {if (pre == null) {return 0;}TrieNode node = root;int index = 0;char[] chars = pre.toCharArray();for (int i = 0; i < chars.length; ++i) {index = chars[i] - 'a';if (node.nexts[index] == null) {return 0;}node = node.nexts[index];}return node.pass;}/*** 删除前缀树中的字符串word** @param word*/public void delete(String word) {if (search(word) != 0) { // 前缀树中存在字符串再删除char[] chars = word.toCharArray();TrieNode node = root;node.pass--;int index = 0;// 遍历每一个节点 将节点的pass值减 1for (int i = 0; i < chars.length; ++i) {index = chars[i] - 'a';if (--node.nexts[index].pass == 0) {node.nexts[index] = null;return;}node = node.nexts[index];}node.end--;}}
}
http://www.yayakq.cn/news/521542/

相关文章:

  • 网站后台链接怎么做网站开发过程中出现的问题
  • 手机网站 wordpress小程序模板免费网站
  • 哪个网站做图文素材多旗县长安网站建设思路
  • 做淘宝保健品药品在哪个网站找素材淘宝客做网站可行么
  • 好网站建设公司昆明腾讯分分彩做号网站
  • 现代网站开发建设门户网站推广怎么做
  • 如今做啥网站能致富网站建设修改建议
  • 郑州网站建设html5国外免费logo设计网站
  • 惠阳网站设计开发做策划的网站
  • 中企动力做的网站被镜像免费漫画网站
  • 阿里巴巴网站建设公司青浦苏州网站建设
  • 厦门公司建站佛山网站优化建设
  • 语文建设编辑部官方网站做网站的公司经营范围
  • 旅游网网站建设如何做自己的播报网站
  • 温州平阳县网站建设兼职wordpress 段间距
  • 怎么看网站哪个公司做的兰州网站推广优化
  • 禁止下载app网站wordpress 企业网站 免费下载
  • 禅城区网站建设公司app小程序软件定制开发
  • 莱西做网站公司昭通昭阳区城乡建设管理局网站
  • 扬州市住房建设局网站影响网站建设价格的因素有
  • 21dove谁做的的网站个人网站wordpress
  • 怎么用div做网站wordpress 批量漏洞
  • 订阅号怎么做免费的视频网站吗自适应网站源码
  • 成都网站建设成都app开发什么网站可以找人做设计
  • 村网通为每个农村建设了网站生产管理软件哪个好用
  • 南沙外贸网站建设dw网站建设模板
  • h5混搭php建设网站东莞网络推广平台
  • 南京网站建设的公司设计师销售管理软件
  • 在网站上做承诺书暴雪战网官方网站入口
  • 网站建设寻求设计平面图的软件