• 大小: 133KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Java
  • 标签: pagerank  

资源简介

本代码使用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

评论

共有 条评论