zoukankan      html  css  js  c++  java
  • Ternary Search Tree 应用--搜索框智能提示

    前面介绍了Ternary Search Tree和它的实现,那么可以用Ternary Search Tree来实现搜索框的只能提示,因为Ternary Search Tree的前缀匹配效率是非常高的,总体思路如下(其中很多可以根据自己的需要修改,我只是写出我的做法):

    比如搜索歌曲时智能提示:

    建立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是用来查询前缀匹配的所有歌曲

    将所有匹配的歌曲查询出来后,还有根据某一字段排序等等进行一系列处理。

    即 Ternary Search Tree查询 + topK排序

    扩展

    高亮功能

    首字母匹配,即多建立一棵树,查询后按照播放次数排序去重

     

    序列化Trie,避免每次重启都需要重建Trie,导致服务不可用

    ……

  • 相关阅读:
    C# this关键字的四种用法
    MVC Html.AntiForgeryToken() 防止CSRF攻击
    简单的C#网络爬虫
    string format的各类格式及用法
    选取两个有序数组中最大的K个值,降序存入另一个数组中
    程序员面试:青蛙跳台阶问题(变态跳台阶)
    贪心算法,递归算法,动态规划算法比较与总结
    storm简介[ZZ]
    逻辑回归:使用SGD(Stochastic Gradient Descent)进行大规模机器学习
    mahout分类
  • 原文地址:https://www.cnblogs.com/edwinchen/p/4580265.html
Copyright © 2011-2022 走看看