`
zxh116116
  • 浏览: 11361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引

 
阅读更多
转自http://www.google.com.hk/ggblog/googlechinablog/2006/05/blog-post_3044.html
[建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。我们在介绍 Google Page Rank (网页排名) 时已经谈到了一些排序的问题,这里我们谈谈索引问题,以后我们还会谈如何度量网页的相关性,和进行网页自动下载。]

世界上不可能有比二进制更简单的计数方法了,也不可能有比布尔运算更简单的运算了。尽管今天每个搜索引擎都宣称自己如何聪明、多么智能化,其实从根本上讲都没有逃出布尔运算的框框。

布尔(George Boole) 是十九世纪英国一位小学数学老师。他生前没有人认为他是数学家。布尔在工作之余,喜欢阅读数学论著、思考数学问题。1854 年“思维规律”(An Investigation of the Laws of Thought, on which are founded the Mathematical Theories of Logic and Probabilities)一书,第一次向人们展示了如何用数学的方法解决逻辑问题。

布尔代数简单得不能再简单了。运算的元素只有两个1 (TRUE, 真) 和 0
(FALSE,假)。基本的运算只有“与”(AND)、“或” (OR) 和“非”(NOT) 三种(后来发现,这三种运算都可以转换成“与”“非” AND-NOT一种运算)。全部运算只用下列几张真值表就能完全地描述清楚。

AND | 1 0
-----------------------
1 | 1 0
0 | 0 0
这张表说明如果 AND 运算的两个元素有一个是 0,则运算结果总是 0。如果两个元素都是 1,运算结果是 1。例如,“太阳从西边升起”这个判断是假的(0),“水可以流动”这个判断是真的(1),那么,“太阳从西边升起并且水可以流动”就是假的(0)。

OR | 1 0
-----------------------
1 | 1 1
0 | 1 0
这张表说明如果OR运算的两个元素有一个是 1,则运算结果总是 1。如果两个元素都是 0,运算结果是 0。比如说,“张三是比赛第一名”这个结论是假的(0),“李四是比赛第一名”是真的(1),那么“张三或者李四是第一名”就是真的(1)。

NOT |
--------------
1 | 0
0 | 1
这张表说明 NOT 运算把 1 变成 0,把 0 变成 1。比如,如果“象牙是白的”是真的(1),那么“象牙不是白的”必定是假的(0)。

读者也许会问这么简单的理论能解决什么实际问题。布尔同时代的数学家们也有同样的问题。事实上在布尔代数提出后80 多年里,它确实没有什么像样的应用,直到 1938 年香农在他的硕士论文中指出用布尔代数来实现开关电路,才使得布尔代数成为数字电路的基础。所有的数学和逻辑运算,加、减、乘、除、乘方、开方等等,全部能转换成二值的布尔运算。

现在我们看看文献检索和布尔运算的关系。对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关键词,如果一篇文献含有它,我们相应地给这篇文献一个逻辑值 -- 真(TRUE,或 1),否则,给一个逻辑值 -- 假(FALSE, 或0)。比如我们要找有关原子能应用的文献,但并不想知道如何造 原子弹。我们可以这样写一个查询语句“原子能 AND 应用 AND (NOT 原子弹)”,表示符合要求的文献必须同时满足三个条件:
- 包含原子能
- 包含应用
- 不包含原子弹
一篇文献对于上面每一个条件,都有一个 True 或者 False 的答案,根据上述真值表就能算出每篇文献是否是要找的。

早期的文献检索查询系统大多基于数据库,严格要求查询语句符合布尔运算。今天的搜索引擎相比之下要聪明的多,它自动把用户的查询语句转换成布尔运算的算式。当然在查询时,不能将每篇文献扫描一遍,来看看它是否满足上面三个条件,因此需要建立一个索引。

最简单索引的结构是用一个很长的二进制数表示一个关键字是否出现在每篇文献中。有多少篇文献,就有多少位数,每一位对应一篇文献,1 代表相应的文献有这个关键字,0 代表没有。比如关键字“原子能”对应的二进制数是0100100001100001...,表示第二、第五、第九、第十、第十六篇文献包含着个关键字。注意,这个二进制数非常之长。同样,我们假定“应用”对应的二进制数是 0010100110000001...。那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算 AND。根据上面的真值表,我们知道运算结果是0000100000000001...。表示第五篇,第十六篇文献满足要求。

注意,计算机作布尔运算是非常非常快的。现在最便宜的微机都可以一次进行三十二位布尔运算,一秒钟进行十亿次以上。当然,由于这些二进制数中绝大部分位数都是零,我们只需要记录那些等于1的位数即可。于是,搜索引擎的索引就变成了一张大表:表的每一行对应一个关键词,而每一个关键词后面跟着一组数字,是包含该关键词的文献序号。

对于互联网的搜索引擎来讲,每一个网页就是一个文献。互联网的网页数量是巨大的,网络中所用的词也非常非常多。因此这个索引是巨大的,在万亿字节这个量级。早期的搜索引擎(比如 Alta Vista 以前的所有搜索引擎),由于受计算机速度和容量的限制,只能对重要的关键的主题词建立索引。至今很多学术杂志还要求作者提供 3-5 个关键词。这样所有不常见的词和太常见的虚词就找不到了。现在,为了保证对任何搜索都能提供相关的网页,所有的搜索引擎都是对所有的词进行索引。为了网页排名方便,索引中还需存有大量附加信息,诸如每个词出现的位置、次数等等。因此,整个索引就变得非常之大,以至于不可能用一台计算机存下。大家普遍的做法就是根据网页的序号将索引分成很多份(Shards),分别存储在不同的服务器中。每当接受一个查询时,这个查询就被分送到许许多多服务器中,这些服务器同时并行处理用户请求,并把结果送到主服务器进行合并处理,最后将结果返回给用户。

不管索引如何复杂,查找的基本操作仍然是布尔运算。布尔运算把逻辑和数学联系起来了。它的最大好处是容易实现,速度快,这对于海量的信息查找是至关重要的。它的不足是只能给出是与否的判断,而不能给出量化的度量。因此,所有搜索引擎在内部检索完毕后,都要对符合要求的网页根据相关性排序,然后才返回给用户。
分享到:
评论

相关推荐

    编程语言发展史:布尔代数和机器语言

    布尔代数和机器语言是计算机科学的基石,这两者的发展紧密相连,共同推动了编程语言的进步。布尔代数,由乔治·布尔在19世纪创立,通过将逻辑运算转化为代数形式,为现代计算机科学提供了理论基础。逻辑运算符如AND...

    程序员的数学系列书籍介绍-2021-01-01.pdf

    - **书籍名称**:“程序员的数学系列书籍介绍-2021-01-01” - **标签**:NOI NOIP - **主要内容**:该文件包含了多本与编程、数学相关的书籍介绍,覆盖了从基础编程入门到高级数学概念的学习资料。 #### 二、编程...

    逻辑计算器:布尔代数运算,逻辑门的设计

    逻辑计算器

    离散数学,布尔代数,数理逻辑

    根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ...以上内容覆盖了离散数学中的核心概念,包括布尔代数、集合论的基础知识以及相关的运算和定律,这些都是计算机科学中不可或缺的基础知识。

    布尔代数和数字逻辑 计算机组成原理PPT教案.pptx

    通过本教案,学生将掌握布尔代数和数字逻辑的基本概念和应用,能够设计和分析简单的数字逻辑电路。 本教案是计算机组成原理课程的重要组成部分,对学生学习计算机组成原理和数字逻辑电路设计有重要的参考价值。 ...

    布尔:布尔代数计算器和助手

    布尔bool是WIP布尔代数计算器和证明助手。 目前,它可以列出和等于公式的真值表,并应用一些布尔代数定理来操纵这些公式。目标最终目标是拥有一个命令行实用程序或解析器,它可以检查和显示布尔公式的减少量。 这样...

    格与布尔代数

    又叫晶体点阵理论。在数学中,格是其非空有限子集都有一个上确界(叫并)和一个下确界(叫交)的偏序集合(poset)。...半格包括了格,依次包括海廷代数和布尔代数。这些"格样式"的结构都允许序理论和抽象代数的描述。

    Python-程序员数学指南各章的Python实现代码

    《程序员数学指南》是一本旨在帮助IT从业者理解并应用数学概念的书籍,它将复杂的数学原理与实际编程相结合,使得抽象的数学知识变得更具实践意义。这个压缩包包含的Python实现代码是书中各个章节理论知识的具体应用...

    BooleanAssistant-1.5.7.zip

    BooleanAssistant 是您最好的招聘和采购助手,用于生成布尔搜索字符串并查找人们的电子邮件。 描述: BooleanAssistant,您最好的布尔生成器和电子邮件猎人。 BooleanAssistant是您最好的招聘和采购助手,用于生成...

    buerdaishu.rar_布尔代数

    布尔代数,也称为布尔运算或逻辑代数,是由英国数学家乔治·布尔在19世纪中期创立的一门数学分支,它主要研究集合的逻辑运算。在计算机科学中,布尔代数扮演着至关重要的角色,因为它是数字电路设计、编程语言、数据...

    深入搜索引擎--海量信息的压缩、索引和查询

    《深入搜索引擎:海量信息的压缩、索引和查询》是斯坦福大学信息检索和挖掘课程的首选教材之一,并已成为全球主要大学信息检索的主要教材。《深入搜索引擎:海量信息的压缩、索引和查询》理论和实践并重,深入浅出地给...

    论文研究-效应代数成为布尔代数的充要条件.pdf

    因此,对量子逻辑中基本代数结构的研究,如效应代数和布尔代数的关系,为量子计算机的设计和实现提供了理论基础。 关键词效应代数、布尔代数、Well Inside关系是本文的主要概念。文章的结论是,通过中心元和Well ...

    布尔代数和逻辑门

    数字运算是由二进制数制系统完成的,而在二进制系统中变量 X的值只能...本章将 采用1 9世纪英国数学家乔治・布尔发展起来的开关代数来研究二进制数的行为。 此数学分支 包含在布尔代数的理论中,它是现代逻辑设计的基础

    布尔代数 (古德斯坦因)

    布尔代数 古德斯坦因

    离散数学讲义Lecture Notes in Discrete Mathematics

    - 离散数学是一门研究可以被区分和分离的对象的数学学科,主要关注离散量而非连续量。 - 对于计算机科学领域的学生而言,离散数学提供了理论基础和技术工具。 - **适用对象:** - 本书旨在为大二或初中水平的...

    boolean-retrieval-engine:布尔搜索引擎的 Python 实现

    布尔检索引擎这是用于布尔检索的索引和搜索技术的 Python 实现。 布尔查询包含运算符AND 、 OR 、 NOT 、 (和) 。 这是有关布尔检索及其技术的更多信息的良好 。要求已安装 用于索引和搜索以数字命名的组成文档的...

    大学离散数学所有ppt最后汇总版.zip

    离散数学是计算机科学中的基础学科,它研究的是非连续对象的结构和性质。这个名为“大学离散数学所有ppt最后汇总版.zip”的压缩包文件集合了离散数学各个重要主题的PPT,旨在全面覆盖这门课程的核心内容。下面将详细...

    基于LUCENE的搜索引擎的设计与实现源代码

    《基于LUCENE的搜索引擎设计与实现》 搜索引擎是互联网信息时代的重要工具,它使得海量数据的检索变得高效便捷。本项目聚焦于基于Apache LUCENE的搜索引擎设计与实现,LUCENE是一款强大的全文检索库,由Java编写,...

Global site tag (gtag.js) - Google Analytics