| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1133 人关注过本帖
标题:求助,PAGERANK模拟算法C写法
只看楼主 加入收藏
livingstone
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-27
收藏
 问题点数:0 回复次数:1 
求助,PAGERANK模拟算法C写法
这是一个略有难度的C程序,用来模拟GOOGLE的PAGERANK,小弟写了一份,可用不了,很快就要交任务了,望大侠们帮助,这决不是"沙发"!!!
1.公式
PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
其中:PR(A):页面A的网页级别,
PR(Ti):页面Ti的网页级别,页面Ti链向页面A,

C(Ti):页面Ti链出的链接数量,

d:阻尼系数,取值在0-1之间. (//取0.85//)
2.例子
PR(A) = 0.5 + 0.5 PR(C)
PR(B) = 0.5 + 0.5 (PR(A) / 2)
PR(C) = 0.5 + 0.5 (PR(A) / 2 + PR(B)
解得:
PR(A) = 14/13 = 1.07692308
PR(B) = 10/13 = 0.76923077
PR(C) = 15/13 = 1.15384615
迭代计算pagerank
  Google采用一种近似的迭代的方法计算网页的网页级别的,也就是先给每个网页一个初始值,然后利用上面的公式,循环进行有限次运算得到近似的网页级别。根据Lawrence Page 和 Sergey Brin公开发表的文章,他们实际需要进行100次迭代才能得到整个互联网的满意的网页级别值,这儿的例子只用了10多次就可以了。在迭代的过程中,每个网页的网页级别的和是收敛于整个网络的页面数的。所以,每个页面的平均网页级别是1,实际上的值在(1-d)和(dN+(1-d))之间。

迭代次数

PR(A)

PR(B)

PR(C)

0

1

1

1

1

1

0.75

1.125

2

1.0625

0.765625

1.1484375

3

1.07421875

0.76855469

1.15283203

4

1.07641602

0.76910400

1.15365601

5

1.07682800

0.76920700

1.15381050

6

1.07690525

0.76922631

1.15383947

7

1.07691973

0.76922993

1.15384490

8

1.07692245

0.76923061

1.15384592

9

1.07692296

0.76923074

1.15384611

10

1.07692305

0.76923076

1.15384615

11

1.07692307

0.76923077

1.15384615

12

1.07692308

0.76923077

1.15384615

3.我的思想
基本结构:
我做了15个网页,为字符型(char),数据库结构有三项:qishiye(起始页,字符) mubiaoye(目标页,字符) leixing(类型,字符串doc,pdf,htm
初始化矩阵方法(M):for(i=0;i<15;i++){for(j=0;j<15;j++){M['qishiye[i]'-97]['mubiaoye[j]'-97]==1;接受数据重赋值给mubiaoye[],数据由数据库传来(数据库中传来的数据相当于定义常量);}}
qishiye[]保存起始页名(字符)mubiaoye[]保存该起始页连接到的页(每有一个起始页,则生成一次mubiaoye[]),即目标页,如果有连接,对应M[]项为1,否则为0
将M[]倒置,生成N[],将每行的一相加,就是该网页作为出链的次数,也就有这么多网页连到了该页,总共15行,存入COUNT[]数组,这在计算PR值时用
计算pr值,这也是问题所在,没有时间再调试了,上面1,2部分有详细说明,我的思想是:
迭代14次,有15个网页用数组pr[15*15]表示,第一行初始化为1,作为迭代初值,根据第一行,计算各网页pr值14次,存入pr[]第2到15行
根据各网页pr值由大到小,显示网页
搜索更多相关主题的帖子: PAGERANK 算法 模拟 
2006-05-27 13:01
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
朋友,您可查阅一下<数值计算>或<计算方法>类书籍中关于线性方程组的迭代求解方法,如高斯——赛德尔迭代超松弛迭代法等等。由于您所遭遇的矩阵强优对角,所以收敛性应该相当的好。但您文中设想的额定迭代次数可能偏少了,正确地思路应该是检验相邻两次解向量的差,让它的方差不劣于某个预先设定值即停机。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-28 08:31
快速回复:求助,PAGERANK模拟算法C写法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036730 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved