打字猴:1.700515511e+09
1700515511 在这一次的机缘巧合下,本的奶奶将谷歌的工作人员推向台前。谷歌的搜索引擎每15秒就要处理数百万次请求,这样的数量任何公司都无法做到人工回复。那么,如果谷歌不是拥有互联网神奇魔法的精灵,它是如何成功地找到你想要的答案呢?
1700515512
1700515513 这一切归功于1996年拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)在斯坦福大学的宿舍里发明的强大而精妙的算法。他们最初想把新算法命名为“网络爬虫”(Backrub),但最终还是决定叫“谷歌”(Google),其灵感来自1后面的100个零。他们的目标是找到一种对互联网上所有的页面进行排序的方法,以帮助大家在这个不断增长的海量数据库中进行检索,所以起这个代表巨大数字的名字似乎特别贴切,而且也很酷炫。
1700515514
1700515515 这并不意味其他的算法不能做这件事,但是那些算法在概念上非常简单。如果你想搜索更多关于“有礼貌的奶奶和谷歌”的信息,现有的算法会将所有包含这些关键词的页面识别出来,并按顺序排列,搜索词出现频率最高的网站会被放在最顶部。
1700515516
1700515517 这种方式虽然有效,却容易被黑客攻击:任何一个花店老板只要在网页的元数据中数千遍地插入关键词“母亲节鲜花”,那么每个想买花的子女电脑上的搜索结果的最顶端就会出现这个花店的链接。你肯定不希望自己的搜索被精明的人设计或者操纵,那么,如何才能对一个网站的重要性给予公正的评价呢?如何判断哪些网站该被过滤掉呢?
1700515518
1700515519 佩奇和布林想出一个聪明的方法:如果一个网站有很多链接指向它,就暗示着其他网站认为这个网站值得访问。其原理是通过其他网站的评估去衡量某个网站的重要性,或者说该网站的访问价值。但是,这种方式也有可能被黑客攻击,比如只需伪造出有1000个网站的链接指向这个花店就行了,这样也会使其被纳入搜索名录。
1700515520
1700515521 为了防止这种情况出现,他们决定给那些获得广泛好评,深受信赖的网站赋予更高的权重。
1700515522
1700515523 可这仍然会让他们面临一个挑战:如何客观评价一个网站的重要性?
1700515524
1700515525 以一个小型网络为例,如图4-2所示。首先,给每个网站设定相同的权重。然后,让我们把网站想象成一个桶,给每个桶里放8个球,表示网站的初始权重相同。现在,每个网站必须将球交给它链接的其他网站,如果链接多个网站,那么就将球均分给那些网站。如图4-3所示,由于网站A链接了网站B和网站C,它将为每个网站提供4个球;而网站B只链接了网站C,它就需要将拥有的8个球全部放入网站C的桶中。第1轮分配后,网站C得到的小球数最多。
1700515526
1700515527
1700515528
1700515529
1700515530 图 4-2
1700515531
1700515532 但是我们需要继续重复这个分配过程,因为现在位于最高排名的网站C链接了网站A,所以又会产生新的分配结果。9轮重复分配过程中各网站小球数量的变化情况如图4-4所示。
1700515533
1700515534
1700515535
1700515536
1700515537 图 4-3
1700515538
1700515539
1700515540
1700515541
1700515542 图 4-4
1700515543
1700515544 到这一步,它还算不上是一个特别好的算法,因为不稳定,并且效率相当低,没有达到理想算法的两个关键标准。佩奇和布林的洞见之伟大在于,他们意识到,需要找到一种方法,通过观察网络的连通性来分配球。结果,他们在线性代数中找到了一个诀窍,可以一步算出正确的分布情况。
1700515545
1700515546 这种算法从构建一个矩阵开始,该矩阵描述球在网站间的重新分配方式。矩阵的第1列表示球从网站A到其他网站的分配比例:0.5转到网站B,0.5转到网站C。由此,可以得到球的重分配矩阵:
1700515547
1700515548
1700515549
1700515550
1700515551 难点是寻找这个矩阵特征值为1的特征向量,这是一个与该矩阵相乘不会发生改变的列向量。找到特征向量的方法我们在大学本科时就学过了,因此在这个网络中我们发现,通过重分配矩阵找到的列向量非常稳定:
1700515552
1700515553
1700515554
1700515555
1700515556 注:矩阵的乘法运算规则是:
1700515557
1700515558
1700515559
1700515560
[ 上一页 ]  [ :1.700515511e+09 ]  [ 下一页 ]