布尔代数与网页搜索

网页搜索和布尔代数


借用百科布尔代数内容如下:

基本理论

在布尔代数上的运算被称为AND(与)、OR(或)和NOT(非)。
代数结构要是布尔代数,这些运算的行为就必须和两元素的布尔代数一样(这两个元素是TRUE(真)和FALSE(假))。亦称逻辑代数.

与:只有两个值都是true时结果才为true
或:只要有一个为true结果就为true
非:取相反值


参考《数学之美》
现在我们看看文献检索和布尔运算的关系。对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关

键词,如果一篇文献含有它,我们相应地给这篇文献一个逻辑值 -- 真(TRUE,或 1),否则,给一个逻辑值 -- 假

(FALSE,

或0)。比如我们要找有关原子能应用的文献,但并不想知道如何造原子弹。我们可以这样写一个查询语句“原子能

AND 应用 AND (NOT 原子弹)”,表示符合要求的文献必须同时满足三个条件:

- 包含原子能

- 包含应用

- 不包含原子弹

一篇文献对于上面每一个条件,都有一个 True 或者 False 的答案,根据上述真值表就能算出每篇文献是否是要找

的。



早期的文献检索查询系统大多基于数据库,严格要求查询语句符合布尔运算。今天的搜索引擎相比之下要聪明的多

,它自动把用户的查询语句转换成布尔运算的算式。当然在查询时,不能将每篇文献扫描一遍,来看看它是否满足

上面三个条件,因此需要建立一个索引。



最简单索引的结构是用一个很长的二进制数表示一个关键字是否出现在每篇文献中。有多少篇文献,就有多少位数

,每一位对应一篇文献,1 代表相应的文献有这个关键字,0

代表没有。比如关键字“原子能”对应的二进制数是0100100001100001...,表示第二、第五、第九、第十、第十六

篇文献包含着个关键字。注意,这个二进制数非常之长。同样,我们假定“应用”对应的二进制数是

0010100110000001...。那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算

AND。根据上面的真值表,我们知道运算结果是0000100000000001...。表示第五篇,第十六篇文献满足要求。



注意,计算机作布尔运算是非常非常快的。现在最便宜的微机都可以一次进行三十二位布尔运算,一秒钟进行十亿

次以上。当然,由于这些二进制数中绝大部分位数都是零,我们只需要记录那些等于1的位数即可。于是,搜索引擎

的索引就变成了一张大表:表的每一行对应一个关键词,而

每一个关键词后面跟着一组数字,是包含该关键词的文献序号。



对于互联网的搜索引擎来讲,每一个网页就是一个文献。互联网的网页数量是巨大的,网络中所用的词也非常非常

多。因此这个索引是巨大的,在万亿字节这个量级。早期的搜索引擎(比如 Alta Vista

以前的所有搜索引擎),由于受计算机速度和容量的限制,只能对重要的关键的主题词建立索引。至今很多学术杂

志还要求作者提供 3-5

个关键词。这样所有不常见的词和太常见的虚词就找不到了。现在,为了保证对任何搜索都能提供相关的网页,所

有的搜索引擎都是对所有的词进行索引。为了网页排名方便,索引中还需存有大量附加信息,诸如每个词出现的位

置、次数等等。因此,整个索引就变得非常之大,以至于不可

能用一台计算机存下。大家普遍的做法就是根据网页的序号将索引分成很多份(Shards),分别存储在不同的服务器

中。每当接受一个查询时,这个查询就被分送到许许多多服务器中,这些服务器同时并行处理用户请求,并把结果

送到主服务器进行合并处理,最后将结果返回给用户。



不管索引如何复杂,查找的基本操作仍然是布尔运算。布尔运算把逻辑和数学联系起来了。它的最大好处是容易实

现,速度快,这对于海量的信息查找是至关重要的。它的不足是只能给出是与否的判断,而不能给出量化的度量。

因此,所有搜索引擎在内部检索完毕后,都要对符合要求的网

页根据相关性排序,然后才返回给用户。




其实布尔运算只是在搜索方面的一个应用,在电路电子方面有更多的应用(例如开关电路)
而对于我们程序员来说最常用的也是这个布尔代数,因为我们程序中需要大量的逻辑判断(与,或,非)
再例如我们知道的bloomfilter,不也是按位布尔操作进行的与吗

你可能感兴趣的:(互联网中的数学)