`
nid007
  • 浏览: 45485 次
  • 性别: 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的结构进行前缀匹配。

相关推荐

    算法分析与设计-实验二 二分查找实验报告.docx

    二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...

    关于二分查找的那些事1

    二分查找,也被称为折半查找,是一种在有序数组中高效地查找特定元素的搜索算法。这个算法基于分治策略,将查找问题划分为较小的子问题,直到找到目标值或者确定目标值不存在。二分查找的核心思想是每次比较中间元素...

    基于Java的搜索自动提示 Autotips.zip

    5. **数据结构与算法**:为了高效地实现提示功能,可能需要使用到如Trie树(字典树)、哈希表或者二分查找等数据结构和算法。这些数据结构能帮助快速查找并返回匹配的搜索建议。 6. **异步处理**:为了避免阻塞用户...

    数据结构 实验4:查找的应用

    本次实验要求实现的是基于顺序表的二分查找。顺序表是一种基本的数据结构,其中的元素按照一定的顺序存储在连续的内存空间中。实验步骤如下: 1. **初始化顺序表**:通过`InitList`函数创建一个新的顺序表,设定...

    模仿百度搜索模糊提示

    1. 前缀匹配:搜索提示通常基于前缀匹配,即用户输入的字符序列是建议搜索词的前缀。例如,用户输入“微”,系统会查找所有以“微”开头的关键词。 2. 字符编码:为了处理中文字符,需要进行Unicode编码,确保系统...

    scratch编程项目源代码文件案例素材-二分查找法.zip

    二分查找法是一种基于比较的搜索算法,适用于已经排序的列表。它的基本思想是每次比较中间元素与目标值,如果目标值等于中间元素,则搜索结束;如果目标值小于中间元素,则在左半部分继续搜索;如果目标值大于中间...

    实验7查找算法的实现.doc

    在实际应用中,对于大量数据的查找操作,通常会使用更高效的算法,如二分查找、哈希查找等。然而,顺序查找在小规模数据或未排序数据中仍然是实用且易于理解的方法。这个实验为理解和实现基本查找算法提供了一个基础...

    数据结构查找操作

    本文介绍了基于C语言实现的数据结构查找操作,包括顺序表的基本定义、二分查找和顺序查找的具体实现。通过以上代码和解析,我们了解到数据结构查找操作的基本原理及其应用,特别是对于理解不同查找算法的时间效率有...

    折半查找 c语言函数

    折半查找,又称二分查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是通过比较中间元素和目标值,将搜索范围不断缩小为一半,直到找到目标值或者搜索范围为空。这种方法相对于线性查找有显著的效率...

    毕业设计:基于Python实现Windows10系统文件的快速查找.zip

    4. **文件搜索算法**:可能使用线性搜索、二分搜索或者更复杂的哈希表和Trie树等数据结构进行高效查找。 5. **用户界面(UI)设计**:可能使用Python的Tkinter或PyQt库构建简单的图形用户界面,让用户输入查询条件...

    (VC6.0++环境)折半查找算法的实现

    在计算机科学中,折半查找(也称为二分查找)是一种高效的查找算法,尤其适用于已排序的数据集合。本文将深入探讨折半查找算法的概念、原理、实现方式,并以C语言为例,详细介绍如何在VC6.0++环境中实现这一算法。 ...

    基于Visual C++实现的网络扫雷游戏

    7. **数据结构和算法**:为了高效地管理游戏状态,开发者可能会使用特定的数据结构(如数组、链表、队列等)和算法(如二分查找、深度优先搜索等)。 8. **错误处理和调试**:为了保证软件的稳定性和可靠性,开发者...

    用mfc制作的binsearch程序

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来实现一个二分查找算法,这在标题和描述中都有提及。MFC是微软为Windows应用程序开发提供的一套C++类库,它简化了窗口、对话框、菜单、...

    Guessing-Game:基于二分搜索算法的主机号码猜谜游戏

    在本项目"Guessing-Game:基于二分搜索算法的主机号码猜谜游戏"中,我们探讨了一个结合了计算机科学理论与娱乐元素的趣味应用。这个猜谜游戏是用Java编程语言实现的,核心算法是著名的二分搜索,它在寻找特定数值时...

    基于php设计的bbs的设计与实现

    5. 搜索功能:提供关键词搜索,方便用户查找感兴趣的主题或帖子。 6. 用户交互:包括点赞、举报、私信等,增强社区互动性。 7. 管理员功能:管理员可以管理用户、板块、主题和帖子,处理违规内容,保持论坛秩序。 ...

    易语言帮助文档例程 - 超级列表框查找表项

    5. **优化性能**:为了提高查找效率,可以使用二分查找法或者自定义的搜索算法,特别是当列表框中数据量较大时。 6. **错误处理**:确保程序在无匹配项或用户输入无效时给出合适的反馈,例如弹出消息框提示。 7. *...

    c++褊写的二分法查找程序

    该程序实现了基于C++语言的二分查找算法。二分查找是一种高效的查找方法,其基本思想是将有序数组分成大致相等的两部分,取中间位置的元素与查找值进行比较:如果该值正好等于中间位置的值,则查找成功;如果小于...

    基于C语言的名片管理系统设计与实现.rar

    4. 查找与排序:系统可能包含了查找特定名片和按不同标准排序名片的功能,这需要实现相应的算法,如线性搜索、二分查找或快速排序。 二、系统功能 1. 添加名片:用户可以输入新的名片信息,系统将其添加到数据库中...

    二分法排序

    在这个程序中,我们看到一个简单的二分查找(Binary Search)的实现,而非二分排序(Binary Sort)。二分查找通常用于查找操作,而二分排序则是将数据进行排序的一种算法,两者虽然都涉及到“二分”,但实际应用有所...

    易语言快速搜索磁盘

    5. **搜索算法优化**:除了基本的线性搜索,还可以使用更高效的搜索算法,如哈希表、二分查找等,来提升搜索效率。不过这需要根据具体需求和易语言的特性进行适配。 6. **内存管理**:在处理大量文件信息时,需要...

Global site tag (gtag.js) - Google Analytics