public class PageRank {

private static double alpha = 0.85;

/**

* PageRank vector q is defined as q = Gq where

*  G = aS + (1-a)*U/n

*  S 为转移矩阵

*  U 是值都为1的矩阵

*  n 是节点数

*  a 权重值

* @param args

*/

public static void main(String[] args) {

//转移矩阵S

double[][] S = { { 0,    0.5, 0.5, 0, 0.5 },

{ 0.25, 0,   0,   0, 0   },

{ 0.25, 0,   0,   1, 0.5 },

{ 0.25, 0.5, 0.5, 0, 0   },

{ 0.25, 0,   0,   0, 0   } };

double[][] U = { { 1, 1, 1, 1, 1 },

{ 1, 1, 1, 1, 1 },

{ 1, 1, 1, 1, 1 },

{ 1, 1, 1, 1, 1 },

{ 1, 1, 1, 1, 1 } };

//计算 aS

double[][] aS = multi(alpha, S);

//(1-a)*U/n 的值

double[][] matrix2 = multi((1-alpha)/S[0].length,U);

//G 的值 = aS+(1-a)/n*U 两个矩阵相加

double[][] G = addMatrix(aS,matrix2);

//矩阵内容

matrixToString(G);

//初试时,假设上网者在每一个网页的概率都是相等的,PageRank 向量 vector

double[] pr_cur={1,1,1,1,1};

for(int i = 0; i < 100; i++){

double[] pr_next = multiMatrixVector(G, pr_cur);

System.out.println(pr_next[0]+" "+pr_next[1]+" "+pr_next[2]+" "+pr_next[3]+" "+pr_next[4]);

pr_cur = pr_next;

}

}

// 矩阵与向量相乘

/**

*

* @param multi  矩阵

* @param vector PageRank vector

* @return

*/

public static double[] multiMatrixVector(double[][] multi, double[] vector) {

//

double[] pageRankVector = new double[vector.length];

for (int i = 0; i < vector.length; i++) {

for (int row = 0; row < multi.length; row++) {

double pageRank = 0;

for (int col = 0; col < multi.length; col++) {

pageRank += (multi[row][col] * vector[col]);

}

pageRankVector[row] = pageRank;

}

}

return pageRankVector;

}

/**

*  两矩阵相加

* @param matrix1  矩阵1

* @param matrix2 矩阵2

* @return

*/

public static double[][] addMatrix(double[][] matrix1, double[][] matrix2) {

double[][] result = new double[matrix1.length][matrix1.length];

for (int row = 0; row < matrix1.length; row++) {

for (int col = 0; col < matrix1.length; col++) {

result[row][col] = matrix1[row][col] + matrix2[row][col];

}

}

return result;

}

/**

* // 矩阵乘因子

* @param gene 因子

* @param matrix

* @return

*/

public static double[][] multi(double gene, double[][] matrix) {

double[][] result = new double[matrix.length][matrix.length];

for (int row = 0; row < matrix.length; row++) {

for (int col = 0; col < matrix.length; col++) {

result[row][col] = matrix[row][col] * gene;

}

}

return result;

}

/**

* 打印矩阵内容

* @param matrix 矩阵

*/

public static void matrixToString(double[][] matrix) {

for (int row = 0; row < matrix.length; row++) {

for (int col = 0; col < matrix.length; col++) {

System.out.print(matrix[row][col] + ",");

}

}

}

}

java经典算法大全_JAVA 经典算法大全:PageRank算法相关推荐

  1. java随机数抽奖系统_Java实现游戏抽奖的算法

    Java实现游戏抽奖的算法 发布时间:2020-05-29 13:27:44 来源:亿速云 阅读:282 作者:鸽子 Java开发游戏抽奖算法主要有随机数一一对应.离散法Alias算法等. 一.随机数 ...

  2. pagerank算法实现matlab,Matlab 入门及PageRank算法求解.ppt

    Matlab 入门及PageRank算法求解 矩阵运算 + 矩阵加 - 矩阵减 * 矩阵乘 / 矩阵左除 \ 矩阵右除 ^ 矩阵幂 维数相同才能加减:方 阵才能求幂. 注意左乘,右乘. a\b?求a* ...

  3. java经典50题_JAVA经典算法50题(3)【面试+工作】

    原标题:JAVA经典算法50题(3)[面试+工作] JAVA经典算法50题(3)[面试+工作] [程序21] 题目:求1+2!+3!+...+20!的和. 1.程序分析:此程序只是把累加变成了累乘. ...

  4. java string逆序_java经典入门算法题,java初学者必备

    java经典入门算法题 开头求关注警告 喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资 料的也可以私信我! 祝关注我的人都:身体健康,财源广进,福如东海,寿比 ...

  5. java求公式例题_JAVA经典算法40题

    1: JAVA经典算法40题 2: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3 ...

  6. java冒泡遍历对象_Java经典排序算法(冒泡、选择、插入)

    排序算法说明 排序说明 对一序列对象根据某个关键字进行排序. 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b ...

  7. java web面试题大全_Java经典面试题之Java web开发汇总(附答案)

    1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? 答:Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servle ...

  8. java中queue排序_Java中常见的排序算法有哪些?---选择排序

    排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...

  9. java算法知识点_Java知识点梳理——数据结构与算法

    第二部分:数据结构与算法 一.数据结构 1.数组.链表.栈.队列的应用 (1)数组 优点在于: 构建非常简单 能在 O(1) 的时间里根据数组的下标(index)查询某个元素 缺点在于: 构建时必须分 ...

最新文章

  1. kentico中自定义错误页面
  2. spring-boot-maven-plugin 插件的作用(转)
  3. android+点击屏幕隐藏键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...
  4. php之自动加载(懒加载)
  5. 联想小新300加固态_就联想小新 Pro 13 固态硬盘混用一事,官方回应
  6. 发展之道:简单与专注
  7. php基础 简书,PHP的基础(一)
  8. 对服务与工厂感到困惑
  9. Yaml spring boot 二维数组写法
  10. JAVA人力、项目面试常谈问题以及个人开场介绍模板
  11. 企业信息安全模型(成熟度模型)
  12. 质谱借力ICL平台,静待LDT制度打开更大空间
  13. Python中文数字对照表,学生成绩管理【笔记】
  14. ue4 从小到大_UE4 Pak 相关知识总结
  15. 谷歌ai人工智能叫什么_用Google新的AI强大工具翻译古代象形文字
  16. Nessus 安装文件和详细教程(kali系统,附网盘下载链接)
  17. html多个好看的背景动态效果(附源码)
  18. Dijkstra 最短路径算法 秒懂详解
  19. 模拟登陆广西科技大学正方教务系统
  20. 任正非接班人李一男离开华为时给属下的忠告

热门文章

  1. Android 使用摄像头拍照
  2. 【翻译 windbg - 1】Getting started with windbg - part I (第一部分 1)
  3. 关于redis的几件小事(一)redis的使用目的与问题
  4. Data Mapper
  5. tfjob的一篇文章,跟公司内使用方式类似
  6. MySQL复制经常使用拓扑结构具体解释
  7. Centos 7 学习之静态IP设置
  8. 【mysql】SQL常用指令
  9. 让自己的程序支持livewriter
  10. java get请求传参_Java-ThreadLocal三种使用场景