Ternary Search Tree 应用--搜索框智能提示
前面介绍了Ternary Search Tree和它的实现,那么可以用Ternary Search Tree来实现搜索框的只能提示,因为Ternary Search Tree的前缀匹配效率是非常高的,总体思路如下(其中很多可以根据自己的需要修改,我只是写出我的做法):
比如搜索歌曲时智能提示:
建立Ternary Search Tree
- 将所有歌曲名的字符串放置在一个map中,key为歌曲名、value存储歌曲信息,可以是一个类对象domain,在这里可以按照key值将相同歌曲的播放次数累加,并将歌曲名转为拼音,使用的是pinYin4J
- 将map转为歌曲对象list存储
- 在Node类中新增一个字段,index用以存放一个对象在list的下标值(这是关键的一部,是为了在Ternary Search Tree中查询到前缀为a的所有歌曲名拼音后,能获取到相应的index,直接在list中get(index),即能获取该歌曲的相应信息)
- 按照一首一尾将歌曲名拼音和该歌曲在list中的index插入到Ternary Search Tree中,原因参考--------------------------,为了使Ternary Search Tree平衡
查询
查询时,比如用户输入a,那么所有以a为前缀的歌曲名都要被搜寻出来
- 去Ternary Search Tree中查询以a为前缀的歌曲名,存入map,key为歌曲名拼音,value为index
- 根据index取得相应歌曲的信息
- 将歌曲播放数量作为value,index作为key放入treemap进行排序,改写comparator降序排列
- 从treemap中取n条记录,得到对应的resultList,根据index获取到相关歌曲信息
- 返回
总结一下,Ternary Search Tree是用来查询前缀匹配的所有歌曲
将所有匹配的歌曲查询出来后,还有根据某一字段排序等等进行一系列处理。
即 Ternary Search Tree查询 + topK排序
扩展
高亮功能
首字母匹配,即多建立一棵树,查询后按照播放次数排序去重
序列化Trie,避免每次重启都需要重建Trie,导致服务不可用
……
Ternary Search Tree 应用--搜索框智能提示的更多相关文章
- Servlet+Ajax实现搜索框智能提示
简介:搜索框相信大家都不陌生,几乎每天都会在各类网站进行着搜索.有没有注意到,很多的搜索功能,当输入内容时,下面会出现提示.这类提示就叫做搜索框的智能提示,本门课程就为大家介绍如何使用Servlet和 ...
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码】
项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript ...
- 使用jsonp跨域调用百度js实现搜索框智能提示(转)
http://www.cnblogs.com/oppoic/p/baidu_auto_complete.html 项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好 ...
- jquery php 百度搜索框智能提示效果
这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有须要的朋友能够下载測试哦. 代码例如以下 index.html文件,保保存成index.htm <!DOCT ...
- ajax实现异步前后台交互,模拟百度搜索框智能提示
1.什么是异步?在传统的网站项目中,填写一堆数据,最后点击提交,在点击提交的这一刻才实现数据提交,前后台交互.在你点击提交之前数据是没有提交到后台的.这样就会造成很大的不便.比如,我填了一大堆数据,结 ...
- 数据结构《17》---- 自动补齐之《二》----Ternary Search Tree
一. 序言 上一篇文章中,给出了 trie 树的一个实现.可以看到,trie 树有一个巨大的弊病,内存占用过大. 本文给出另一种数据结构来解决上述问题---- Ternary Search Tree ...
- 数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree
一. 序言 上一篇文章中,给出了 trie 树的一个实现. 能够看到,trie 树有一个巨大的弊病,内存占用过大. 本文给出还有一种数据结构来解决上述问题---- Ternary Search Tre ...
- 搜索关键词智能提示suggestion
转载自:stormbjm的专栏 题目详情:百度搜索框中,输入“北京”,搜索框下面会以北京为前缀,展示“北京爱情故事”.“北京公交”.“北京医院”等等搜索词,输入“结构之”,会提示“结构之法”,“结构之 ...
- Ternary Search Tree Java实现
/** * @author Edwin Chen * */ //定义节点 class Node { //存储字符串 char storeChar; //是否完成单词 boolean isComplet ...
随机推荐
- applicationContext.xml详解(转)
转自:http://blog.csdn.net/heng_ji/article/details/7022171,写的很好,省得以后找,放此处 想必用过Spring的程序员们都有这样的感觉,Spring ...
- 『重构--改善既有代码的设计』读书笔记----Remove Middle Man
如果你发现某个类做了过多的简单委托动作,你就可以考虑是否可以让客户直接去调用受托类.在Hide Delegate中,我们介绍了封装受托对象的好处,但好处归好处也存在代价,就是当你每次需要在受托对象中增 ...
- c#的异或运算符
int a = 5; int b = 30; Console.WriteLine(a^b); Console.ReadKey(); 输出结果是27 这是因为 5的二进制是0000 010130的二进 ...
- windowsphone 中CollectionViewSource和ObservableCollection的使用
功能描述:一级菜单省份 联动显示省份下的城市 直接上代码 public class City { public string Num { get; set; } public string Name ...
- php基础知识【函数】(3)字符串string
一.大小写转换 1.strtolower()--转换为小写. echo strtolower("Hello WORLD!"); //hello world! 2.strtouppe ...
- 商务通代码API
<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content ...
- 前端html+css之第十四天
一.HTML 1.HTML是什么? Hypertext Markup Language, 中文也就是超文本链接标示语言. HTML是一套规则,一套浏览器认识的规则. 2.开发者: (1)学习Html规 ...
- 【VB】操作ODBC-DAO方式操作只能查询,不能更新插入操作解决。
最近接手一个改善项目,需要从Access转化到SQL Server 2014,使用原有的ODBC连接方式只能查询,不能更新插入.网上一直找不到解决方案,然后自己测试一下使用ADO方式竟然可以连接了.具 ...
- Ferry Loading||
uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...
- Delphi XE6 for Android 让手机震动(调用Java的函数)
震动,是调用了 安卓api JNI 里面的 函数 ,这些都是 调用java的 ,如下面的引用, uses FMX.Helpers.Android, Androidapi.JNI.App, A ...