冰古blog » PHP+MySql » 2005 » 03 » 06 » Google PageRank的计算源代码

Google PageRank的计算源代码

看什么时候我也仔细研究一下,自己弄个查看pr的php程序!以下两篇文章基本相同,但也有一些不同,所以都转过来了!!这里有一个更全的,因为内容太多,不转过来了,自己去看吧http://bbs.z4.cn/showthread.php?threadid=1012

转载自:思路
内容如下:
这里仅仅给出了由http://meese.ath.cx/google/给出的源代码。至于具体如何获得最后的PR值的代码这里就不给出了。有心的网友应该能从下面的代码中找到解决办法,因为下面是详细的核心算法。

< ?php
/*

This code is released unto the public domain
*/
header(“Content-Type: text/plain; charset=utf-8”);
define(‘GOOGLE_MAGIC’, 0xE6359A60);

//unsigned shift right
function zeroFill($a, $b){
$z = hexdec(80000000);
if ($z & $a){
$a = ($a>>1);
$a &= (~$z);
$a |= 0×40000000;
$a = ($a>>($b-1));
}else{
$a = ($a>>$b);
}
return $a;
}

function mix($a,$b,$c){
$a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
$b -= $c; $b -= $a; $b ^= ($a< <8);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
$a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
$b -= $c; $b -= $a; $b ^= ($a<<16);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
$a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
$b -= $c; $b -= $a; $b ^= ($a<<10);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,15));

return array($a,$b,$c);
}

function GoogleCH($url, $length=null, $init=GOOGLEMAGIC) {
if(isnull($length)) {
$length = sizeof($url);
}
$a = $b = 0×9E3779B9;
$c = $init;
$k = 0;
$len = $length;
while($len >= 12) {
$a += ($url[$k+0] +($url[$k+1]< <8) +($url[$k+2]<<16) +($url[$k+3]<<24));
$b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
$c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
$mix = mix($a,$b,$c);
$a = $mix0; $b = $mix1; $c = $mix2;
$k += 12;
$len -= 12;
}

$c += $length;
switch($len){ /* all the case statements fall through /
case 11: $c+=($url[$k+10]<<24);
case 10: $c+=($url[$k+9]<<16);
case 9 : $c+=($url[$k+8]<<8);

/ the first byte of c is reserved for the length /
case 8 : $b+=($url[$k+7]<<24);
case 7 : $b+=($url[$k+6]<<16);
case 6 : $b+=($url[$k+5]<<8);
case 5 : $b+=($url[$k+4]);
case 4 : $a+=($url[$k+3]<<24);
case 3 : $a+=($url[$k+2]<<16);
case 2 : $a+=($url[$k+1]<<8);
case 1 : $a+=($url[$k+0]); / case 0: nothing left to add /
}
$mix = mix($a,$b,$c);
echo “nnn”; printf(“a = %unb = %unc = %unnn”, $mix0,$mix1,$mix2);
/——————————————————————report the result */
return $mix2;
}

//converts a string into an array of integers containing the numeric value of the char
function strord($string) {
for($i=0;$i $result[$i] = ord($string{$i});
}
return $result;
}
// http://www.example.com/ – Checksum: 6540747202
$url = ‘info:’.$_GET[‘url’];
print(“url:t{$_GET[‘url’]}n”);
$ch = GoogleCH(strord($url));
printf(“ch:t6%unnn”,$ch);
?>

One Response to “Google PageRank的计算源代码”

  1. 活力永升 says:

    测试一下trackback功能

    不要笑我土。。

    我确实刚刚知道什么是trackback。。

    所以在网上找了一个可以trackback的blog。测试一下。。。:)

Leave a Reply