53 | 算法实战(二):剖析搜索引擎背后的经典数据结构和算法
该思维导图由 AI 生成,仅供参考
整体系统介绍
- 深入了解
- 翻译
- 解释
- 总结
搜索引擎的设计与实现涉及到大量的算法和数据结构,体现了其技术含量和复杂性。本文以搜索引擎为例,介绍了数据结构和算法在搜索引擎中的应用,包括搜集、分析、索引和查询四个部分。在搜集阶段,搜索引擎利用广度优先搜索策略爬取网页,将互联网视为有向图,介绍了搜集阶段涉及的关键技术细节。在分析阶段,搜索引擎需要对网页进行离线分析,包括抽取网页文本信息和分词并创建临时索引。文章还介绍了分词并创建临时索引、索引和查询阶段的具体实现方法,涉及到的数据结构和算法有:字典、Trie树、归并排序、倒排索引等。通过对这些技术细节的介绍,读者可以快速了解搜索引擎的基本原理和相关技术特点,为进一步深入学习和实践提供了基础。搜索引擎选择广度优先策略来爬取网页,而不是深度优先策略,是因为广度优先能够更全面地覆盖网页,符合搜索引擎的需求。此外,搜索引擎在结果显示的时候,支持摘要信息和网页快照,只需要对设计思路稍加改造,就可以支持这两项功能。整体而言,本文介绍了搜索引擎的技术特点和基本原理,为读者提供了深入了解和学习的基础。
《数据结构与算法之美》,新⼈⾸单¥68
全部留言(52)
- 最新
- 精选
- 天凉好个秋倒排索引中记录了每个单词以及包含它的网页列表,想问一下“倒排索引”这个名字是怎么来的?其中的“倒排”体现在哪里呢?
作者回复: 正排-》文档包含哪些单词 倒排-》单词被哪些文档包含
2019-01-284114 - 纯洁的憎恶搜集:将广度优先搜索的优先队列存储在磁盘文件links.bin(如何解析网页内的链接?),有布隆过滤器判重并定期写入磁盘文件bloom_filter.bin,将访问到的原始网页数据存入磁盘文件doc_raw.bin,计数分配网页编号并与其链接对应关系存入磁盘文件doc_id.bin。 分析:首先抽取网页文本信息,依据HTML语法规范,通过AC自动机多模式串匹配算法,去除网页中格式化部分,提取文本内容。然后分词并创建临时索引,分词的目的是找到能够标识网页文本“身份”的特征,可借助词库(通过Trie树实现)搜索文本中与词库匹配的最长词语,因为一般情况下越长信息越多,越剧有表征能力(为什么英文简单?)。分词完成后得到一组用于表征网页的单词列表,与其对应的网页编号存入磁盘文件tmp_index.bin作为临时索引,为节省空间单词是以单词编号的形式写入,单词文本与编号的对应关系写入磁盘文本term_id.bin。 索引:通过临时索引构建倒排索引文件index.bin。倒排索引其实是以单词为主键,将临时索引中的多个相同单词行合并为一行。通过以单词为主键的排序算法,可以将相同单词的行连续排列在一起,之后只要将单词相同的连续行合并为一行即可。由于数据量大,应采用分治策略。最后建立所有单词在倒排索引文件中位置的索引文件term_offset.bin,以方便快速查找。 查询:先对搜索条件文本做分词处理,然后去term_id.bin查单词们的编号,再查term_offset.bin找到单词们在倒排索引中的位置,到index.bin找到每个单词对应的网页编号,通过网页出现次数、预评权重和统计算法(如pagerank、tf-idf)计算网页的优先次序并输出。最后在doc_in.bin中找到网页链接按序输出显示给用户。 这样理解对不?
作者回复: 赞
2019-01-28236 - steve老师好 看了这篇之后我也想实现一个搜索引擎 现在很多公司里应该都用的cpp吧 我也想用cpp实现一个 请问下有没有可参考的代码 怕写到一半写不下去😂
作者回复: 我写过一个5万行的搜索引擎,cpp实现的,还有对应的几十页的文档,等过一整子整理一下放到公号众里:小争哥
2019-10-21526 - alic有没有代码实现的例子?
作者回复: 木有。等我有空了可以写下分享出来。
2019-01-286 - 往事随风,顺其自然可以讲讲到排序索引和普通索引区别?
作者回复: 啥事排序索引和普通索引呢?我文中好像没讲到呢
2019-01-293 - Zhangxuesong爬虫按照广度优先的策略,不停地从队列中取出链接,然后“取“ -> “去“ 爬取对应的网页,解析出网页里包含的其他网页链接,再将解析出来的链接添加到队列中。 上面这段话里面有个词不是很通, 不知道后面还能修正么。
作者回复: 编辑,麻烦修改下错别字,多谢。
2019-04-171 - 超威丶请问倒排索引这种结构比b树快是不是依赖于它的数据结构优势?
作者回复: 是的,两个东西的应用场景不大一样的。
2019-03-071 - 蚂蚁内推+v王老师,字典使用最长匹配?那例子中的”中国“”中国人“不就无法匹配到了吗
作者回复: 在这个例子中是的。“中国人好样的”这个句子分词就可以匹配到“中国人”
2019-01-281 - Lukia老师好,本文中好像没有看到ac自动机的应用
作者回复: 哦哦哦 你的意思是搜索引擎会用到ac自动机是吧
2019-09-012 - Kudo原理是看懂了,实现起来肯定会遇到各种各样的问题,手动实现一遍是有必要的,如果老师能提供一个参考代码就更好了。
作者回复: 这个写起来比较多,我有个5万+行的C++代码,估计看起来也比较费劲!你还是自己写吧:)
2019-01-29