資源簡介
PageRank C++ 實現(xiàn)
附帶程序說明

代碼片段和文件信息
#define?ROW?20?//默認(rèn)鏈接數(shù)量
#define?d?0.85?//阻尼系數(shù)
#define?PK?10?//默認(rèn)鏈接的PageRank總和
#include
#include
#include
#include??
using?namespace?std;
/*初始化*/
int?init()
{
cout<<“************************************************************************\n\n“;
cout<<“????????????????????本程序為模擬google網(wǎng)頁評級算法的原型\n\n“;
cout<<“將各個鏈接直接的關(guān)系用二維鄰接矩陣表示\n“;
cout<<“如存在123三個鏈接,且他們的指向關(guān)系為1指向2,2指向33指向1\n則用如下鄰接矩陣表示其關(guān)系\n“;
cout<<“0?1?0\n0?0?1\n1?0?0\n“;
cout<<“************************************************************************\n“;
system(“pause“);
int?n?=?ROW;
char?c?=?‘N‘;
cout<<“是否使用系統(tǒng)默認(rèn)鄰接矩陣(Y/N):“;
cin>>c;
if(c==‘Y‘)return?n;
else
{
cout<<“請輸入鏈接的數(shù)量:“;
cin>>n;
return?n;
}
}
/*生成二維鄰接矩陣*/
int**?getAdjacencyMatrix(int?n)
{
int**?aMatrix?=?new?int*[n];
for(int?i=0;i aMatrix[i]?=?new?int[n];
if(n==ROW)
{
srand((unsigned)time(0));
unsigned?temp?=?rand();
for(int?i?=?0;i for(int?j=0;j {
srand(temp++);
aMatrix[i][j]?=?rand()%2;
}
}
else
{
cout<<“請按行優(yōu)先的順序輸入鄰接矩陣,并以回車結(jié)束行輸入!\n“;
for(int?i=0;i for(int?j=0;j {
cout<<“請輸入第“< cin>>aMatrix[i][j];
}
}
for(int?i=0;i aMatrix[i][i]?=?0;
return?aMatrix;
}
/*獲取轉(zhuǎn)移矩陣*/
double**?getTransitionMatrix(int**?aMatrixint?n)
{
double**?tArry?=?new?double*[n];
int**?newMatrix?=?new?int*[n];
for(int?i=0;i {
tArry[i]?=?new?double[n];
newMatrix[i]?=?new?int[n];
}
int*?num?=?new?int[n];
for(int?i=0;i {
num[i]=0;
for(int?j=0;j {
if(aMatrix[i][j]==1)num[i]++;
newMatrix[j][i]?=?aMatrix[i][j];
}
}
for(int?i=0;i {
for(int?j=0;j {
if(num[j]!=0)
tArry[i][j]?=?newMatrix[i][j]*d/num[j]+(1-d)/n;
else?tArry[i][j]?=?(1-d)/n;
}
}
delete?num;
delete?newMatrix;
return?tArry;
}
/*迭代PK*/
void?updatePageRank(double**?tArrydouble*?pkint?n)
{
double*?pageRank?=?new?double[n];
for(int?i=0;i {
pageRank[i]?=?0;
for(int?j=0;j {
pageRank[i]+=tArry[i][j]*pk[j];
}
}
for(int?i=0;i delete?pageRank;
}
void?outPut(int**?aMatrixint?n)
{
cout<<“\n各鏈接指向的鄰接矩陣如下:\n??“;
for(int?i=0;i {
cout< }
cout< for(int?i=0;i {
if(i<9)cout< if(i>=9)cout< for(int?j=0;j {
cout< }
cout< }
cout< }
/*登記排序*/
void?sort(int*?pkIddouble*?pkint?n)
{
for(int?i=0;i for(int?j=i+1;j {
if(pk[j]>pk[i])
{
int?tem;
double?temp;
tem=pkId[j];
pkId[j]?=?pkId[i];
pkId[i]?=?tem;
temp=pk[j];
pk[j]?=?pk[i];
pk[i]?=?temp;
}
}
}
void?outPut(int*?pkIddouble*?pkint**?aMatrixint?n)
{
sort(pkIdpkn);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????49664??2010-12-06?15:12??PageRank\Debug\PageRank.exe
?????文件?????417252??2010-12-06?15:12??PageRank\Debug\PageRank.ilk
?????文件?????666624??2010-12-06?15:12??PageRank\Debug\PageRank.pdb
?????文件???????8964??2010-12-06?15:12??PageRank\PageRank\Debug\BuildLog.htm
?????文件?????????67??2010-12-06?15:12??PageRank\PageRank\Debug\mt.dep
?????文件????????663??2010-12-06?15:12??PageRank\PageRank\Debug\PageRank.exe.em
?????文件????????728??2010-12-06?15:12??PageRank\PageRank\Debug\PageRank.exe.em
?????文件????????621??2010-12-06?15:12??PageRank\PageRank\Debug\PageRank.exe.intermediate.manifest
?????文件??????86119??2010-12-06?15:12??PageRank\PageRank\Debug\PageRank.obj
?????文件?????461824??2010-12-06?15:12??PageRank\PageRank\Debug\vc90.idb
?????文件?????258048??2010-12-06?15:12??PageRank\PageRank\Debug\vc90.pdb
?????文件???????5033??2010-12-06?15:12??PageRank\PageRank\PageRank.cpp
?????文件???????3922??2010-12-06?15:12??PageRank\PageRank\PageRank.vcproj
?????文件???????1403??2010-12-06?15:12??PageRank\PageRank\PageRank.vcproj.D24.Administrator.user
?????文件????8489984??2010-12-06?15:12??PageRank\PageRank.ncb
?????文件????????890??2010-12-06?15:11??PageRank\PageRank.sln
????..A..H.??????7680??2010-12-06?15:12??PageRank\PageRank.suo
?????目錄??????????0??2010-12-06?15:12??PageRank\PageRank\Debug
?????目錄??????????0??2010-12-06?15:12??PageRank\Debug
?????目錄??????????0??2010-12-06?15:12??PageRank\PageRank
?????目錄??????????0??2010-12-06?15:12??PageRank
?????文件?????507392??2011-12-14?17:05??PageRank.doc
-----------?---------??----------?-----??----
?????????????10966878????????????????????22
評論
共有 條評論