1701003470
谷歌的搜索算法给每个网页打一个分数,这个分数叫作“网页排序号”,是一个介于0和1之间的数字。“网页排序号”考虑一个假想的上网者,他会在这个网页上花掉的时间占总上网时间的多大比例?通过回答这个问题,我们可以度量一个网页相对于其他网页的重要程度。这个假想的上网者是这样上网的:如果一个网页上有另外几个网站的链接,他就会从这些链接中随机选择一个点击,点击每个链接的概率相等。在这个假设条件下,一个网页的访问量越大(我们假想的上网者的访问量,不是实际互联网用户的访问量),这个网站就越重要。
1701003471
1701003472
因为“网页排序号”的定义是(假想上网者)访问这个网站的时间占总上网时间的比例,所以网络上所有网页的“网页排序号”的总和必然为1。根据守恒定律,我们还可以把“网页排序号”想象成一股水流,这股水流在网页间流动,从体验不佳的网页不断地向体验良好的网页汇聚。谷歌的算法考察的就是,从长期来看,这股水流如何分配到网络中的各个网页中。
1701003473
1701003474
为了算出水流的分配,我们需要一个巧妙的迭代算法。首先,我们对每个网页的“网页排序号”进行一个粗略的估计,用这个猜测值作为迭代的初始值。然后,我们考虑水流如何不断地分流到新的网页中,规则是:如果一个网页上有另外几个网站的链接,假设上网者就从这些链接中随机选择一个点击,点击每个链接的概率相等。这个过程不断地进行下去,直到水停止流动,每个网页的访问量稳定下来。
1701003475
1701003476
一开始,谷歌的算法比较宽泛:每个网页的初始值都一样。比如,我们的迷你网络共有3个网页,那么每个网页的“网页排序号”的初始值都是1/3。
1701003477
1701003478
1701003479
1701003480
1701003481
然后,我们开始进行迭代计算,以便更好地估计出每个网页在网络中的重要程度。在每一轮迭代计算中,每个网页把上一轮终止时的水量(网页排序号)平均分流到它链接的各个网页中。在我们的模型里面,第一轮结束时,X的网页排序号仍然是1/3,因为只有网页Z向网页X输水,网页X从网页Z处获得了1/3的水量。网页Y的水量则下降为1/6,因为Y只获得了X一半的水量。X的另一半水量(1/6)流向了Z,同时Z还从Y处获得了1/3的水量,所以Z获得的总水量是1/2。第一轮结束时,网页X、Y和Z的水量如下图所示。
1701003482
1701003483
1701003484
1701003485
1701003486
第一轮结束,第二轮开始,水量分流的规则和上一轮一样。如果我们用(x,y,z)来表示网页X、Y、Z当前的网页排序号,那么分流的情况可以用如下的方程式来描述:
1701003487
1701003488
1701003489
1701003490
1701003491
x‘、y‘、z‘分别表示x、y、z更新后的值。这种迭代算法可以用Excel办公软件完成(对于我们的迷你网络,其实手算就可以了)。
1701003492
1701003493
经过10轮迭代计算,我们会发现页面X、Y、Z的网页排序号的值趋于稳定,再继续进行迭代计算的话,每轮数值的改变很小。10轮迭代计算之后,X获得40.6%的水量,Y获得19.8%的水量,Z获得39.6%的水量。这3个数字分别趋近于40%、20%、40%。我们可以猜测,这些数值已经向均衡状态收敛,而均衡状态的值正是40%、20%、40%。
1701003494
1701003495
谷歌也是利用这样的算法,把均衡状态下的极限值记为每个网页的网页排序号。
1701003496
1701003497
1701003498
1701003499
1701003500
这个算法的结论是,在这个迷你网络中,虽然有两个外链接指连向网页Z,但是网页X和网页Z其实一样重要。这个结果并不奇怪,因为Z用全部流量支持X,而X却只用一半流量回报Z,把另一半给了Y。这也解释了为什么网页Y的最终得分是X和Z的1/2。
1701003501
1701003502
神奇的是,这个最终得分可以直接算出,而不需要经过这个复杂的迭代计算过程。想一想,均衡的定义是什么?如果系统不再发生变化,那就说明系统已经达到了稳定的“均衡状态”,所以均衡状态的定义就是x‘=x,y‘=y,z‘=z。把这3个方程式代入上面的方程组,我们就得到:
1701003503
1701003504
1701003505
1701003506
1701003507
很容易解出x= 2y=z。最后,别忘了x、y、z这3个数字之和为1。所以,最后的答案是x= 2/5,y= 1/5,z= 2/5。这个得数和我们迭代计算的结果是完全一致的。
1701003508
1701003509
这道题已经解决了,接下来我们应该研究一下这道题和线性代数到底有什么关系。不管是表示均衡状态的方程组,还是上面表示x、y、z更新变化的方程组都是典型的线性方程式。这种方程式之所以叫作线性方程式,是因为它们和直线有关。在这些方程式里,所有变量都是一次方的形式,与中学代数课上的直线方程式(一次方程式)y=mx+b的形式完全一样。
1701003510
1701003511
与非线性方程式相比(比如含有x2、yz、sinx等项的方程),线性方程式是比较容易求解的。但是如果线性方程组有很多个未知数,问题就变得比较复杂,互联网的情况正是如此。线性代数的核心目标之一,就是不断发明更快、更有效率的算法,去求解巨大的线性方程组。线性方程组解法、算法上的细微提高,就会给我们的日常生活带来极大的便利:航班排期会更合理,图像压缩技术会更有效率,网络搜索会更快速准确。
1701003512
1701003513
线性代数在现实世界中最大的胜利,可能要算网络搜索问题的解决了。“什么样的网页是最佳网页呢?最佳网页是那些链接着其他最佳网页的网页”,这句话用数学语言来表述,就是网页排序号的线性方程组。
1701003514
1701003515
谷歌使用的线性方程组和我们上面求解的方程组并无本质区别,只不过我们的方程组只有3个未知数,而谷歌要解决的方程组却有数十亿个未知数。当然,对谷歌来说,解出这数十亿个未知数,意味着会有数十亿美元的利润入账。
1701003516
1701003517
1701003518
1701003519
[
上一页 ]
[ :1.70100347e+09 ]
[
下一页 ]