谷歌pageRank算法简单实现

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.csdn.net/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.csdn.net/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

1 参考根据幻灯片中第9页所给出的“4网页模型” ,现假设有A,B,C,D,E五个网页,其中 
1)A网页有链接指向B,C,D,E 
2)B网页有链接指向A,D 
3)C网页有链接指向A,D 
4)D网页有链接指向C 
5)E网页有链接指向A,C 
A 请写出这个网页链接结构的Google矩阵,目测你认为哪个页面的重要性(PR值)最高? 
B(本题可选)手动或编程计算这5个页面的PR值,可以使用任何你熟悉的编程语言,欢迎在论坛上晒自己的程序和结果 

 

C(本题可选)指出当页面较多的时候,计算PR的主要困难在什么地方,Map-Reduce是怎么解决这个难题的? 

 

A的实现:

 

package demo;

public class PageRank {
	public static int[][] linkMatrix(){
		int[] A=new int[5];
		A[0]=0;A[1]=1;A[2]=1;A[3]=1;A[4]=1;
		int[]B=new int[5];
		B[0]=1;B[1]=0;B[2]=0;B[3]=1;B[4]=0;
		int []C=new int[5];
		C[0]=1;C[1]=0;C[2]=0;C[3]=1;C[4]=0;
		int []D=new int[5];
		D[0]=0;D[1]=0;D[2]=1;D[3]=0;D[4]=0;
		int []E=new int[5];
		E[0]=1;E[1]=0;E[2]=1;E[3]=0;E[4]=0;
		int [][] linkMatrix=new int[][]{A,B,C,D,E};
		return linkMatrix;
	}
	
	public static double[][]generateSMatrix(int[][]linkMatrix){
		double[][] sMatrix=new double[linkMatrix.length][linkMatrix[0].length];
		int [] linkSum=new int[linkMatrix.length];
		for(int i=0;i<linkMatrix.length;i++){
			 int sum=0;
			 for(int j=0;j<linkMatrix[i].length;j++){
				sum+=linkMatrix[i][j];
			 }
			 linkSum[i]=sum;
		 }
		for(int i=0;i<sMatrix.length;i++){
			 for(int j=0;j<sMatrix[i].length;j++){
				 sMatrix[j][i]=linkMatrix[i][j]/((double)linkSum[i]);
			 }
		} 
		return sMatrix;
	}
	
	public static double [][]generateGMatrix(double alpha,double[][]sMatrix){
		double [][]gMatrix=new double[sMatrix.length][sMatrix.length];
		for(int i=0;i<sMatrix.length;i++){
			 for(int j=0;j<sMatrix[i].length;j++){
				 gMatrix[i][j]=sMatrix[i][j]*alpha+(1-alpha)/sMatrix.length;
			 }
		} 
		return gMatrix;
	}
	
	public static double[] generateQVecotor(double quanlity,double[]qVecotor,double[][]gMatrix){
		double[] nextQVecotor=new double[qVecotor.length];
		for(int i=0;i<gMatrix.length;i++){
			 for(int j=0;j<gMatrix[i].length;j++){
				 nextQVecotor[i]+=gMatrix[i][j]*qVecotor[j];
			 }
		} 
		boolean pass=true;
		for(int i=0;i<nextQVecotor.length;i++){
			if(Math.abs(nextQVecotor[i]-qVecotor[i])>quanlity){
				pass=false;
			}
		}
		if(pass){
			return nextQVecotor;
		}else{
			return generateQVecotor(quanlity,nextQVecotor,gMatrix);
		}
	}
	
	public static void main(String[] args) {
		 int[][] linkMatrix=linkMatrix();
		 System.out.println("连接矩阵(横向)");
		 for(int i=0;i<linkMatrix.length;i++){
			 for(int j=0;j<linkMatrix[i].length;j++){
				 System.out.print(linkMatrix[i][j]+"   ");
			 }
			 System.out.println();
		 }
		 System.out.println("S矩阵(纵向)");
		 double[][]sMatrix=generateSMatrix(linkMatrix);
		 for(int i=0;i<sMatrix.length;i++){
			 for(int j=0;j<sMatrix[i].length;j++){
				 System.out.print(sMatrix[i][j]+"   ");
			 }
			 System.out.println();
		 }
		 System.out.println("G矩阵(纵向)");
		 double [][]gMatrix=generateGMatrix(0.8,sMatrix);
		 for(int i=0;i<gMatrix.length;i++){
			 for(int j=0;j<gMatrix[i].length;j++){
				 System.out.print(gMatrix[i][j]+"   ");
			 }
			 System.out.println();
		 }
		 
		 double quantity=0.00000001;
		 double[] qVecotor=new double[]{1,1,1,1,1};
		 double [] finallyQVecotor=generateQVecotor(quantity,qVecotor,gMatrix);
		 System.out.println("Q向量");
		 for(int i=0;i<finallyQVecotor.length;i++){
			 System.out.print(finallyQVecotor[i]+"  ");
		 }
	}
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值