知识大全 HITS算法Java实现
Posted 知
篇首语:愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 HITS算法Java实现相关的知识,希望对你有一定的参考价值。
HITS算法Java实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
HITS算法是重要的链接分析算法 很多书上是用矩阵的形式来描述HITS算法
其中 为邻接矩阵 和分别为权威值和中心值 幂法迭代算法如下
但是为了空间的考虑 我们在存储Web图的时候 一般都是用的邻接矩阵表示
经过分析发现 一个页面的权威值 其实是指向它的页面的中心值之和 一个页面的中心值 是它指向的页面的权威值的过程 这是一个相互加强的过程
下面是用Java实现的代码
package cn edu dlut wisdom;
import it unimi dsi webgraph ImmutableGraph;
import it unimi dsi webgraph LazyIntIterator;
import it unimi dsi webgraph NodeIterator;
import it unimi dsi webgraph Transform;
import apache log j Logger;
/**
*
* @author You Wang
*/
public class HITS
/**
* 正向图
*/
private ImmutableGraph g;
/**
* 反向图
*/
private ImmutableGraph ig;
/**
* 日志
*/
private final Logger logger;
/**
* 结点数目
*/
private int numNodes;
/**
* 权威分数
*/
private double[] authorityScores;
/**
* 中心分数
*/
private double[] hubScores;
/**
* 两次权威分数之差绝对值的和
*/
private double authorityNorm;
/**
* 两次中心分数之差绝对值的和
*/
private double hubNorm;
/**
* 迭代次数
*/
private double numIter = ;
/**
* 获取中心差值
* @return
*/
public double getHubNorm()
return hubNorm;
/**
* 获取权威差值
* @return
*/
public double getAuthorityNorm()
return authorityNorm;
/**
* 获取权威分数
* @return
*/
public double[] getAuthorityScores()
return authorityScores;
/**
* 获取中心分数
* @return
*/
public double[] getHubScores()
return hubScores;
/**
* 构造函数
* @param g 要计算的Web图
*/
public HITS(ImmutableGraph g)
this g = g;
ig = Transform transpose(g);
numNodes = g numNodes();
authorityScores = new double[numNodes];
hubScores = new double[numNodes];
double is = / numNodes;
for (int i = ; i < numNodes; i++)
authorityScores[i] = is;
hubScores[i] = is;
logger = Logger getLogger(HITS class);
/**
* 设定初始权威分数
* @param scores
*/
public void setInitialAuthorityScores(double[] scores)
if (scores length != numNodes)
throw new IllegalArgumentException( array length mismatch );
this authorityScores = scores;
/**
* 设定初始中心分数
* @param scores
*/
public void setInitialHubScores(double[] scores)
if (scores length != numNodes)
throw new IllegalArgumentException( array lenght mismatch );
this hubScores = scores;
/**
* 迭代中的一步
*/
public void step()
( iter + ++numIter);
authorityNorm = ;
hubNorm = ;
NodeIterator nit = g nodeIterator();
NodeIterator init = ig nodeIterator();
double[] as = new double[numNodes];
double[] hs = new double[numNodes];
while(nit hasNext() && init hasNext())
int i = nit nextInt();
int j = init nextInt();
assert (i == j);
LazyIntIterator it = init successors();
as[i] = ;
int k;
while ((k = it nextInt()) != )
as[i] += hubScores[k];
hs[i] = ;
it = nit successors();
while ((k = it nextInt()) != )
hs[i] += authorityScores[k];
// 归一化处理
normalize(as);
normalize(hs);
authorityNorm = puteNorm(authorityScores as);
hubNorm = puteNorm(hubScores hs);
authorityScores = as;
hubScores = hs;
( authority norm: + authorityNorm);
( hub norm: + hubNorm);
/**
* 归一化
* @param a
*/
private void normalize(double[] a)
double s = ;
for (double d : a)
s += d;
for (int i = ; i < a length; i++)
a[i] /= s;
/**
* 计算绝对差和
* @param a
* @param b
* @return
*/
private double puteNorm(double[] a double[] b)
if (a length != b length)
throw new IllegalArgumentException( array length mismath );
double norm = ;
for (int i = ; i < a length; i++)
norm += Math abs(a[i] b[i]);
return norm;
/**
* 一直迭代 知道达到最大次数限制
* @param iter 最大迭代次数
*/
public void stepUntil(int iter)
while (iter > )
step();
/**
* 一直迭代 直到达到规定的停止基准
* @param stopNorm 停止基准
*/
public void stepUntil(double stopNorm)
while (authorityNorm > stopNorm || hubNorm > stopNorm)
step();
cha138/Article/program/Java/hx/201311/26820
相关参考
最近在面试遇到很多排序算法问题总结一下 定义数组如下 [java] int[]array=newint[]; int[]array=newint[]; 首先是插入排序 [java]
JAVA凸包算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 源码一JarvisMarchja
JAVA垃圾回收算法摘要 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 垃圾收集的算法分析 j
Java通用权限控制算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一种常用的权限控制算法的
Java扫雷算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 建立一个雷区可以用一个一个的JB
Hash算法大全(java实现) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hash算法有很
知识大全 Java技术进阶 基于Java的IDEA加密算法探讨
Java技术进阶基于Java的IDEA加密算法探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java的垃圾回收之算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 引言 Java的堆是一
Java代码 插入排序: packagerututilalgorithmsupport; importrututilalgorithmSortUtil; publicclassInse
Java垃圾收集算法与内存泄露 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 垃圾收集算法的核心