算法实践-最优搜索树-动态规划

发布一个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插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.dynamic;

import java.text.DecimalFormat;

public class OptimalSearchTree {
	private double [] p;//关键字概率
	private double [] q;//不在树中的关键字概率
	private int [] k;//关键字
	//private int [][]d;//不在树中的关键字
	private double[][]e;
	private double[][]w;
	private int[][]root;
	public OptimalSearchTree(int[]k,double [] p,double []q)throws Exception{
		if(k.length+1!=p.length){
			throw new Exception("数据错误");
		}
		if(k.length+1!=q.length){
			throw new Exception("数据错误");
		}
		double sum=0;
		for(int i=0;i<p.length;i++){
			sum+=p[i];
		}
		for(int j=0;j<q.length;j++){
			sum+=q[j];
		}
		DecimalFormat format=new DecimalFormat("0.00");
		if(Double.parseDouble(format.format(sum))!=1.0){
			throw new Exception("数据错误");
		}
		this.q=q;
		this.p=p;
		this.k=k;
		e=new double[p.length+1][p.length+1];
		w=new double[p.length+1][p.length+1];
		root=new int[p.length][p.length];
		for(int i=0;i<w.length;i++){
			for(int j=0;j<w[i].length;j++){
				w[i][j]=-1;
			}
		}
		for(int i=0;i<e.length;i++){
			for(int j=0;j<e[i].length;j++){
				e[i][j]=Integer.MAX_VALUE;
			}
		}
		
	}
	private double innerOptimal(int i,int j){
		if(e[i][j]!=Integer.MAX_VALUE){
			return e[i][j];
		}
		if(j==i-1){
			e[i][j]=q[i-1];
		}else{
			double tmp=Integer.MAX_VALUE;
			for(int r=i;r<=j;r++){
				tmp=innerOptimal(i,r-1)+innerOptimal(r+1,j)+computeW(i,j);
				if(tmp<e[i][j]){
					e[i][j]=tmp;
					root[i][j]=r;
				}
			}
		}
		return e[i][j];
	}
	private double computeW(int i,int j){
		if(w[i][j]>=0){
			return w[i][j];
		}else{
			double tmp=0;
			for(int l=i;l<=j;l++){
				tmp+=p[l];
			}
			for(int l=i-1;l<=j;l++){
				tmp+=q[l];
			}
			w[i][j]=tmp;
			return tmp;
		}
	}
	public void printTree(){
		innerPrintTree(1,k.length,-1);
	}
	private void innerPrintTree(int i,int j,int parent){
		if(i>j){
			return;
		}
		if(i==1&&j==k.length){
			System.out.println("    "+root[i][j]);
		}else{
			System.out.println(root[i][j]+","+parent);	
		}
		innerPrintTree(i,root[i][j]-1,root[i][j]);
		innerPrintTree(root[i][j]+1,j,root[i][j]);
	}
	public double optimal(){
		double ret=innerOptimal(1,k.length);
		return ret;
	}
	public static void main(String[] args) throws Exception{
		int [] k=new int[]{1,2,3,4,5};
		double [] p=new double[]{0,0.15,0.10,0.05,0.10,0.20};
		double [] q=new double[]{0.05,0.10,0.05,0.05,0.05,0.10};
		OptimalSearchTree ost=new OptimalSearchTree(k,p,q);
		System.out.println(ost.optimal());
		ost.printTree();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hxpjava1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值