HDU 5097 Page Rank

题意有点难读,给一个矩阵,Eij = 1表示i到j有个超连接,假设都是随机的,求S矩阵,S的j行和i列表示从i到j的概率。然后求出那个矩阵,模拟乘一下。

似乎任意的q都会收敛。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
const double eps = 1e-10;

const int N = 3000+10;

double G[N][N];

const double alpha = 0.85;
char buf[N][N];

bool ok(double *q1,double *q2,int n)
{
    double s = 0;
    for(int i = 0; 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 = 0; i < N; i++) q0[i] = 1;
    while(~scanf("%d",&n)){
        double beta = (1-alpha)/n;
        for(int i = 0; i < n; i++){
            scanf("%s",buf[i]);
        }
        for(int i = 0; i < n; i++){
            int cnt = 0;
            for(int j = 0; j < n; j++)
                if(buf[i][j] == ‘1‘) cnt++;
            for(int j = 0; j < n; j++)
                if(buf[i][j] == ‘1‘){
                    G[j][i] = (cnt?alpha/cnt:0)+beta;
                }
                else G[j][i] = beta;
        }

        memcpy(q1,q0,sizeof(double)*n);
        double *qCur = q1, *qNxt = q2;
        do{
            for(int i = 0; i < n; i++){
                qNxt[i] = 0;
                for(int j = 0; j < n; j++){
                    qNxt[i] += G[i][j]*qCur[j];
                }
            }
            std::swap(qCur,qNxt);
        }while(!ok(qCur,qNxt,n));
        for(int i = 0,sz = n-1; i < sz; i++)
            printf("%.2lf ",qCur[i]);
        printf("%.2lf\n",qCur[n-1]);
    }
    return 0;
}
时间: 2024-11-05 19:41:23

HDU 5097 Page Rank的相关文章

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

Page Rank Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submission(s): 280    Accepted Submission(s): 75 Problem Description Evaluation and rank of web pages is a hot topic for many internet companies and

HDOJ Page Rank 5097【2014上海邀请赛H题-简单矩阵】

Page Rank Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submission(s): 282    Accepted Submission(s): 77 Problem Description Evaluation and rank of web pages is a hot topic for many internet companies and

HLG 1752 Page Rank (线段树)

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1752 Description There are n webpages, each of which has its respective page rank. The content is constantly updated and page rank is also constantly changing. Can you im

[IR课程笔记]Page Rank

主要目的: 在网络信息检索中,对每个文档的重要性作出评价. Basic Idea: 如果有许多网页链接到某一个网页,那么这个网页比较重要. 如果某个网页被一个权重较大的网页链接,那么这个网页比较重要. 随机游走模型: 过程:1.在所有网页中,随机选择一个网页作为游走的开端. 2.然后在当前网页上的超链接中,随机选择一个超链接跳转到下一个网页. 3.大量重复1.2的过程. 重要度计算方法: Pr(pi|p1)表示从编号为1的网页跳转到编号为i的网页的概率,其计算方式为 Pr(Pi|P1) = 1/

HDU 1811:Rank of Tetris(并查集+拓扑排序)

http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球.为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜,定时更新,名堂要比福布斯富豪榜还响.关于如何排名,这个不用说都知道是根据Rating从高到低来排,如果两个人具有相同的Rating,那就按

(HDU)1718 -- Rank (段位)

题目链接:https://vjudge.net/problem/HDU-1718 这题还好,不用考虑字典序排名(可以并列排名),看到有的人用了结构体或二重数组,介于这题的特殊性,其实不用这样. #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <string> #include

HDU - 5096 ACM Rank (Treap)

平衡树的题,Treap破之,比较难搞的出现相同题数罚时的情况,解决方法是在每个结点用一个set,比较值的时候可以把题数和罚时保存到一起. 初始化有一定技巧.细节很多容易出错. 写错一个变量名字查好久,尴尬 #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<queue> #include<vector> #include<

杭电 HDU ACM 1718 Rank

 Rank Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4160    Accepted Submission(s): 1616 Problem Description Jackson wants to know his rank in the class. The professor has posted a list of

百度距离谷歌何止一个太平洋的距离

作为一个程序员,如果不使用谷歌,那么你所查阅的资料几乎完全相同. 百度和谷歌何止一个太平洋的距离. 首先就是广告,百度现在的广告已经达到了让人无法忍受的地步了.你键入关键字进行搜索,出来的第一个或前几个答案都是百度推广的,都是非所答的结果. 先说说技术上: 作者:Kenny Chao 链接:http://www.zhihu.com/question/22447908/answer/21435705 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 搜索引擎需要对抓