资源简介
本代码使用java实现的pagerank,上传的文件中有数据集和代码,是完整的一套。希望本代码会对需要的人有帮助!
代码片段和文件信息
/*代码功能:利用数据集中的各个网页的关系得到转移矩阵,并用公式pr=b*pr+1/n(1-b)进行反复迭代计算
pr值
编写人:崔丹丹
时间:2013.12.22
*/
import java.io.File;
//import java.io.FileReader;
//import java.util.Arrays;
import java.io.*;
class MyPageRank {
int array[][];
double page[];
final double b = 0.85;//
final int N = 6012;//6012个网页
double PR[];//用来存放最终的PR值
double PRold[];//用来存放迭代过程中的PR值
int arrayOutDrgee[];//定义一个数组用来存放每一个网页的出度
int arrayInDrgee[];//定义一个数组用来存放每一个网页的入度
double thr = 0.00001;//定义阈值
MyPageRank() {//初始化变量和数组
ReadFile rankfile = new ReadFile();
rankfile.ReadFile1();
array = rankfile.arrayGX;
page = rankfile.arrayID;
PRold = new double[N];
for (int i = 0; i < N; i++) {//初始的PR值为1
PRold[i] = 1.0;
}
}
public void ReadArray() {
arrayOutDrgee = new int[page.length];
arrayInDrgee = new int[page.length];
for (int i = 0; i < array.length; i++) {
arrayOutDrgee[array[i][0] - 1]++;//计算网页的出度
arrayInDrgee[array[i][1] - 1]++;//计算网页的入度
}
}
public void CountValue() {
for (int i = 0; i < array.length; i++) {
PR[array[i][1] - 1] = PR[array[i][1] - 1] + PRold[array[i][0] - 1]
/ arrayOutDrgee[array[i][0] - 1];//用旧的pr值更新 新的PR值
}
//System.out.println(PR[1]+“ “+PR[0]+“ “+PR[3]);
for (int j = 0; j < N; j++) {
if (arrayInDrgee[j] != 0) {//如果入度不为0,则利用公式计算
PR[j] = PR[j] * b + (1 - b) / N;
} else {//如果为0则为定值
PR[j] = (1 - b) / N;
}
}
// Sort(PRpage);
// System.out.println(page.length);
// System.out.println(PR.length);
}
public boolean XHTJ()// 循环条件,如果新的PR-旧的PR 大于阈值则继续迭代计算
{
for (int i = 0; i < PR.length; i++) {
if (Math.abs(PR[i] - PRold[i]) > thr) {
return false;
}
}
return true;
}
public void ReCountValue() {
ReadArray();//调用计算出度入度函数
PR = new double[N];
CountValue();//计算
while (!XHTJ()) {//看是否满足循环条件
for(int i=0;i PRold[i]=PR[i];
PR[i]=0;
}
CountValue();
//System.out.println(PR[1]);
}
}
public void Sort(double[] PR double[] page)// 对数组中的pr值进行冒泡排序
{
/* Arrays.sort(PR); */
int len = PR.length;
double temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (PR[j] < PR[j + 1]) {
temp = PR[j];
PR[j] = PR[j + 1];
PR[j + 1] = temp;
//对应存储ID的数组相应变化
temp = page[j];
page[j] = page[j + 1];
page[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {//主函数
MyPageRank test = new MyPageRank();
// test.ReadArray();
// System.out.println(test.arrayInDrgee[1]);
test.ReCountValue();
test.Sort(test.PR test.page);//调用排序函数
for (int i = 0; i < test.PR.length; i++) {//输出结果
System.out.println(“计算的PR值为: “+test.PR[i]+“ 网页的ID为: “+test.page[i]);
}
// System.out.println(PR.length);
try {//将结果存到一个新的文件中
File file = new File(
“C:\\Users\\Administrator\\Desktop\\运行结果.txt“);
FileWriter f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 682949 2013-12-22 09:03 hollins.dat
目录 0 2014-01-16 14:36 MyPageRank\
文件 301 2013-12-19 00:13 MyPageRank\.classpath
文件 386 2013-12-19 00:13 MyPageRank\.project
目录 0 2014-01-16 14:36 MyPageRank\.settings\
文件 629 2013-12-19 00:13 MyPageRank\.settings\org.eclipse.jdt.core.prefs
目录 0 2014-01-16 14:36 MyPageRank\bin\
文件 3522 2013-12-25 15:11 MyPageRank\bin\MyPageRank.class
文件 2054 2013-12-25 16:55 MyPageRank\bin\ReadFile.class
目录 0 2014-01-16 14:36 MyPageRank\src\
文件 3667 2013-12-25 15:11 MyPageRank\src\MyPageRank.java
文件 2362 2013-12-25 16:55 MyPageRank\src\ReadFile.java
文件 183 2014-01-16 14:39 说明.txt
评论
共有 条评论