当前位置: 首页 > news >正文

PageRank算法c++实现

首先用邻接矩阵A表示从页面j到页面i的概率,然后根据公式生成转移概率矩阵

M=(1-d)*Q+d*A                           常量矩阵Q=(qi,j),qi,j=1/n

给定点击概率d,等级值初始向量R0,迭代终止条件e;

计算Ri+1=M*Ri;

ei=|Ri+1-Ri|,当ei<=e时输出Ri+1作为最终等级值向量。

#include "fstream"
#include "sstream"
#include <iostream>
#include <set>
#include <vector>using namespace std;int getNum()
{set<int> N;ifstream is("a.txt");int u, v;while (is >> u >> v){N.insert(u);N.insert(v);}return N.size();
}void getPage(vector<vector<int>>& page)     //&
{ifstream is("a.txt");int u, v;while(is>>u>>v){ page[u].push_back(v);}
}void PageRank(vector<vector<int>>&page,int N,double d,double e,int maxIterations)
{//得到Mvector<vector<double>> M(N,vector<double>(N,0.0));for (int i = 0; i < N; i++){if (page[i].size() > 0){for (int j : page[i]){M[j][i]++;           //0/1}for (int j=0;j<N;j++){M[j][i] /= page[i].size();}}else{for (int j : page[i]){M[j][i] = 0;}}}for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){//cout << M[i][j]<<" ";             //正确M[i][j] = d * M[i][j] + (1 - d) * (1.0 / N);//cout << M[i][j] << " ";}}vector<double> pagerank(N, 1.0);while (maxIterations){vector<double> newpagerank(N, 0.0);double dif=0.0;for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){newpagerank[i] += M[i][j] * pagerank[j];}dif+= abs(pagerank[i]-newpagerank[i]);}//cout << dif << endl;pagerank = newpagerank;if (dif < e){//cout << maxIterations<<endl;break;}maxIterations--;}cout << "等级值分别为:" << endl;for (int i = 0; i < N; i++){cout << pagerank[i]<<endl;}
}int main()
{int num = getNum();vector<vector<int>> page(num);getPage(page);double d = 0.85;double e = 0.1;int maxIterations = 100;PageRank(page, num, d, e, maxIterations);}

数据

0 1
0 2
0 3
1 0
1 2
2 3
3 0
3 1

结果 

http://www.lryc.cn/news/217869.html

相关文章:

  • 超低价:阿里云双11服务器优惠价格表_87元一年起
  • docker的安装Centos8
  • Android.mk文件制定了链接库,但是出现ld Error
  • 10.MySQL事务(上)
  • nexus搭建npm私有镜像
  • 智能化的宠物喂食器解决方案
  • java配置GDAL
  • 采购对接门禁系统采购进厂 空车出厂
  • 服务器经常被攻击的原因
  • 子女购买房屋,父母出资的如果父母有关借贷的举证不充分则应认定该出资为赠与行为
  • 【腾讯云HAI域探秘】速通腾讯云HAI
  • R语言爬虫代码模版:技术原理与实践应用
  • 行业观察:数字化企业需要什么样的数据中心
  • PHP依赖注入 与 控制反转详解
  • 算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历
  • 大数据毕业设计选题推荐-旅游景点游客数据分析-Hadoop-Spark-Hive
  • 单片机,0.06
  • [PyTorch][chapter 59][强化学习-2-有模型学习]
  • 【接口测试】HTTP接口详细验证清单
  • ALLRGRO拼板的问题。
  • YOLO算法改进6【中阶改进篇】:depthwise separable convolution轻量化C3
  • 自定义类型枚举
  • PHP foreach 循环跳过本次循环
  • lua-web-utils库
  • 大数据毕业设计选题推荐-热门旅游景点数据分析-Hadoop-Spark-Hive
  • Oracle-执行计划
  • Pytho入门教程之Python运行的三种方式
  • 如何修改docker容器中的MySQL数据库的密码?
  • JOSEF约瑟 数显三相电压继电器 HJY-931A/D 导轨安装
  • 第6章_多表查询