Bölümler | Kategoriler | Konular | Üye Girişi | İletişim


PageRank'ın Matematiği

Pagerankın ilk çıkış mantığı şu cümle ile özetlene bilir "insanların link verdigi site kötü site olamaz.insanlar bir siteye link veriyorsa, bu site iyi bir site olmalı..."

işte google bu sihirli cümleden yola çıkarak kuruldu, gelişti, gelişmeye devam etmektedir.Google' un ilk yıllarında çogu kişi, pagerankın gücünün farkında degildi ve pek önemsemedi.Rakip arama motorları yahoo, msn ve altavista sanal dünyadaki milyarlarca sayfanın birbiri ile etkileşimine dayanan pagerank degerinin hesaplanmasının imkansıza yakın oldugunu ve sistem kaynaklarının boşuna bir ugraş içinde olacağı görüşünde birleşiyorlardı.Ancak yapılan deneyler sonucunda fark edildi ki gerçektende pagerank önemli bir etken idi.BBu yazımızda pagerankın matematiksel modellemesi üzerinde durulacaktır.

Pagerankın Google tarafından açıklanan formülü aşağıdadır:

PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))

formüldeki degişkenler şunlardır:


PR(A)= A sitesine ait pagerank degeri
d = �damped down� faktörü denilen özel bir katsayı ve 0.85 kabul edilmekte.
PR(Tn) = A sitesine link veren herhangi bir sitenin pagerank degeri.
C(Tn) = A sitene link veren herhangi bir sitedeki link sayısı.

Google yaptıgı açıklamalarda şunu belirtmiştir ki, sanal evrendeki tüm sitelerin gerçek pagerank degerleri toplamı 1 sayısına eşit oldugu kabul edilmiştir.Bizde bu yaklaşımla yola çıkarak degişik linkleşme şemalarının pagerank degerine katkılarını inceleyecegiz.İlk örnegimizde linkleşmenin en basit hali olan karşılıklı link degişiminin etkilerini görelim.Yapacağımız tüm örneklerde her sitenin pagerank degeri ilk başta 1 kabul edilmiştir.

Pagerank örnek 1




= 0.85

PR(A)


= (1 � d) + d(PR(B)/1)

PR(B)


= (1 � d) + d(PR(A)/1)

Degerleri yerine koyarsak :
PR(A) yani A sitesine ait pagerank degeri 1 kabul edildi.
d= 0.85 katsayı degerinde oldugunu google bize söylüyor.
PR(B) yani B sitesine ait pagerank degeri 1 kabul edildi.
C(Tn) =1 A sitesinden ve B sitesinden dış dünyaya verilen link sayısı 1 oldugundan 1 alınırsa

PR(A)


= 0.15 + 0.85 * 1
= 1

PR(B)


= 0.15 + 0.85 * 1
= 1

Eger üsteki şekildeki iki siteninde ilk başta pagerank degerlerinin sıfır oldugunu kabul edip tekrar formulde yerine koyarsak:

Birinci iterasyon sonucu




PR(A)


= 0.15 + 0.85 * 0
= 0.15

PR(B)


= 0.15 + 0.85 * 0.15
= 0.2775

Yeni iterasyonlar için yani buldugumuz degerleri tekrar tekrar formulde yerine koyarsak ve işleme devam edersek

ikinci iterasyon sonucu




PR(A)


=0.15 + 0.85 * 0.2775
= 0.385875

PR(B)


= 0.15 + 0.85 * 0.385875
= 0.47799375
3 kez işleme devam edersek

üçüncü iterasyon sonucu




PR(A)


= 0.15 + 0.85 * 0.47799375
= 0.5562946875

PR(B)


= 0.15 + 0.85 * 0.5562946875
= 0.622850484375

Eger yine iki site içinde ilk baştaki pagerank degerliklerini 40 kabul edersek yani PR(A)=40 ve PR(B) =40 kabul edilirse

Birinci işlem sonucu




PR(A)


= 0.15 + 0.85 * 40
= 34.25

PR(B)


= 0.15 + 0.85 * 0.385875
= 29.1775

Hesaplamaya devam edersek

Birinci iterasyon sonucu




PR(A)


= 0.15 + 0.85 * 29.1775
= 24.950875


pagerank deger 1 sayısına yaklaşıyor

PR(B)


= 0.15 + 0.85 * 24.950875
= 21.35824375


pagerank deger 1 sayısına yaklaşıyor

İlk pagerank degerliklerini 40 kabul etsek bile yani 1 rakamından büyük bir sayı olsa bile iterasyon sonucu en basit linkleşme şeklinde bile belli iterasyon basamağı sonucu, Google un kabul ettiği 1 rakamına ulaşıyor.
Google her sitenin gerçek pagerank degerini yani iki linkin birbiri ile etkileşimini hesaplaya bilmek için 40 kez iterasyon yapmaktadır.

Pagerank örnek 2



Örnek 2 deki şekildeki bir linkleşme şeması sonucu yapılan 40 iterasyon sonucu her sitenin kazandıgı pagerank degeri aşağıdaki gibidir.

ilk başta tüm sitelerin pagerank degeri 0 kabul edildi.



Özet:En basit linkleşme şeklinin bile 40 iterasyon sonra 1 degerine ulaştığını varsayarsak:
D sitesi hiç bir siteden link almadıgından dolayı ilk başta 0 olan pagerank degerini 0.15 degerinde kalmıştır.
C sitesi 3 ayrı siteden link aldığından dolayı ve dışarıya sadece 1 link verdiginden dolayı pagerank degeri 1.58 olmuştur.

B sitesi 1 siteden link almış ve bir siteye link vermiş olmasına ragmen, mevcut pagerank degeri olan 1 sayısının bile altına inmiştir. Gelen linkin, giden linki hiç bir zaman eşitlemediğini bu örnek gösteriyor.

pagerank örnek 3



Örnek 3 deki şekildeki bir linkleşme şeması sonucu yapılan 40 iterasyon sonucu her alt sayfanın ve dost sitenin kazandıgı pagerank degeri aşağıdaki gibidir.



Özet:
Eger başka sitelere link verirsek kendi alt sayfalarımıza gidecek pagerank degerini onlara vermiş olmaktayız. örnek 4'ü incelerseniz görürsünüz.

Pagerank örnek 4



Yine ilk başta tüm sayfalarımızın pagerank degeri sıfır kabul edilirse ve şekildeki gibi bir linkleşme yaparsak pagerank kazanımımız şekildeki gibi olur.

Pagerank örnek 5



Örnek 4 ün değişik bir şekli.A sitesi bizim sitemize karşılıksız olarak link vermekte ve sisteme pagerank girişi olmaktadır yani formulün pay kısmına yeni bir deger gelmiştir.Hem ana sayfamızın hemde alt sayfalarımızın pagerank degeri artmıştır.Örnek 4 de ana sayfamız 1.92 degerine sahip iken, sitemize aldığımız bir karşılıksız link sonucu ana sayfamızın pagerank degeri 3.31 degerine ulaştı.

Genel Özet

1- Çok fazla dost siteniz olursa, alt sayfalarınıza gidecek pagerank degeri dost sitelerinize gider.Alt sayfalarınız güçsüz kalır.

2- Eğer bencillik yapar kimseye link vermezseniz, web'in ağ olma özelliğini bozduğunuzdan dolayı google sitenizi cezalandırır.Pagerankınızın artmasını beklerken dahada düşer. Googlebot mutlaka sitenizden, başka sitelere kolaylıkla geçip gidebilmelidir.

3- Buradaki örnekler çok basit düzeyde olmasına ragmen her sayfanın birbiri ile link alışverişinin dogru hesaplanabilmesi için 40 iterasyon yapıldıgını görmektesiniz.Google milyarlarca sayfanın birbiri ile etkileşimini hesaplamak için yaptıgı matematiksel hesapları düşünürseniz, olayın boyutunu daha iyi kavrarsınız ve niye toolbar pagerankının güncellemesi 3 ayda bir güncelleniyor sorusunun cevabını kendinizde bulabilirsiniz. Çünkü trilyonlarca matematik işleminin dogru olarak hesaplanması yada dogruya yakın hesabı ancak bu kadar zaman alıyor...


paylaşım için teşekkürler webmaster adayları için yararlı oluyor gerçekten

scriptide benden olsun ;D

[code]
define('GOOGLE_MAGIC', 0xE6359A60);

function _zeroFill($a, $b){
$z = hexdec(80000000);
if ($z & $a){
$a = ($a>>1);
$a &= (~$z);
$a |= 0x40000000;
$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=GOOGLE_MAGIC){
if(is_null($length))
$length = sizeof($url);
$a = $b = 0x9E3779B9;
$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 = $_mix[0]; $b = $_mix[1]; $c = $_mix[2];
$k += 12;
$len -= 12;
}
$c += $length;
switch($len){
case 11: $c += ($url[$k + 10] << 24);
case 10: $c += ($url[$k + 9] << 16);
case 9 : $c += ($url[$k + 8] << 8);
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]);
}
$_mix = _mix($a,$b,$c);
return $_mix[2];
}

function _strord($string){
for($i = 0;$i < strlen($string);$i++)
$result[$i] = ord($string{$i});
return $result;
}

function getPageRank($url){
$pagerank = -1;
$ch = "6"._GoogleCH(_strord("info:" . $url));
$fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
if($fp){
$out = "GET /search?client=navclient-auto&ch=" . $ch . "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n";
$out .= "Host: www.google.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)){
$data = fgets($fp, 128);
$pos = strpos($data, "Rank_");
if($pos === false){
}else
$pagerank = substr($data, $pos + 9);
}
fclose($fp);
}
return $pagerank;
}

$pr = getPageRank($_SERVER['HTTP_HOST']);
echo '

PageRank '.$pr.'
';

?>[/code]


Yazılım ve Web Tasarımı

MollaCami.Com