精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

數(shù)據結構:字典樹 Trie——打一個字聯(lián)想出一串詞語

開發(fā) 前端
在計算機科學中,字典樹(Trie)也被稱為”單詞查找樹“或”數(shù)字樹“,有時候也被稱為基數(shù)樹或前綴樹(因為可以通過前綴的方式進行索引)?!?它是一種搜索樹,一種已排序的數(shù)據結構,通常用于存儲動態(tài)集或鍵為字符串的關聯(lián)數(shù)組。

一、前言

Trie 的歷史

字典樹 Trie 這個詞來自于 retrieval,于 1912 年,Axel Thue 首次抽象地描述了一組字符串數(shù)據結構的存放方式為 Trie 的想法。這個想法于 1960 年由 Edward Fredkin 獨立描述,并創(chuàng)造了 Trie 一詞。你看看,多少程序員為了一個詞、方法名、屬性名,想破腦袋!

二、字典樹數(shù)據結構

在計算機科學中,字典樹(Trie)也被稱為”單詞查找樹“或”數(shù)字樹“,有時候也被稱為基數(shù)樹或前綴樹(因為可以通過前綴的方式進行索引)?!?它是一種搜索樹,一種已排序的數(shù)據結構,通常用于存儲動態(tài)集或鍵為字符串的關聯(lián)數(shù)組。

與二叉查找樹不同,鍵不是直接保存在節(jié)點中,而是由節(jié)點在樹中的位置決定。一個節(jié)點的所有子孫都有相同的前綴,也就是這個節(jié)點對應的字符串,而根節(jié)點對應空字符串。一般情況下,不是所有的節(jié)點都有對應的值,只有葉子節(jié)點和部分內部節(jié)點所對應的鍵才有相關的值。

  • 這是一個把 battle 單詞字符串,按照字母拆分到字典樹進行存放的圖。
  • 鍵標注在節(jié)點中,值標注在節(jié)點之下。每一個完整的英文單詞對應一個特定的整數(shù)。也就是26個字母對應的 ASCII 轉換后的值。

三、字典樹結構實現(xiàn)

字典樹字母的存放有26個,也就是說在實現(xiàn)的過程中,每一個節(jié)點的分支都有26個槽位用來存放可能出現(xiàn)的字母組合。同理如果是數(shù)字樹的話就是10個數(shù)字的組合,每個字典樹上的節(jié)點對應的分支則有10個操作存放可能出現(xiàn)組合的數(shù)字。

接下來我們就基于 Java 語言實現(xiàn)一個字典樹的存放和遍歷索引的功能。

  • 源碼地址:https://github.com/fuzhengwei/java-algorithms
  • 本章源碼:https://github.com/fuzhengwei/java-algorithms/tree/main/data-structures/src/main/java/trie

1. 樹枝節(jié)點

public class TrieNode {

/** 形成一個鏈 */
public TrieNode[] slot = new TrieNode[26];

/** 字母 */
public char c;

/** 單詞:數(shù)量 > 0 表示一個單詞 */
public boolean isWord;

/** 前綴 */
public int prefix;

/** 單詞:具體的一個單詞字符串 */
public String word;

/** 解釋:單詞的注釋說明 */
public String explain;

}
  • 字典的樹的節(jié)點需要包括此節(jié)點內嵌的關聯(lián)節(jié)點,之后是節(jié)點的字母、到此字母是否為單詞、單詞的前綴、單詞字符串和當前單詞的非必要注釋。

2. 插入元素

public void insert(String words, String explain) {
TrieNode root = wordsTree;
char[] chars = words.toCharArray();
for (char c : chars) {
int idx = c - 'a'; // - a 從 0 開始,參考 ASCII 碼表
if (root.slot[idx] == null) {
root.slot[idx] = new TrieNode();
}
root = root.slot[idx];
root.c = c;
root.prefix++;
}
root.explain = explain; // 單詞的注釋說明信息
root.isWord = true; // 循環(huán)拆解單詞后標記
}
  • insert 方法接收單詞和注釋信息,并對一個單詞按照 char 進行拆分,拆分后則計算出索引位置并以此存放。存放完成后標記單詞和附屬上單詞的注釋信息。

3. 索引元素

public List<String> searchPrefix(String prefix) {
TrieNode root = wordsTree;
char[] chars = prefix.toCharArray();
StringBuilder cache = new StringBuilder();
// 精準匹配:根據前置精準查找
for (char c : chars) {
int idx = c - 'a';
// 匹配為空
if (idx > root.slot.length || idx < 0 || root.slot[idx] == null) {
return Collections.emptyList();
}
cache.append(c);
root = root.slot[idx];
}
// 模糊匹配:根據前綴的最后一個單詞,遞歸遍歷所有的單詞
ArrayList<String> list = new ArrayList<>();
if (root.prefix != 0) {
for (int i = 0; i < root.slot.length; i++) {
if (root.slot[i] != null) {
char c = (char) (i + 'a');
collect(root.slot[i], String.valueOf(cache) + c, list, 15);
if (list.size() >= 15) {
return list;
}
}
}
}
return list;
}

protected void collect(TrieNode trieNode, String pre, List<String> queue, int resultLimit){
// 找到單詞
if (trieNode.isWord) {
trieNode.word = pre;
// 保存檢索到的單詞到 queue
queue.add(trieNode.word + " -> " + trieNode.explain);
if (queue.size() >= resultLimit) {
return;
}
}
// 遞歸調用,查找單詞
for (int i = 0; i < trieNode.slot.length; i++) {
char c = (char) ('a' + i);
if (trieNode.slot[i] != null) {
collect(trieNode.slot[i], pre + c, queue, resultLimit);
}
}
}
  • 從字典樹從檢索元素的過程分為2部分,第1部分是根據提供的索引前綴精準匹配到單詞信息,第2部分是根據索引前綴的最后一個單詞開始,循環(huán)遞歸遍歷從當前位置所能關聯(lián)到的字母直至判斷為是單詞標記為結束,通過這樣的方式把所有匹配動的單詞索引出來。
  • list.size() >= 15 是判定索引的最大長度,超過這個數(shù)量就停止索引了,畢竟這是一種O(n)時間復雜度的操作,如果加載數(shù)十萬單詞進行匹配,執(zhí)行速度還是比較耗時的。

四、字典樹功能測試

@Test
public void test_trie() {
Trie trie = new Trie();
// 存入
trie.insert("bat","大廠");
trie.insert("batch", "批量");
trie.insert("bitch", "彪子");
trie.insert("battle", "戰(zhàn)斗");
logger.info(trie.toString());
// 檢索
List<String> trieNodes = trie.searchPrefix("ba");
logger.info("測試結果:{}", JSON.toJSONString(trieNodes));
}
  • 這里提供一些有相近字母的單詞和名詞,用于測試。你也可以嘗試讀取txt文件,檢索存入數(shù)十萬單詞進行檢索驗證。

測試結果

06:21:38.226 [main] INFO trie.__test__.TrieTest - 測試結果:["bat -> 大廠","batch -> 批量","battle -> 戰(zhàn)斗"]

Process finished with exit code
  • 通過測試結果可以看到,把所有以 ba開頭的單詞全部檢索出來了。這也是字典樹最核心功能的體現(xiàn)。
  • 讀者在學習的過程中,可以嘗試在檢索的方法體內打一些斷點看一下具體的執(zhí)行過程,方便學習整個執(zhí)行步驟。

五、常見面試題

  • 簡述字典樹的數(shù)據結構
  • 敘述你怎么來實現(xiàn)一個字典樹
  • 字典樹的實際業(yè)務場景舉例【排序、全文搜索、網絡搜索引擎、生物信息】
  • 字典樹的存入和檢索的時間復雜度
  • 還有哪些字典樹的實現(xiàn)方式【后綴樹、哈希樹、帽子樹】
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-06-01 07:49:51

2020-10-30 09:56:59

Trie樹之美

2023-04-25 15:46:51

Python字符串

2020-09-18 14:23:50

字符

2022-11-24 08:01:57

bash腳本字符串

2022-06-28 11:30:38

廣電5G套餐專網

2013-05-21 17:42:39

打車AppO2O

2022-06-14 09:14:39

漏洞惡意依賴木馬

2021-05-12 19:19:44

字典樹數(shù)據結構

2018-07-30 08:37:02

數(shù)據庫Redis數(shù)據結構

2021-06-04 10:18:03

Trie字典樹數(shù)據

2011-10-13 09:38:27

JavaScript

2023-03-16 10:24:21

列表元素字典

2010-10-09 13:41:42

MySQL字符串

2025-05-13 01:00:00

2019-12-16 09:26:05

Java設計操作系統(tǒng)

2019-09-03 10:40:23

數(shù)據結構HTML編程

2018-03-16 15:30:45

數(shù)據庫MySQL數(shù)據字典

2025-01-21 08:30:00

2022-09-14 07:59:27

字典樹Trie基數(shù)樹
點贊
收藏

51CTO技術棧公眾號

www.av免费| 99热这里只有精品在线播放| 亚洲欧洲成人在线| 日韩av一区二区三区四区| 日韩视频―中文字幕| 免费观看黄网站| 欧美日韩国产v| 亚洲精品中文在线观看| 欧美亚洲丝袜| 手机免费av片| 色a资源在线| 日韩精品免费视频人成| 欧美刺激性大交免费视频| 亚洲av成人片色在线观看高潮 | 国产视频在线视频| 欧美人动性xxxxz0oz| 亚洲国产精品精华液ab| 日韩免费观看视频| 免费看黄色的视频| 惠美惠精品网| 久久精品亚洲乱码伦伦中文 | 99sesese| 亚洲精品永久免费视频| 一区二区三区免费在线观看| 天堂社区 天堂综合网 天堂资源最新版| 性一交一乱一透一a级| 一级片一级片一级片| 18网站在线观看| 国产喂奶挤奶一区二区三区| 国产另类自拍| 999国产精品视频免费| 日日摸夜夜添夜夜添国产精品 | 亚洲精品一区中文字幕乱码| 女同性αv亚洲女同志| 久久av影院| 岛国av一区二区三区| 欧美一级爱爱视频| 国产精品一二三区视频| 91美女片黄在线观看| 懂色av一区二区三区在线播放| 国产又粗又大又黄| 毛片av一区二区三区| 国产99久久精品一区二区永久免费 | 天天干天天操天天玩| 小黄鸭精品aⅴ导航网站入口| 亚洲午夜精品久久久久久久久| 超碰在线免费观看97| ,亚洲人成毛片在线播放| 国产精品久久久久久久免费软件 | 中文字幕视频一区二区在线有码 | 亚洲欧美另类图片小说| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 这里只有精品6| 天堂资源在线中文精品| 秋霞av国产精品一区| 国产成人精品一区二三区| 在线看片欧美| 午夜精品福利电影| 国产又爽又黄的视频| 国产精品亚洲综合久久| 97视频在线看| 日韩欧美成人一区二区三区| 香蕉视频成人在线观看| 日本高清久久天堂| 做爰视频毛片视频| 久久99国产精品久久99果冻传媒| 国产人妖伪娘一区91| 国产一区二区视频免费观看| 国产精品1区2区| 日本欧美国产在线| 国产精品久久久久久久久夜色| 三级欧美在线一区| 国产精品一区二区三区成人| 国产精品日韩无码| 国产精品66部| 久久九九视频| 中文字幕在线观看日本| 亚洲视频一区在线观看| 久久久久se| 国产三级视频在线看| 国产精品久久久久久久久搜平片| 亚洲一区二区三区精品动漫| 中文字幕在线播放网址| 精品久久久久久久久久久久久久| 亚洲三区四区| av大大超碰在线| 五月综合激情婷婷六月色窝| 日韩在线xxx| 精品国产亚洲一区二区三区| 亚洲高清免费观看高清完整版| 受虐m奴xxx在线观看| 欧美电影免费播放| 午夜精品在线视频| 在线视频你懂得| 99视频精品在线| 亚洲a∨日韩av高清在线观看| www.黄色小说.com| 久久精品视频一区二区三区| 性做爰过程免费播放| 蜜桃视频m3u8在线观看| 欧美日韩电影在线播放| 丝袜熟女一区二区三区 | 国产成人精品午夜视频免费| 欧美精品与人动性物交免费看| 好了av在线| 欧美日韩综合视频网址| 免费不卡av网站| 精品日韩欧美一区| 久久免费福利视频| 91中文字幕在线播放| 久久综合九色综合欧美98| 91免费视频黄| 欧美暴力调教| 欧美性猛交xxxxx免费看| 蜜臀一区二区三区精品免费视频| 国产精品成人自拍| 久久精品91久久香蕉加勒比 | 99视频一区| 成人免费激情视频| 欧美日韩伦理片| 26uuu精品一区二区| 欧美日韩一级在线| 亚洲播播91| 日韩成人中文字幕| 强乱中文字幕av一区乱码| 蜜桃av噜噜一区二区三区小说| 精品国产一区二区三区四区vr| 在线网址91| 欧美精品777| 精品熟妇无码av免费久久| 亚洲影视在线| 国产嫩草一区二区三区在线观看| 在线免费av导航| 337p亚洲精品色噜噜噜| 你懂得视频在线观看| 每日更新成人在线视频| 麻豆亚洲一区| 亚洲妇女成熟| 日韩精品一区二区视频| 日本在线视频免费| 成人午夜精品在线| 人妻无码一区二区三区四区| www一区二区三区| 俺去亚洲欧洲欧美日韩| 国产尤物视频在线观看| 亚洲视频图片小说| 亚洲精品在线网址| 欧美午夜一区二区福利视频| 69堂成人精品视频免费| 青青在线视频| 日韩精品一区二区在线观看| 欧美日韩大片在线观看| 国产成人精品免费在线| 蜜桃狠狠色伊人亚洲综合网站| 大黄网站在线观看| 亚洲国产精品久久91精品| 日韩毛片在线播放| 91丨九色丨蝌蚪丨老版| 日本久久久精品视频| 国产精品欧美日韩一区| 国产精品www色诱视频| 日韩伦理在线观看| 日韩视频不卡中文| 免费一级全黄少妇性色生活片| 国产+成+人+亚洲欧洲自线| 成人黄色大片网站| 四虎884aa成人精品最新| 国产成人91久久精品| 成人亚洲综合天堂| 制服丝袜一区二区三区| 日本免费在线播放| 久久色在线视频| 亚洲一级免费在线观看| 欧美福利网址| 国产精品美女免费视频| 黄在线免费观看| 精品剧情v国产在线观看在线| 日韩精品成人一区| 日本一区二区三区国色天香 | 国产精品亚洲一区二区三区妖精 | 色一情一乱一伦一区二区三区丨| 久久精品资源| 久久久久久久国产精品| 欧美人体大胆444www| 欧美日本一区二区三区四区| 九九九在线视频| 91色婷婷久久久久合中文| 香港日本韩国三级网站| 亚洲天堂偷拍| 亚洲精品高清视频| 国产91精品入| 国产精品视频区1| 在线heyzo| 国产亚洲免费的视频看| 国产在线视频二区| www激情久久| 亚洲成人手机在线观看| 先锋影音久久| 国产又粗又猛又爽又黄的网站 | 亚洲欧美日韩高清| 99热这里是精品| 色综合久久66| 国产亚洲第一页| 欧美国产丝袜视频| 国产69视频在线观看| 美女视频黄频大全不卡视频在线播放| 999久久欧美人妻一区二区| 国产毛片一区二区三区| 国内视频一区二区| 成人网av.com/| 国产精品久久久久久网站| а√天堂资源官网在线资源| 日韩在线视频观看正片免费网站| 无套内谢的新婚少妇国语播放| 69堂亚洲精品首页| 久操视频在线免费观看| 精品久久久在线观看| 国产盗摄一区二区三区在线| 日本一区二区三区在线不卡| 欧美无人区码suv| 国产不卡一区视频| 亚洲精品久久久中文字幕| 久久精品日产第一区二区| 18禁网站免费无遮挡无码中文| 99久久婷婷国产综合精品电影√| 欧美日韩精品中文字幕一区二区| 亚洲码欧美码一区二区三区| 精品自在线视频| 婷婷免费在线视频| 国产亚洲欧洲高清一区| 天堂av电影在线观看| 色综合中文字幕| 国产一级二级毛片| 樱花影视一区二区| 欧美做爰啪啪xxxⅹ性| 国产精品久久久久久久久晋中| 永久免费毛片在线观看| 久久这里只有精品视频网| jlzzjizz在线播放观看| av综合在线播放| 少妇被狂c下部羞羞漫画| 成人黄色综合网站| 精品人妻伦一二三区久| 成人激情av网| 黄色国产在线观看| www国产精品av| jizz中文字幕| 国产精品乱人伦| 国产人与禽zoz0性伦| 成人精品鲁一区一区二区| 美女日批在线观看| 国产91丝袜在线播放| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 欧美大片在线看免费观看| 污视频在线看网站| 久久久日本电影| 国产福利电影在线播放| 2024亚洲男人天堂| 日韩在线短视频| 91精品久久久久久| 精品中文字幕一区二区三区| av在线不卡观看| 青青久久av| 亚洲v国产v| 午夜日韩电影| 香港三级韩国三级日本三级| 亚洲尤物影院| 日本人69视频| 国产传媒日韩欧美成人| 性久久久久久久久久久| 国产日韩精品久久久| 中日韩一级黄色片| 亚洲午夜精品网| www亚洲视频| 欧美亚洲一区二区在线| 国产a级免费视频| 亚洲美女视频网站| av电影在线播放高清免费观看| 欧美理论电影在线观看| 日韩理论视频| 川上优av一区二区线观看 | 欧美精品成人一区二区在线观看| jvid福利在线一区二区| 真人做人试看60分钟免费| 在线视频精品| 色噜噜狠狠一区二区| 丁香婷婷综合五月| 老司机精品免费视频| 亚洲午夜免费电影| 真实的国产乱xxxx在线91| 精品噜噜噜噜久久久久久久久试看| 五十路在线观看| 不卡伊人av在线播放| 在线免费日韩片| 亚洲最大成人网色| 精品视频久久| 免费一级特黄毛片| 国产在线麻豆精品观看| 亚洲无吗一区二区三区| 懂色av一区二区夜夜嗨| 高清国产在线观看| 性做久久久久久久久| 一区二区三区精| 日韩精品免费在线播放| 成人在线免费看片| 国产成人高清激情视频在线观看| 久久久久毛片免费观看| 天天综合色天天综合色hd| 激情综合自拍| 中文字幕无码毛片免费看| 日本一区二区视频在线观看| 草久久免费视频| 精品久久人人做人人爱| 日本a在线播放| 日本视频久久久| 国产精品极品国产中出| 一区二区三区四区欧美| 日韩国产欧美在线播放| 日本丰满少妇裸体自慰| 亚洲18女电影在线观看| 国产免费高清视频| 久久精彩免费视频| 久久精品国产精品亚洲毛片| 日本在线播放一区| 亚洲女同在线| 日批在线观看视频| 亚洲曰韩产成在线| 亚洲av永久无码国产精品久久| 久久精品99国产精品酒店日本| 日韩天堂在线| 日本不卡在线观看| 久久九九国产| 中文字幕高清视频| 欧美性生交大片免费| 青青草超碰在线| 51视频国产精品一区二区| 精品一区二区男人吃奶| 国产精品一线二线三线| www.亚洲色图| 国产成人无码精品久在线观看| 精品美女一区二区三区| 男插女视频久久久| 国产精品一区二区在线观看| 国内精品久久久久久久影视蜜臀 | 国产精品麻豆久久久| 欧美 亚洲 另类 激情 另类| 在线观看国产欧美| 激情久久一区二区| 综合一区中文字幕| 国产精品综合网| 麻豆成人在线视频| 亚洲第一福利在线观看| 免费在线小视频| 免费成人看片网址| 麻豆成人av在线| 手机在线免费看毛片| 日韩欧美国产一区在线观看| 丰满大乳少妇在线观看网站| 精品一区久久久| 日韩福利视频网| 免费黄色国产视频| 欧美一级日韩不卡播放免费| 青春草视频在线观看| 好吊色欧美一区二区三区四区 | 亚欧色一区w666天堂| 免费在线黄色电影| 成人激情视频在线| 亚洲调教视频在线观看| 人妻熟女aⅴ一区二区三区汇编| 在线亚洲免费视频| 18网站在线观看| 欧美日韩系列| 久久电影网站中文字幕| 久久精品一区二区三| 亚洲欧洲日韩国产| 91久久青草| 波多野结衣综合网| 国产精品久久一卡二卡| 国模无码一区二区三区| 国产精品黄视频| 影音先锋中文字幕一区| a级在线免费观看| 日韩一区二区三| 日韩伦理三区| 99re6这里有精品热视频| 久久久亚洲精品一区二区三区| 97人妻人人澡人人爽人人精品 | 中文字幕久久网| 久久久久久九九九| 成人在线免费观看网站| 日本泡妞xxxx免费视频软件| 色综合激情久久| 国产第一页在线| 一区二区三区欧美在线| 99国产欧美久久久精品| 国产精品毛片一区二区在线看舒淇 | 日本免费高清不卡| 成人爽a毛片一区二区免费| 中文字幕在线观看高清| 18一19gay欧美视频网站|