知识大全 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实现

  最近在面试遇到很多排序算法问题总结一下  定义数组如下  [java]  int[]array=newint[];  int[]array=newint[];  首先是插入排序  [java]  

知识大全 JAVA凸包算法

JAVA凸包算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源码一JarvisMarchja

知识大全 JAVA垃圾回收算法摘要

JAVA垃圾回收算法摘要  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集的算法分析  j

知识大全 Java通用权限控制算法

Java通用权限控制算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一种常用的权限控制算法的

知识大全 Java扫雷算法

Java扫雷算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  建立一个雷区可以用一个一个的JB

知识大全 Hash算法大全(java实现)

Hash算法大全(java实现)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hash算法有很

知识大全 Java技术进阶 基于Java的IDEA加密算法探讨

Java技术进阶基于Java的IDEA加密算法探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java的垃圾回收之算法

Java的垃圾回收之算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  Java的堆是一

知识大全 java的各种排序算法

  Java代码  插入排序:    packagerututilalgorithmsupport;  importrututilalgorithmSortUtil;  publicclassInse

知识大全 Java垃圾收集算法与内存泄露

Java垃圾收集算法与内存泄露  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集算法的核心