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
of "measuring" its relative importance within the set. The algorithm may be applied to any collection of entities with reciprocal quotations and references. The numerical weight that it assigns to any given element E is referred to as the PageRank of E and
denoted by . Other factors like Author Rank can contribute to the importance of an entity.
For simplicity, in this problem PageRank vector q is defined as q = Gq, Where
, S is the destination-by-source stochastic matrix, U is all one matrix, n is the number ofnodes and α is the weight between 0 and 1 (here we use 0.85).
For the example on the right, we have:

Denote the current PageRank vector and the next PageRank vector by qcur and qnext respectively. The process is to compute the iterative powering for finding the first eigenvector.

The computation ends until
for some small ε(10-10).For each case, there are multiple lines. The first line contains an integer N(N<=3000), which represents the number of pages. Then a N*N zero-one matrix follows. The element Eij (0 <= i, j < N) on the matrix represents whether the i-th page has a
hyper link to the j-th page.
4
0111
0011
0001
0100
0.15 1.49 0.83 1.53
pid=5379" target="_blank" style="color:rgb(26,92,200); text-decoration:none">5379
pid=5378" target="_blank" style="color:rgb(26,92,200); text-decoration:none">5378
pid=5377" target="_blank" style="color:rgb(26,92,200); text-decoration:none">5377
pid=5376" target="_blank" style="color:rgb(26,92,200); text-decoration:none">5376
pid=5375" target="_blank" style="color:rgb(26,92,200); text-decoration:none">5375
Problem : 5097 ( Page Rank ) Judge Status : Accepted
RunId : 14492913 Language : C++ Author : lwj1994
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include<stdio.h>
#include<string.h>
#include<math.h>
#define eps 1e-10
char map[3030];
double ans[3030][3030];
double q[2][3030];
int n;
void muti(double a[][3030],double num)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
a[i][j]*=num;
}
}
void add(double a[][3030],double b[][3030])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
a[i][j]+=b[i][j];
}
}
int jud()
{
double ans=0;
int i;
for(i=0;i<n;i++)
{
ans+=(q[0][i]-q[1][i])*(q[0][i]-q[1][i]);
}
//ans=sqrt(ans);
if(fabs(ans)<eps)
return 1;
return 0;
}
int main()
{
//int n;
while(scanf("%d",&n)!=EOF)
{
int i,j;
double a=0.85;
memset(ans,0,sizeof(ans));
for(i=0;i<n;i++)
{
int sum=0;
scanf("%s",&map);
for(j=0;j<n;j++)
{
if(map[j]=='1')
sum++;
//U[i][j]=1;
}
for(j=0;j<n;j++)
{
if(map[j]=='1')
ans[j][i]=1.0/sum;
}
}
muti(ans,a);
// muti(U,1.0/n*(0.15));
// printf("\n");
// add(ans,U);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
ans[i][j]+=(0.15/n);
int p=0;
for(i=0;i<n;i++)
{
q[p][i]=1;
q[p^1][i]=0;
}
//mmuti(q[p],ans,q[p^1]);
//p^=1;
while(!jud())
{
//q[p^1]=mmuti(q[p],ans);
for(i=0;i<n;i++)
{
q[p^1][i]=0;
for(j=0;j<n;j++)
q[p^1][i]+=q[p][j]*ans[i][j];
}
p^=1;
}
printf("%.2lf",q[p][0]);
for(i=1;i<n;i++)
{
printf(" %.2lf",q[p][i]);
}
printf("\n");
}
}
HDOJ 题目5097 Page Rank(矩阵运算,模拟)的更多相关文章
- HDU 5097 Page Rank (模拟)
题目背景是以前用来对网页进行排名的Page Rank算法,是早期Google的革命性发明. 背后的原理是矩阵和图论.这个数学模型是由Google的创始人拉里·佩奇和谢尔盖·布林发现的. 如果一个网页被 ...
- 杭电hdoj题目分类
HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就 ...
- HDOJ 题目分类
HDOJ 题目分类 /* * 一:简单题 */ 1000: 入门用:1001: 用高斯求和公式要防溢出1004:1012:1013: 对9取余好了1017:1021:1027: ...
- [IR课程笔记]Page Rank
主要目的: 在网络信息检索中,对每个文档的重要性作出评价. Basic Idea: 如果有许多网页链接到某一个网页,那么这个网页比较重要. 如果某个网页被一个权重较大的网页链接,那么这个网页比较重要. ...
- 【HDOJ】5096 ACM Rank
Treap+set仿函数重定义.每当ac一道题目时,相当于对总时间减去一个大数. /* 5096 */ #include <iostream> #include <string> ...
- HDOJ题目分类
模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...
- HDOJ 题目2475 Box(link cut tree去点找祖先)
Box Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDOJ 题目3518 Boring counting(后缀数组,求不重叠反复次数最少为2的子串种类数)
Boring counting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 题目2474 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- 自顶向下(递归)的归并排序和自底向上(循环)的归并排序——java实现
归并排序有两种实现方式,自顶向下和自底向上.前者的思想是分治法,现将数组逐级二分再二分,分到最小的两个元素后,逐级往上归并,故其核心在于归并.后者的思想相反,采用循环的方式将小问题不断的壮大,最后变成 ...
- C语言程序判断文件夹是否存在
#include <stdio.h> #include <io.h> int main(void){ if ( !access("C://Users/hui" ...
- 有关于dict(字典)的特性与操作方法
有关于dict(字典)的特性与操作方法 1.字典的特性 语法: dic = {key1 : value1,key2 : value2,key3 : value3............} 注:字典中k ...
- thinkphp 上传多张图片
tp3.23 没有找到同时上传多张图片 手册有讲过:http://www.kancloud.cn/manual/thinkphp/1876 其实可以通过,多张图片多次上传来到达效果 hmlt: < ...
- 2015 多校赛 第四场 1009 (hdu 5335)
Problem Description In an n∗m maze, the right-bottom corner is the exit (position (n,m) is the exit) ...
- Bootstrap3.0的栅格布局系统实现原理
这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...
- 2.0 Linux系统的安装之Fedora安装单系统(2)
2.0 Linux系统的安装之Fedora安装单系统(2) *Linux系统的安装之Fedora安装单系统 恐怕最好装的系统就是Linux系统了,或者与Windows并列.此篇教程为Fedora的单系 ...
- java编程题(一)
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 p ...
- jenkins如何实现重新发布历史构建记录里的版本
Jenkins以前打包都会将打出的拷贝放到历史版本里放到Daily_Result里,昨天不只是误操作还是系统问题,误将一个历史版本的包删掉了,而且这个包是之前比较稳定的一个版本,需要重新给客户发,所以 ...
- 关于python学习路线
*Python进阶(目录/书籍/学习路线) 忘了从哪里转的了,没办法标记哦,实在不好意思... 目录:) 1. 简介&helloworld&开发环境配置 2.基本语法:标识符& ...