本文一部分是针对图的PageRank 的实现,以及具体数据集的分析过程的记录。
另一部分是BFS的实现,并记录每一层的节点数。
数据集下载地址 soc-Slashdot0811 、 roadNet-CA 、 soc-LiveJournal1
1. java 实现代码
Main.java
import java.util.List;
public class Main{
public static void main(String args[]){
long start = System.currentTimeMillis();
List<List<Integer>> graph = PageRank.file_to_matrix();
System.out.println("开始PageRank算法...");
PageRank.pagerank(graph);
System.out.println("PageRank算法结束,总共用时:" + (System.currentTimeMillis() - start) + "ms");
start = System.currentTimeMillis();
System.out.println();
System.out.println("开始进行BFS遍历...");
System.out.println();
BFS.bfs(graph);
System.out.println();
System.out.println("BFS结束,总共用时:" + (System.currentTimeMillis() - start) + "ms");
}
}
PageRank.java
import java.io.*;
import java.sql.Time;
import java.util.*;
public class PageRank {
// public static final int N = 77360;
// public static final int N = 1971281;
public static final int N = 4847571;
// public static final int N = 5;
private static final double AFA = 0.85;
private static final double DELTA = 1;
private static final double MAX_TIMES = 100;
// private static final String FILE = "/home/jkbao/Slashdot0811.txt";
// private static final String OUT = "/home/jkbao/result.txt";
// private static final String FILE = "/home/jkbao/roadNet-CA.txt";
// private static final String OUT = "/home/jkbao/result_roadNet.txt";
private static final String FILE = "/home/jkbao/soc-LiveJournal1.txt";
private static final String OUT = "/home/jkbao/result_LiveJournall.txt";
public static void pagerank(List<List<Integer>> graph){
// List<List<Integer>> graph = new ArrayList<>();
// List<Integer> list0 = Arrays.asList(1,2,3);
// List<Integer> list1 = Arrays.asList(3,4);
// List<Integer> list2 = Arrays.asList(4);
// List<Integer> list3 = Arrays.asList(4);
// List<Integer> list4 = Arrays.asList(0);
// graph.add(list0);
// graph.add(list1);
// graph.add(list2);
// graph.add(list3);
// graph.add(list4);
double [] Prnew = new double[N];
for (int i = 0; i < N; i++) {
Prnew[i] = 1.0/N;
}
double [] Pr;
//迭代至|Pn+1−Pn|<ϵ
long start = System.currentTimeMillis();
long now = 0;
for (int i = 1; i < MAX_TIMES; i++) {