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 ...
随机推荐
- hdu 6155 - Subsequence Count
话说这题比赛时候过的好少,连题都没读TOT 先考虑dp求01串的不同子序列的个数. dp[i][j]表示用前i个字符组成的以j为结尾的01串个数. 如果第i个字符为0,则dp[i][0] = dp[i ...
- uoj#38. 【清华集训2014】奇数国(线段树+数论)
传送门 不难看出就是要先求区间积,再求这个区间积的\(\varphi\) 因为\(\varphi(x)=x\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\ ...
- 五分钟搞定 Linux 文档全部知识,就看这篇文章
作者:无痴迷,不成功 来源:见文末 写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人 ...
- 解决sublime text无法安装插件问题
解决sublime text无法安装插件问题最近在sublime text3中使用命令ctrl+shift+p命令安装插件发现不能安装了,一会儿报错 这个错误表示没有可用的安装包,经过一番探索发现是配 ...
- ORA-01950:表空间“USERS”中无权限
ORA-01950:表空间“USERS”中无权限 解决方案: A)确认给用户授权了resource角色 B)取消限制 ALTER USER "HCCPMS" QUOTA UNLIM ...
- Spring.Net框架学习错误集锦1
最近IoC框架非常火热,所以就学习了非常流行的IOC框架之一spring.NET,遇到如下问题: Error creating context 'spring.root': Could not loa ...
- pytest + allure + jenkins 生成漂亮的测试报告
pytest我在上一篇文章初始pytest中已有介绍,是一个很理想的Python测试框架.Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架. 它支持绝大多数测试框架, 例如TestNG. ...
- 更新常用的js工具函数
在手机调试时打印代码<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></ ...
- 牛客假日团队赛2 F.跳跃
链接: https://ac.nowcoder.com/acm/contest/924/F 题意: Farmer John为了满足奶牛对美的享受而安装了人工湖.矩形的人工湖分成M行N列(1 <= ...
- Codeforces Round #563 (Div. 2) B. Ehab Is an Odd Person
链接:https://codeforces.com/contest/1174/problem/B 题意: You're given an array aa of length nn. You can ...