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 ...
 
随机推荐
- linux之uniq
			
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行.在正常情况下,第二个及以后更多个重复行将被删去,行 比较是根据所用字符集的排序序列进行的.该命令加工后的结 ...
 - ubuntu 14.04.02 LTS 启动项误写入 /dev/sda1 (win 7 loader) 修复
			
问题描述: 在win7下安装Ubuntu14.04,由于启动项 /boot loader 安装位置错误(/dev/sda1 (win 7 loader) )导致无法进入Windows(在GRUB界面能 ...
 - TRECT的使用
			
作为一张画布,在上面绘制各种图形或显示图像,但在CANVAS的使用过程中少不了一个特殊对象,那就是矩形RECT,灵活使用它会完成很多特殊的功能,为Delphi编制的Windows程序增加活力. REC ...
 - DEDECMS重要文件
			
DEDECMS 重要文件dedecms/include/common.inc.php全局变量文件dedecms/include/extend.func.php自定义函数文件
 - Django db relationship
			
# coding=utf-8 from django.db import models """ Django数据库关系: 一对一关系:OneToOneField 多对多关 ...
 - Swift-MJ
			
1.声明变量 常量 声明变量:var age = 10 声明常量:let age = 10 (不加分号,除非多条语句写在同一行) 二进制前缀:0b(必须小写) 八进制前缀:0o 十六进制前缀:0x 2 ...
 - UBOOT的多支持性与可裁剪性
			
UBOOT功能强大,适用于多种操作系统,多种处理器架构. 在阅读它的源码时,可以看到cpu目录有各种处理器,而board目录有各种开发板.但是,对于一个特定的实验平台,例如TQ2440开发板,它用到的 ...
 - MySql可视化工具MySQL Workbench使用教程
			
1. MySQL Workbench MySQL Workbench 为数据库管理员.程序开发者和系统规划师提供可视化的Sql开发.数据库建模.以及数据库管理功能. 2.MySQL Workbench ...
 - Android 5.0 技术新趋势
			
由于 Android 的版本分裂比较严重,整个新系统升级可能需要一两年甚至更长时间.所以目前使用 Android 5.0 的大部分是喜欢尝鲜的用户,同时现在市场上能够很好支持 Android 5.0 ...
 - High performance web site
			
http://www.cnblogs.com/Blog-Yang/archive/2013/08/16/3261284.html http://www.kuqin.com/webpagedesign/ ...