日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java单词查找树_Trie 单词查找树 java实现(来自算法第4版)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java单词查找树_Trie 单词查找树 java实现(来自算法第4版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

強烈建議看書上的實現步驟,這里只是一個個人記錄。

單詞查找樹的性能:

查找命中所需的時間與被查找的鍵的長度成正比。比如單詞有7個字符,查找或插入操作最多只需要檢查8個節點。

查找未命中只需檢查若干個字符。

所需空間:在RN~RNw之間,其中R為字母表大小,N為鍵的個數,w為平均單詞長度。

import java.util.LinkedList;

import java.util.Queue;

/**

* @author yuan

* @date 2019/2/21

* @description 單詞查找樹,參考算法第4版

*/

public class TrieST {

/**

* 基數

*/

private static int R = 256;

/**

* 根節點

*/

private Node root;

private static class Node{

private Object val;

private Node[] next = new Node[R];

}

public Value get(String key) {

Node x = get(root, key, 0);

if (x == null) {

return null;

}

return (Value) x.val;

}

/**

* 返回以x作為根節點的子單詞查找樹中與key相關聯的值

* @param x

* @param key

* @param d 當前的遍歷深度

* @return

*/

private Node get(Node x, String key, int d) {

if (x == null) {

return null;

}

if (d == key.length()) {

return x;

}

char c = key.charAt(d);

return get(x.next[c], key, d + 1);

}

public void put(String key,Value val) {

root = put(root, key, val, 0);

}

/**

* 如果key存在以x為根節點的子單詞查找樹中則更新與它相關聯的值

* @param x

* @param key

* @param val

* @param d

* @return

*/

private Node put(Node x, String key, Value val, int d) {

if (x == null) {

x = new Node();

}

if (d == key.length()) {

x.val = val;

return x;

}

// 找到第d個字符所對應的子單詞查找樹

char c = key.charAt(d);

x.next[c] = put(x.next[c], key, val, d + 1);

return x;

}

/**

* 查找所有的鍵

* @return

*/

public Iterable keys(){

return keysWithPrefix("");

}

/**

* 匹配以pre為前綴的鍵

* @param pre

* @return

*/

private Iterable keysWithPrefix(String pre) {

Queue q = new LinkedList<>();

collect(get(root, pre, 0), pre, q);

return q;

}

private void collect(Node x, String pre, Queue q) {

if (x == null) {

return;

}

if (x.val != null) {

q.offer(pre);

}

for (char c = 0; c < R; c++) {

collect(x.next[c], pre + c, q);

}

}

/**

* 匹配含通配符的鍵('.'能匹配所有字符)

* @param pat

* @return

*/

public Iterable keysThatMatch(String pat) {

Queue q = new LinkedList<>();

collect(root, "", pat, q);

return q;

}

private void collect(Node x, String pre, String pat, Queue q) {

int d = pre.length();

if (x == null) {

return;

}

if (d == pat.length() && x.val != null) {

q.offer(pre);

}

if (d == pat.length()) {

return;

}

char next = pat.charAt(d);

for (char c = 0; c < R; c++) {

if (next == '.' || next == c) {

collect(x.next[c], pre + c, pat, q);

}

}

}

/**

* 查找s中的最長的鍵

*

* @param s

* @return

*/

public String longestPrefixOf(String s) {

int length = search(root, s, 0, 0);

return s.substring(0, length);

}

private int search(Node x, String s, int d, int length) {

if (x == null) {

return length;

}

// 當前節點非空,更新length

if (x.val != null) {

length = d;

}

// 已經遍歷到s的末尾,返回

if (d == s.length()) {

return length;

}

char c = s.charAt(d);

return search(x.next[c], s, d + 1, length);

}

/**

* 刪除操作

* @param key

*/

public void delete(String key) {

root = delete(root, key, 0);

}

private Node delete(Node x, String key, int d) {

if (x == null) {

return null;

}

if (d == key.length()) {

x.val = null;

} else {

char c = key.charAt(d);

x.next[c] = delete(x.next[c], key, d + 1);

}

if (x.val != null) {

return x;

}

for (char c = 0; c < R; c++) {

if (x.next[c] != null) {

return x;

}

}

return null;

}

public static void main(String[] args) {

TrieST trieST = new TrieST<>();

trieST.put("abc", 3);

trieST.put("acc", 1);

trieST.put("bb", 1);

System.out.println(trieST.get("abc")); // 3

System.out.println();

Iterable iterable = trieST.keysThatMatch("a.c");

iterable.forEach(i -> System.out.println(i)); // abc acc

System.out.println();

trieST.delete("abc");

System.out.println(trieST.get("abc")); // null

}

}

總結

以上是生活随笔為你收集整理的java单词查找树_Trie 单词查找树 java实现(来自算法第4版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一级α片 | 国产日产欧美 | 麻豆视频在线观看 | 黄色网页在线观看 | 9l蝌蚪porny中文自拍 | 欧美日韩不卡一区二区三区 | 一区二区三区四区久久 | 国产毛片基地 | 麻豆亚洲精品 | 琪琪电影午夜理论片八戒八戒 | 亚洲欧美一区二区三区在线观看 | 操夜夜操| 97超碰碰碰 | 国产1区| 一级aa毛片 | 99热官网 | 日韩三级a | 国产亚洲精品成人无码精品网站 | 国产免费黄色录像 | 中文字幕视频网站 | 妞干网精品| 四虎影成人精品a片 | 别揉我奶头啊嗯一区二区 | 欧美午夜理伦三级在线观看 | 中文字幕第七页 | 好吊色网站 | 国产嫩草在线 | 91亚洲一区 | 日本美女交配 | 麻豆亚洲精品 | 理论片高清免费理伦片 | 久久精品三级 | 日韩精品一区在线观看 | 超碰在线最新 | 欧美成人一区二区 | 亚洲高清一区二区三区 | 每日av在线 | 久久人| 亚洲国产一区二区在线 | 奇米精品一区二区三区四区 | 91精品国产91久久久久福利 | 麻豆 国产| 欧美日韩a v | 性欧美熟妇videofreesex | 久久久久免费观看 | 欧美精品日韩 | 欧美男女动态图 | 日韩全黄| 色多多在线视频 | 女人做爰全过程免费观看美女 | 女优中文字幕 | 欧美专区视频 | 粉嫩小泬无遮挡久久久久久 | 性生活网址| 国产噜噜噜噜噜久久久久久久久 | 2020狠狠干 | 性感美女av在线 | 日韩专区中文字幕 | 日日操夜夜骑 | 日韩国产欧美视频 | 久久久久久久福利 | 中文一级片 | 亚洲激情久久久 | 午夜理伦三级理论 | 国产精品一区免费观看 | 日韩亚洲欧美在线观看 | 亚洲四区在线 | 亚洲视频在线播放免费 | 超级碰在线观看 | 性色av网址| 永久在线观看 | 扒开jk护士狂揉免费 | 国产婷婷色 | 凹凸精品一区二区三区 | 成人久久免费视频 | 伊人春色网站 | h文在线观看| 51调教丨国产调教视频 | 国产图片区| 国产激情无套内精对白视频 | caoprom97| 国模少妇一区二区 | 美女张开腿露出尿口 | 欧美丰满熟妇bbb久久久 | 成人在线中文字幕 | 黄色你懂的 | 麻豆精品免费 | 黄色性情网站 | 色欲AV无码精品一区二区久久 | 欧美丰满熟妇xxxx | 另类小说久久 | 国产人人射 | 久久爱伊人| 亚洲综合精品一区 | 人妻精品无码一区二区三区 | 男人天堂v | 日韩福利电影在线观看 | 99久久这里只有精品 | 欧美成人免费在线观看视频 |