页面权值

xiaoxiao2026-08-23  8

这两天为了完成作业写了一个计算页面计算权值的程序。 通过一个邻接表进行记录页面之间的关系。计算每一个页面的权值、 当前我只做了三个页面的,希望大虾们提意见让这个破程序一点点的完善 import java.util.*; public class MyPageRank { double a = 1.0;//代表三个页面的权值 double b = 1.0; double c = 1.0; double oldA = 1.0;//保存三个页面的权值 double oldB = 1.0; double oldC = 1.0; Map<Integer,Number> m = new HashMap<Integer,Number>();//用来记录索引和变量之间的关系 int [][]degree = new int[3][3];//记录临街表 int []out = new int[3];//记录每一个页面的出度 List<Integer> l1 = new ArrayList<Integer>();//用来存储链入当前页面的页面 List<Integer> l2 = new ArrayList<Integer>(); List<Integer> l3 = new ArrayList<Integer>(); /** * 初始化m值 */ public MyPageRank(){ m.put(0, a); m.put(1, b); m.put(2, c); } /** * 初始化邻接表 */ public void initMatrix(){ degree[0][0] = 0; degree[0][1] = 1; degree[0][2] = 1; degree[1][0] = 0; degree[1][1] = 0; degree[1][2] = 1; degree[2][0] = 1; degree[2][1] = 0; degree[2][2] = 0; } /** * 计算出度值 * @return 出度值 */ public int[] calculateO(){ for(int i=0;i<degree.length;i++){ for(int j=0;j<degree.length;j++){ if(degree[i][j]==1){ out[i]++; } } //System.out.println(out[i]); } return out; } /** *计算每一个页面的入度 */ public void calculateWI(){ for(int i=0;i<degree.length;i++){ for(int j=0;j<degree.length;j++){ if(degree[i][j]==1&&j==0)l1.add(i); else if(degree[i][1]==1&&j==1)l2.add(i); else if(degree[i][2]==1&&j==2)l3.add(i); } } } /** * 计算每一个页面的权值 */ public void calculate(){ this.initMatrix(); this.calculateO(); this.calculateWI(); double linA = 0.0; double linB = 0.0; double linC = 0.0; while(true){ /* * 计算a值 */ for(int i=0;i<l1.size();i++){ double d = (Double)m.get(l1.get(i)); int l = out[l1.get(i)]; linA += d/l; } a = 0.5 + 0.5*linA; linA = 0.0; m.remove(0); m.put(0, a); /* * 计算b值 */ for(int i=0;i<l2.size();i++){ double d = (Double)m.get(l2.get(i)); int l = out[l2.get(i)]; linB +=d/l; } b = 0.5 + 0.5*linB; linB = 0.0; m.remove(1); m.put(1, b); /* * 计算c值 */ for(int i=0;i<l3.size();i++){ double d = (Double)m.get(l3.get(i)); int l = out[l3.get(i)]; linC +=d/l; } c = 0.5 + 0.5*linC; linC = 0.0; m.remove(2); m.put(2, c); /* * 符合条件时跳出 */ if(oldA==a&&oldB==b&&oldC==c){ break; } oldA = a; oldB = b; oldC = c; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println("---------------"); } } public static void main(String []args){ MyPageRank mpr = new MyPageRank(); mpr.calculate(); } }
转载请注明原文地址: https://www.6miu.com/read-5051706.html

最新回复(0)