`
nid007
  • 浏览: 44111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于二分查找的搜索提示实现

阅读更多
用过百度或GOOGLE的人应该都有印象,当你在搜索框输入一些关键字之后,会提示相关的搜索关键词,比如,我输入"g",会提示"google","gmail"一类以"g"开头的关键词。本文讨论的就是这样的一个功能,在后台算法上应该如何实现。
首先我们会有一个关键词列表,包含了 关键词 和它的搜索次数,如:
good,5
nid,1
google,10
gmail,100
apple, 22
mail,500
把上面的词条是按照编码值从小到大排序,结果如下:
apple, 22,0
good,5,0
google,10,3
gmail,100,1
mail,500,0
nid,1,0
排序后,张每个词条加上一个属性,就是当前词条与前一词条前缀字符相同数量,我称它为PreLength,比如:
good和apple 前缀字符相同数量为0,good和google前缀字符相同数量为3,以此类推,结果如下:
apple, 22,0
good,5,0
google,10,3
gmail,100,1
mail,500,0
nid,1,0

经过上面的预处理 就可以用二分法来查找了。比如用户输入g,输入长度InputLength=1,
用二法定位到第三个词条 google,它的PreLength=5 >= InputLength,加入前一词条good
继续向前遍历,直到PreLength< InputLength

然后向后遍历,直到PreLength< InputLength

这样就收集到了结果
good,5,0
google,10,3
gmail,100,1
再按搜索次数排序,并把前N条记录返回就可以了。当然这里用优先队列实现更好。

要把一个算法用文字描述清楚还是比较的困难呀。。
0
0
分享到:
评论
1 楼 fuliang 2010-12-12  
搜索提示一般使用trie的结构进行前缀匹配。

相关推荐

    数据结构第5次作业.docx

    1.算法设计与分析题:将直接插入排序的内循环改造为使用对分查找实现元素插入,请写出基于对分查找的插入排序算法并给出其时间复杂度分析。 2.算法设计:将教案给出的非递归直接插入排序和冒泡排序算法用递归算法...

    操作系统实验-基于C++的模拟进程调度源码+实验报告.zip

    对排好序的数据采用二分查找法查找某一给定数据。 (2)利用随机函数生成一组点对,利用基于分治策略的算法求出最近点对,并在屏幕上输出。 快速排序 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个...

    西南交通大学-zhy-数据结构第5次作业.zip

    1. 算法设计与分析题:将直接插入排序的内循环改造为使用对分查找实现元素插入,请写出基于对分查找的插入排序算法并给出其时间复杂度分析。 2. 算法设计:将教案给出的非递归直接插入排序和冒泡排序算法用递归算法...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

    vc++ 应用源码包_1

    基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_display_modes_src.zip 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 iconbutton_demo.zip ...

    vc++ 应用源码包_2

    基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_display_modes_src.zip 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 iconbutton_demo.zip ...

    vc++ 应用源码包_6

    基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_display_modes_src.zip 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 iconbutton_demo.zip ...

    vc++ 应用源码包_5

    基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_display_modes_src.zip 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 iconbutton_demo.zip ...

    vc++ 应用源码包_3

    基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_display_modes_src.zip 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 iconbutton_demo.zip ...

    基于C#开发的学生通讯录系统源码+项目说明(课程设计).zip

    4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于C#开发的学生通讯录系统源码+项目说明(课程...

    vc++ 开发实例源码包

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    基于J2EE框架的个人博客系统项目毕业设计论...

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

    leetcode答案-Leetcode:力码

    二分查找 递归 冒泡排序 归并排序 快速排序 映射和哈希 地图 散列 碰撞 哈希约定 树木 树木 树遍历 二叉树 二叉搜索树 堆 自平衡树 图表 图表 图形属性 图表示 图遍历 图形路径 算法案例研究 最短路径问题 背包问题 ...

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    JAVA课程设计题目及要求..doc

    能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。 2、编写一个计算器程序 要求: 界面模拟Windows中的计算器程序。 实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

Global site tag (gtag.js) - Google Analytics