資源簡介
本代碼使用java實現的pagerank,上傳的文件中有數據集和代碼,是完整的一套。希望本代碼會對需要的人有幫助!

代碼片段和文件信息
/*代碼功能:利用數據集中的各個網頁的關系得到轉移矩陣,并用公式pr=b*pr+1/n(1-b)進行反復迭代計算
??pr值
??編寫人:崔丹丹??
??時間:2013.12.22
?*/
import?java.io.File;
//import?java.io.FileReader;
//import?java.util.Arrays;
import?java.io.*;
class?MyPageRank?{
int?array[][];
double?page[];
final?double?b?=?0.85;//
final?int?N?=?6012;//6012個網頁
double?PR[];//用來存放最終的PR值
double?PRold[];//用來存放迭代過程中的PR值
int?arrayOutDrgee[];//定義一個數組用來存放每一個網頁的出度
int?arrayInDrgee[];//定義一個數組用來存放每一個網頁的入度
double?thr?=?0.00001;//定義閾值
MyPageRank()?{//初始化變量和數組
ReadFile?rankfile?=?new?ReadFile();
rankfile.ReadFile1();
array?=?rankfile.arrayGX;
page?=?rankfile.arrayID;
PRold?=?new?double[N];
for?(int?i?=?0;?i? PRold[i]?=?1.0;
}
}
public?void?ReadArray()?{
arrayOutDrgee?=?new?int[page.length];
arrayInDrgee?=?new?int[page.length];
for?(int?i?=?0;?i? arrayOutDrgee[array[i][0]?-?1]++;//計算網頁的出度
arrayInDrgee[array[i][1]?-?1]++;//計算網頁的入度
}
}
public?void?CountValue()?{
for?(int?i?=?0;?i?
PR[array[i][1]?-?1]?=?PR[array[i][1]?-?1]?+?PRold[array[i][0]?-?1]
/?arrayOutDrgee[array[i][0]?-?1];//用舊的pr值更新?新的PR值
}
//System.out.println(PR[1]+“?“+PR[0]+“?“+PR[3]);
for?(int?j?=?0;?j? if?(arrayInDrgee[j]?!=?0)?{//如果入度不為0,則利用公式計算
PR[j]?=?PR[j]?*?b?+?(1?-?b)?/?N;
}?else?{//如果為0則為定值
PR[j]?=?(1?-?b)?/?N;
}
}
//?Sort(PRpage);
//?System.out.println(page.length);
//?System.out.println(PR.length);
}
public?boolean?XHTJ()//?循環條件,如果新的PR-舊的PR?大于閾值則繼續迭代計算
{
for?(int?i?=?0;?i? if?(Math.abs(PR[i]?-?PRold[i])?>?thr)?{
return?false;
}
}
return?true;
}
public?void?ReCountValue()?{
ReadArray();//調用計算出度入度函數
PR?=?new?double[N];
CountValue();//計算
while?(!XHTJ())?{//看是否滿足循環條件
for(int?i=0;i PRold[i]=PR[i];
PR[i]=0;
}
CountValue();
//System.out.println(PR[1]);
}
}
public?void?Sort(double[]?PR?double[]?page)//?對數組中的pr值進行冒泡排序
{
/*?Arrays.sort(PR);?*/
int?len?=?PR.length;
double?temp;
for?(int?i?=?0;?i? for?(int?j?=?0;?j? if?(PR[j]? temp?=?PR[j];
PR[j]?=?PR[j?+?1];
PR[j?+?1]?=?temp;
//對應存儲ID的數組相應變化
temp?=?page[j];
page[j]?=?page[j?+?1];
page[j?+?1]?=?temp;
}
}
}
}
public?static?void?main(String[]?args)?{//主函數
MyPageRank?test?=?new?MyPageRank();
//?test.ReadArray();
//?System.out.println(test.arrayInDrgee[1]);
test.ReCountValue();
test.Sort(test.PR?test.page);//調用排序函數
for?(int?i?=?0;?i? System.out.println(“計算的PR值為:??“+test.PR[i]+“ 網頁的ID為:??“+test.page[i]);
}
//?System.out.println(PR.length);
try?{//將結果存到一個新的文件中
File?file?=?new?File(
“C:\\Users\\Administrator\\Desktop\\運行結果.txt“);
FileWriter?f
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????682949??2013-12-22?09:03??hollins.dat
?????目錄???????????0??2014-01-16?14:36??MyPageRank\
?????文件?????????301??2013-12-19?00:13??MyPageRank\.classpath
?????文件?????????386??2013-12-19?00:13??MyPageRank\.project
?????目錄???????????0??2014-01-16?14:36??MyPageRank\.settings\
?????文件?????????629??2013-12-19?00:13??MyPageRank\.settings\org.eclipse.jdt.core.prefs
?????目錄???????????0??2014-01-16?14:36??MyPageRank\bin\
?????文件????????3522??2013-12-25?15:11??MyPageRank\bin\MyPageRank.class
?????文件????????2054??2013-12-25?16:55??MyPageRank\bin\ReadFile.class
?????目錄???????????0??2014-01-16?14:36??MyPageRank\src\
?????文件????????3667??2013-12-25?15:11??MyPageRank\src\MyPageRank.java
?????文件????????2362??2013-12-25?16:55??MyPageRank\src\ReadFile.java
?????文件?????????183??2014-01-16?14:39??說明.txt
評論
共有 條評論