Ternary Search Tree 應用--搜索框智能提示

前面介紹了Ternary Search Tree和它的實現,那麼能夠用Ternary Search Tree來實現搜索框的只能提示,由於Ternary Search Tree的前綴匹配效率是很是高的,整體思路以下(其中不少能夠根據本身的須要修改,我只是寫出個人作法):dom

好比搜索歌曲時智能提示:spa

創建Ternary Search Tree 對象

  1. 將全部歌曲名的字符串放置在一個map中,key爲歌曲名、value存儲歌曲信息,能夠是一個類對象domain,在這裏能夠按照key值將相同歌曲的播放次數累加,並將歌曲名轉爲拼音,使用的是pinYin4J
  2. 將map轉爲歌曲對象list存儲
  3. 在Node類中新增一個字段,index用以存放一個對象在list的下標值(這是關鍵的一部,是爲了在Ternary Search Tree中查詢到前綴爲a的全部歌曲名拼音後,能獲取到相應的index,直接在list中get(index),即能獲取該歌曲的相應信息)
  4. 按照一首一尾將歌曲名拼音和該歌曲在list中的index插入到Ternary Search Tree中,緣由參考--------------------------,爲了使Ternary Search Tree平衡

 

 

查詢 排序

查詢時,好比用戶輸入a,那麼全部以a爲前綴的歌曲名都要被搜尋出來字符串

  1. 去Ternary Search Tree中查詢以a爲前綴的歌曲名,存入map,key爲歌曲名拼音,value爲index
  2. 根據index取得相應歌曲的信息
  3. 將歌曲播放數量做爲value,index做爲key放入treemap進行排序,改寫comparator降序排列
  4. 從treemap中取n條記錄,獲得對應的resultList,根據index獲取到相關歌曲信息
  5. 返回

 

 

總結一下,Ternary Search Tree是用來查詢前綴匹配的全部歌曲get

將全部匹配的歌曲查詢出來後,還有根據某一字段排序等等進行一系列處理。效率

即 Ternary Search Tree查詢 + topK排序擴展

 

 

擴展 List

高亮功能 搜索

首字母匹配,即多創建一棵樹,查詢後按照播放次數排序去重

 

序列化Trie,避免每次重啓都須要重建Trie,致使服務不可用

……

相關文章
相關標籤/搜索