资源简介
PageRank C++ 实现
附带程序说明
代码片段和文件信息
#define ROW 20 //默认链接数量
#define d 0.85 //阻尼系数
#define PK 10 //默认链接的PageRank总和
#include
#include
#include
#include
using namespace std;
/*初始化*/
int init()
{
cout<<“************************************************************************\n\n“;
cout<<“ 本程序为模拟google网页评级算法的原型\n\n“;
cout<<“将各个链接直接的关系用二维邻接矩阵表示\n“;
cout<<“如存在123三个链接,且他们的指向关系为1指向2,2指向33指向1\n则用如下邻接矩阵表示其关系\n“;
cout<<“0 1 0\n0 0 1\n1 0 0\n“;
cout<<“************************************************************************\n“;
system(“pause“);
int n = ROW;
char c = ‘N‘;
cout<<“是否使用系统默认邻接矩阵(Y/N):“;
cin>>c;
if(c==‘Y‘)return n;
else
{
cout<<“请输入链接的数量:“;
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<<“请按行优先的顺序输入邻接矩阵,并以回车结束行输入!\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;
}
/*获取转移矩阵*/
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
评论
共有 条评论