`
linhaoxiang
  • 浏览: 22234 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

PageRank算法的JAVA代码实现

阅读更多

                               PageRank算法的JAVA代码实现

  前天峰哥突然给了一个任务,要我们一周之内搞定PageRank的算法,当时乍的一听觉得有点高大上,这两天查了点资料加上小半个通宵,终于还是给搞出来了。

  搞PageRank算法首先就要了解这个算法的核心算法,这个以佩奇名字命名的算法,核心算法是这样的:

PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 
其中:PR(A):页面A的网页级别
PR(Ti):页面Ti的网页级别,页面Ti链向页面A, 
C(Ti):页面Ti链出的链接数量,
d:阻尼系数,取值在01之间.

从上我们可以看出想要实现这个算法不难,只要通过迭代就能实现,暂且先不说这个算法的原理是什么,先附上我的源码。

public class PageRank_My {
 
public static void main(String[] args) {
// 定义阻尼系数
double damp = 0.85;
 
/* 测试数据,表示四个网页相互之间的有向链接矩阵
 * 用矩阵形式表示
 *    A  B  C  D
 * A  0  1  1  0
 * B  0  0  1  0
 * C  1  1  0  0
 * D  0  1  1  0
 * */
 
int[][] link = {
{ 0, 1, 1, 0 }, 
{ 0, 0, 1, 0 }, 
{ 1, 1, 0, 0 },
{ 0, 1, 1, 0 }
 
};
// 各点的总链出数量
int[] linkOut = new int[link.length];
for (int i = 0; i < link.length; i++) {
for (int j = 0; j < link.length; j++) {
linkOut[i] += link[i][j];
}
}
//定义一个初始数组并初始化,设所有的页面初始PR值都为1;
double[] pr = new double[link.length];
 
double[] init = new double[link.length];
for (int i = 0; i < link.length; i++) {
init[i] = 1.0;
 
}
pr = pagerank(link, damp, linkOut, init);
 
//我们进行10次迭代计算pagerank的值
for(int i=0;i<10;i++){
System.arraycopy(pr, 0, init, 0, link.length);
pr = pagerank(link, damp, linkOut, pr);
}
 
for (int i = 0; i < link.length; i++) {
System.out.println("PR(" + i + ") = " + pr[i]);
}
 
}
/*计算pagerank的函数
 * @param link 页面的链接图
 * @param damp 设置的阻尼系数,佩奇设的是0.85
 * @param linkout 每个页面的链接总数
 * @param init 上次迭代的结果
 * 
 * */
public static double[] pagerank(int[][] link, double damp, int[] linkout,
double[] init) {
 
double[] pr = new double[init.length];
double num = 0;
for (int i = 0; i < init.length; i++) {
for (int j = 0; j < init.length; j++) {
// 接下来的判断是关键,计算非本页面,和链接数不为0的页面,并且那个页面有连到本页面的值,即是links[j][i] !=0。
if ((i != j) && (linkout[j] != 0) && (link[j][i] != 0))
num = num + init[j] / linkout[j];
 
}
// pagerank的计算公式
pr[i] = damp + (1 - damp) * num;
}
return pr;
}
}

 

 

 

  通过注释不难理解这个算法的过程,算法的原理我之后再详细道来。

 

 

分享到:
评论

相关推荐

    pageRank简单实现(Java)

    实现PageRank算法最为简单的代码,此代码使用java编写,适合与学习搜索引擎了解pageRank算法的初学者。

    java实现和Matlab语言实现的pagerank算法

    完整的用JAVA和MATLAB实现的Pagerank算法,且富有详细的注释

    PageRank实现java代码(有图形操作文件操作界面)

    可读入文件,更可按你的要求生成随机的矩阵,全图形操作界面!...PageRank算法及Java代码实现,加入阻尼系数变量,可轻松修改迭代次数及阻尼变量,并且输出时提示是第几次的迭代输出. 对输入的格式要求有很详细的介绍!

    java实现网页排名算法

    java实现网页排名算法java实现网页排名算法java实现网页排名算法java实现网页排名算法java实现网页排名算法

    pagerank算法实现

    本代码使用java实现的pagerank,上传的文件中有数据集和代码,是完整的一套。希望本代码会对需要的人有帮助!

    使用Spark GraphX基于PageRank算法构建的一个仿微博用户好友的分布式推荐系统+源代码+文档说明

    1、资源内容: 2、代码特点:内含运行结果,不会运行可私信,参数化编程、...在社交网络中,PageRank算法有着广泛的应用,因此,本篇文章主要介绍其原理以及实战进行好友的推荐 ,最后实战项目的全部代码会在GitHub上开

    数据挖掘18大算法实现以及其他相关经典DM算法

    18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的博文链接,希望能够帮助大家学。 目前追加了其他的一些经典的DM算法,在others的包中涉及...

    PangRank代码(Java)

    PageRank算法及Java代码实现,加入阻尼系数变量,可轻松修改迭代次数及阻尼变量,并且输出时提示是第几次的迭代输出. 对输入的格式要求有很详细的介绍!

    PageRank代码实现

    通过代码实现了一个Google排名算法PageRank,内部有详细的代码注解。用户可以通过文件选择器选择读入指定的文件进行计算,文件的第一行为初始PR值,余下的行为矩阵,其中矩阵行元素间用“,”隔开,行与行之间无需...

    BigDataAnalysis_Exp3:实时大数据分析_PageRank算法

    实时大数据分析实验三——PageRank算法一、实验内容1.采用基于“抽税”法在MapReduce框架下,分析图1的网页PageRank排名;2.图1中,若节点②和节点⑤是主题节点,采用面向主题的PageRank算法重新计算所有节点的...

    codes-scratch-crawler:读书笔记《自己动手写网络爬虫》,自己敲的代码。主要记录了网络爬虫的基本实现,网页去重的算法,网页指纹算法,文本信息挖掘

    PageRank PageRank算法实现 WebGraph Web图建模 WebGraphMemory 内存Web图 SimpleBloomFilter 布隆过滤器 BDBFrontier 使用Berkeley DB 来做爬虫的前端url爬取列表存储 Crawler 爬虫一只,采用了宽度优先的方式爬取...

    pagerankmatlab代码-DataMining:数据挖掘与大数据相关代码

    pagerank matlab代码斯坦福CS246作业数据挖掘代码 PageRank.m 是关于 ...算法的 matlab 代码 PrimeDivisor.java calc 12 to (2,12),(3,12) 对等基于hadoop和MR EditDistance.m calc 两个字符串的编辑距离

    InformationRetrieval:建立信息检索系统

    Python 中的 PageRank 算法:给定对网络图的链接内表示的访问,即对于每个页面 p,链接到 p 的页面 q 的列表,在 183,811 个网络文档的集合上实现了迭代 PageRank 算法。 为了测试收敛性,计算 PageRank 分布的困惑...

    湖科大数据挖掘课设报告+源码,仅供大学学习参考

    通过Python/Java/VC或自己熟悉的语言编程实现知识发现、关联规则、分类聚类领域一些重要的算法,让学生掌握C4.5、k-mean、Apriori、EM、PageRank、DBSCAN等算法基本原理,能够运用数据挖掘方法解决具体问题。...

    MrPageRank:佩奇先生排名

    (您可以在这里观看我制作的有关该课程的视频: : )一般任务任务是在的完整Wikipedia的已解析版本上实现PageRank算法的精简版本。 为了完成这样的任务,我们需要设计和实现用于解析,过滤,投影和转换数据的算法。...

    Search-Engine:基于文本的信息检索搜索引擎

    5.) 在 Java 中设计了 PageRank 算法以返回前 N 个网页。 6.) 在 Java 中编程 K-means 聚类以生成相关网页的聚类。 7.) 从前“N”个网页中提取代码段和标题以将它们显示给用户,以便用户可以选择与其查询更相关的...

    北京大学信息学院计算机系 本科&研究生课程大作业选集

    数据结构与算法实习(2012秋 大二上):电梯模拟器、连连看、miniSQL Java程序设计(2013春 大二下):网络爬虫 微机实验(2013春 大二下):双面贪吃蛇 计算机组织与体系结构(2013秋 大三上):指令级模拟及...

    word源码java-THUTag:KeyphraseExtraction和SocialTagSuggest的包,该项目已转移到

    word源码java THUTag:​​一包 ...一些代码实现了诸如分词、pagerank 等功能 第二部分:如何编译 THUTag 环境:java(支持java 1.8.0),Linux ant : 在“THUTag/”目录下启动一个终端,输入命令“ant

    Hadoop实战(第2版)

    数据科学.7 数据结构和算法的运用7.1 使用图进行数据建模和解决问题7.1.1 模拟图7.1.2 最短路径算法技术点52 找出两个用户间的最短距离7.1.3 friends-of-friends(FoF) 技术点53 计算FoF 7.1.4 ...

    aim3project.graph

    #Analysis of Graph Structure in the Web Using Apache Flink 并行图算法在 35 亿个网页和 1280 亿个超链接上运行,包括度、PageRank、接近度和介数######与:##...Java 中的算法 WebCommon 使用的代码 亲密性和中间性

Global site tag (gtag.js) - Google Analytics