题目背景是以前用来对网页进行排名的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 (模拟)的更多相关文章

  1. HDOJ 题目5097 Page Rank(矩阵运算,模拟)

    Page Rank Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Tota ...

  2. [IR课程笔记]Page Rank

    主要目的: 在网络信息检索中,对每个文档的重要性作出评价. Basic Idea: 如果有许多网页链接到某一个网页,那么这个网页比较重要. 如果某个网页被一个权重较大的网页链接,那么这个网页比较重要. ...

  3. HDU 5510---Bazinga(指针模拟)

    题目链接 http://acm.hdu.edu.cn/search.php?action=listproblem Problem Description Ladies and gentlemen, p ...

  4. HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...

  5. HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  6. HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))

    Car Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Fraction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  8. hdu 4831 Scenic Popularity(模拟)

    pid=4831" style="font-weight:normal">题目链接:hdu 4831 Scenic Popularity 题目大意:略. 解题思路: ...

  9. HDU 5538 House Building(模拟——思维)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5538 Problem Description Have you ever played the vi ...

随机推荐

  1. Mysql多列索引经典案例

    一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x ...

  2. MySQL写入中文乱码

    这点确实很迷,我的数据库属性确实设置了utf-8字符集,但写入中文还是乱码,后来是直接修改了全局配置才修改过来. 1.进入MySQL的本地安装路径,我的安装路径是"C:\Program Fi ...

  3. C# ConfigurationManager 类的使用

    一.前言 在项目中,我们习惯使用 ConfigurationManager 来读取一些常量.如链接数据库字符串.一些需配置的数据(微信.QQ.支付宝)等的配置.我们需要把这些数据记录在 app.con ...

  4. 漫画:深入浅出 ES 模块

    本文来自网易云社区. 本文翻译自:ES modules: A cartoon deep-dive ES 模块为 JavaScript 提供了官方标准化的模块系统.然而,这中间经历了一些时间 —— 近 ...

  5. PHP 数字补零 固定位数补0

    在处理订单编号的时候,需要固定位数的数字,比如需要固定四位数格式: 1->0001 56->0056 288->0288 1992->1992 可以使用php内置函数str_p ...

  6. Hyperledger Fabric 第一次安装

    第一次安装fabric有很多坑.记录一下,主要跟版本问题. 参考的是http://www.cnblogs.com/aberic/p/7532114.html 这篇博客. 我用的阿里云centOs 7. ...

  7. 2017 Fzu校赛 [Cloned]

    A - Salty Fish 海边躺着一排咸鱼,一些有梦想的咸鱼成功翻身(然而没有什么卵用),一些则是继续当咸鱼.一个善良的渔夫想要帮这些咸鱼翻身,但是渔夫比较懒,所以只会从某只咸鱼开始,往一个方向, ...

  8. 《SQL 进阶教程》 case:练习题1-1-1 多列数据的最大值

    select name, case when case when x > y then x else y end < z then z else case when x < y th ...

  9. Win7系统控制面板“设备和打印机”打不开解决办法

    Win7系统控制面板“设备和打印机”打不开解决办法, 打开时显示界面如下: 可能原因: 1.设备和打印机对应的驱动故障引起无法打开的问题 2.服务未开启 3.系统文件损坏 解决方法: 1.更新驱动.可 ...

  10. Django配置文件解释

    """Django settings for first project. Generated by 'django-admin startproject' using ...