以下内容学习、摘录自《数学之美》
很多想通过作者了解google的独门搜索技术,但对作者只讲述简单的原理感到失望。其实,技术分为“术”和“道”,具体做事方法是“术”,做事的原理和原则是“道”。希望作者介绍“术”的人是像走捷径,但是真正做好一件事情没有捷径,离不开一万小时的专业训练和努力。
搜索引擎的原理其实非常简单,建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。这就是搜索的“道”,所有的搜索服务都可以在这三个基本服务的基础上很快实现,这就是搜索的“术”。首先从介绍索引出发,因为它最基础,也最重要。
二进制作为一个计数系统,则是公元前2-5世纪时由印度学者完成的,但是他们没有使用0和1计数。到17世纪,德国伟大的数学家莱布尼兹( Gottfried Leibniz)进一步完善了二进制,并且用0和1表示它的两个数字,成为我们今天使用的二进制。二进制除了是一种计数的方式外,它还可以表示逻辑的“是”与“非”。这第二个特性在索引中非常有用。布尔运算是针对二进制,尤其是二进制第二个特性的运算,它很简单,可能没有比布尔运算更简单的运算了。
布尔( George Boole)是19世纪英国的一位中学数学老师,创办过一所中学,也当过教授。但生前没有人认为他是数学家。(英国另一位生前没有被公认为科学家的是著名物理学家焦耳,虽然他生前已经是英国皇家科学院院士,但是他的公认身份是啤酒商。)布尔在工作之余,喜欢阅读数学论著,思考数学问题。1854年,布尔的《思维规律》一书出版,第一次向人们展示了如何用数学的方法解决逻辑问题。在此之前,人们普遍认为数学和逻辑是两个不同的学科,今天联合国教科文组织依然把它们严格分开。
布尔代数简单得不能再简单了。运算的元素只有两个:1(TRUE,真)和0( FALSE,假)。基本的运算只有“与”(AND)、“或”(OR)和“非”(NOT)三种。
这么简单的理论能解决什么实际问题?和布尔同时代的数学家们也有同样的疑问。事实上,在布尔代数提出后80多年里,它确实没有什么像样的应用,直到1938年香农在他的硕士论文中指出用布尔代数来实现开关电路,才使得布尔代数成为数字电路的基础。所有的数学和逻辑运算,加、减、乘、除、乘方、开方,等等,全都能转换成二值的布尔运算。正是依靠这一点,人类用一个个开关电路最终“搭出”电子计算机。数学的发展实际上是不断地抽象和概括的过程,这些抽象了的方法看似离生活越来越远,但是它们最终能找到适用的地方,布尔代数便是如此。
现在看看文献检索和布尔运算的关系。对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关键词,如果一篇文献含有它,我们则相应地给篇文献一个逻辑值“真”(TRUE或1),否则,给一个逻辑值“假”( FALSE或0)。比如要找有关原子能应用的文献,但并不想知道如何造原子弹,可以这样写一个查询语句“原子能AND应用AND(NOT原子弹)”。
布尔代数对于数学的意义等同于量子力学对于物理学的意义,它们将我们对世界的认识从连续状态扩展到离散状态。在布尔代数的“世界”里,万物都是可以量子化的,从连续的变成一个个分离的,它们的运算“与、或、非”也就和传统的代数运算完全不同了。现代物理的研究成果表明,我们的世界实实在在是量子化的而不是连续的。
大部分使用搜索引擎的人都会吃惊为什么它能在零点零几秒钟内找到成千上万甚至上亿的搜索结果。显然,如果是扫描所有的文本,计算机扫描的速度再快也不可能做到这一点,这里面一定暗藏技巧。这个技巧就是建索引。这就如同我们科技读物末尾的索引,或者图书馆的索引。
Google有一道面试产品经理的考题,就是“如何向你的奶奶解释搜索引擎”。大部分候选人都是试图从互联网、搜索等产品的技术层面给出解释,如此,这道题基本通不过。好的回答是拿图书馆的索引卡片做类比。每个网站就像图书馆里的一本书,我们不可能在图书馆书架上一本本地找,而是要通过搜索卡片找到它的位置,然后直接去书架上拿。
图书馆的索引卡片当然无法进行复杂的逻辑运算。但是,当信息检索进入计算机时代后,图书的索引便不再是卡片,而是基于数据库的。数据库的查询语句(SQL)支持各种复杂的逻辑组合,但是背后的基本原理是基于布尔运算的,至今如此。
布尔代数非常简单,但是对数学和计算机发展的意义重大,它不仅把逻辑和数学合二为一,而且给了我们一个看待世界的全新视角,开创了今天数字化的时代。伟大的科学家牛顿说过:“真理在形式上从来是简单的,而不是复杂和含混的。”( Truth is ever to be found in simplicity, and not in the multiplicity andcontusion of things.)
网友评论