HDU 5097 Page Rank (模拟)
题目背景是以前用来对网页进行排名的Page Rank算法,是早期Google的革命性发明。
背后的原理是矩阵和图论。这个数学模型是由Google的创始人拉里·佩奇和谢尔盖·布林发现的。
如果一个网页被很多网页链接那么它的排名就高,当然不同的网页应该用不同的权值加以区分,
一个网页的排名来自指向它的网页权值之和,这就带来一个问题,计算排名过程需要用到网页本身排名。
这个问题可以变成一个二维矩阵相差,一开始认为所有的网页的排名都是相同,然后迭代算出排名。
从理论上可以证明无论初始值如何选取,这种算法最后都会收敛于真实值。
还有一个实际问题,互联网网页是非常大的,这个矩阵需要稀疏化处理。
此题是简化版,给一个矩阵,Eij = 1表示i到j有个超链接,假设点击都是随机的,求S矩阵,S的j行和i列表示从i到j的概率。
迭代计算直到收敛为止。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
const double eps = 1e-; const int N = +; double G[N][N]; const double alpha = 0.85;
char buf[N][N]; bool ok(double *q1,double *q2,int n)
{
double s = ;
for(int i = ; i < n; i++) s += fabs(q1[i]-q2[i]);
return s < eps;
}
double q0[N];
double q1[N];
double q2[N]; int main()
{
// freopen("in.txt","r",stdin);
int n;
for(int i = ; i < N; i++) q0[i] = ;
while(~scanf("%d",&n)){
double beta = (-alpha)/n;
for(int i = ; i < n; i++){
scanf("%s",buf[i]);
}
for(int i = ; i < n; i++){
int cnt = ;
for(int j = ; j < n; j++)
if(buf[i][j] == '') cnt++;
for(int j = ; j < n; j++)
if(buf[i][j] == ''){
G[j][i] = (cnt?alpha/cnt:)+beta;
}
else G[j][i] = beta;
} memcpy(q1,q0,sizeof(double)*n);
double *qCur = q1, *qNxt = q2;
do{
for(int i = ; i < n; i++){
qNxt[i] = ;
for(int j = ; j < n; j++){
qNxt[i] += G[i][j]*qCur[j];
}
}
std::swap(qCur,qNxt);
}while(!ok(qCur,qNxt,n));
for(int i = ,sz = n-; i < sz; i++)
printf("%.2lf ",qCur[i]);
printf("%.2lf\n",qCur[n-]);
}
return ;
}
HDU 5097 Page Rank (模拟)的更多相关文章
- HDOJ 题目5097 Page Rank(矩阵运算,模拟)
Page Rank Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others) Tota ...
- [IR课程笔记]Page Rank
主要目的: 在网络信息检索中,对每个文档的重要性作出评价. Basic Idea: 如果有许多网页链接到某一个网页,那么这个网页比较重要. 如果某个网页被一个权重较大的网页链接,那么这个网页比较重要. ...
- HDU 5510---Bazinga(指针模拟)
题目链接 http://acm.hdu.edu.cn/search.php?action=listproblem Problem Description Ladies and gentlemen, p ...
- HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...
- HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))
扫雷 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
Car Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))
Fraction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- hdu 4831 Scenic Popularity(模拟)
pid=4831" style="font-weight:normal">题目链接:hdu 4831 Scenic Popularity 题目大意:略. 解题思路: ...
- HDU 5538 House Building(模拟——思维)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5538 Problem Description Have you ever played the vi ...
随机推荐
- ASP.NET web application中的redirect
在开发ASP.NET MVC web application过程中,开发上线了新系统后,需要把老系统的url redirect新系统下 其中在项目系统目录下有一个文件 301RedirectsPage ...
- 1.4 DVWA亲测文件上传漏洞
Low 先看看源代码: <?php if(isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $tar ...
- JAVA企业级开发-BOM&DOM(03)
一.BOM对象介绍 BOM对象:Browser Object Model 浏览器对象模型.把整个浏览器当做一个对象来处理. 一个浏览器对象中又包含了其他的对象. 重点介绍:window.history ...
- Jinkins定时任务设置
设置的地方在构建触发器中 Build after other projects are built:在其他项目构建完成后再进行构建. Build periodically:周期进行构建 Build w ...
- "Mysql has gone away"的几种可能
现象: 在本地利用Flask自带的WSGI服务进行调试没有问题后,通过Gunicorn进行部署. 但是在一晚上没有访问之后,第二天再次访问会出现500(Internal error). 原因: 通过追 ...
- Swoole 多协议 多端口 的应用
目录 概述 网络通信协议设计 多端口监听的使用 小结 概述 这是关于 Swoole 学习的第五篇文章:Swoole 多协议 多端口 的应用. 第四篇:Swoole HTTP 的应用 第三篇:Swool ...
- HDU 1506【单调栈】
思路: 转化成对于某一位置为最小值求向两边最远>=他的位置,用单调栈就能轻易完成. 那么ans=(left+right)*h[i]; 维护单调递增还是递减呢? 我们能很快反应到,一旦碰到一个比他 ...
- Ubuntu下安装wine plsql
在电脑上安装了第二系统Ubuntu,但面临各种Linux不支持的开发软件也是束手无策.比如常用的Eclipse,PlSQl,Oracle,QQ等等,于是,上网查阅各种资料,最终的解决方案还是要依赖于w ...
- mac for Idea配置Tomcat
参考链接地址:http://blog.csdn.net/zsy3313422/article/details/52583091 IntelliJ使用 ##使用IntelliJ IDEA配置web项目时 ...
- 如何删除.DS_Store文件?
.DS_Store出现在Desktop和其它地方,看它碍眼,它是什么,详见百度百科 http://baike.baidu.com/link?url=yLTDHR6OS66-981wpCY-mWPF7a ...