动态规划--最优二叉查找树(转载小妞滴。。。)

原创 2012年03月21日 13:39:19

 

import java.util.Arrays;

public class BestTree {
	public int n;
	public double w[][];
	public double c[][];
	public  int r[][];

	public BestTree(int n)
	{
		 c=new double[n+2][n+1];
		 w=new double[n+2][n+1];r=new int[n+2][n+1];
	}
public void OptionBinarySearch(int n,double p[],double q[]){
  for(int i=1;i<=n;i++){
   c[i][i-1]=0;
   w[i][i-1]=q[i-1];
  }                                                                                                                                                                                                                                                                      public void OptionBinarySearch(int n,double p[],double q[]){
  for(int i=1;i<=n;i++){
   c[i][i-1]=0;
   w[i][i-1]=q[i-1];
  }  
for(int k=n;k>=1;k--){
   for(int i=1;i<=k;i++){
    int j=i-k+5;
    w[i][j]=w[i][j-1]+p[j]+q[j];
    //当i<=j时,c[i,j)=W(i,j)+min{c(i,k-1)+c(k+1,j)}
    c[i][j]=w[i][j]+c[i][i-1]+c[i+1][j];
    r[i][j]=i;
for(int m=i+1;m<=j;m++){
     double t=w[i][j]+c[i][m-1]+c[m+1][j];
     
     if((float)t<(float)c[i][j]){//通过比较,让c[i][j]的值最小
      c[i][j]=t;
      r[i][j]=m;
     }
    }
   }
  }
 }
public void BestSolution(int r[][],int i,int j){
  if(i<=j)
  {
  System.out.println("s"+i+"和s"+j+" 的根为:"+"s"+r[i][j]);
  BestSolution(r,i,r[i][j]-1);
  BestSolution(r,r[i][j]+1,j);
  }
 }
public static void main(String[] args){
  double p[]={0,0.15,0.1,0.05,0.1,0.2};
  double q[]={0.05,0.1,0.05,0.05,0.05,0.1};
  BestTree tree=new BestTree(5);
  tree.n=5;
  tree.OptionBinarySearch(5,p,q);
 
     for(int i=1;i<=5;i++){
      System.out.println(Arrays.toString(tree.r[i]));
     }
  tree.BestSolution(tree.r, 1, 5);
 }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

最优二分搜索树

构建最优二分搜索树 问题描述:        首先看个例子,如果有S = {5,7,10,12,14,15,18},我们可以构建一个二分搜索树,所谓二分搜索树(Binary Search Tree...

动态规划算法—最优二叉查找树

问题:给定一组单词w1,w2,...,wn和它们出现的固定概率p1,p2,...pn。问题是要以某种方法在一棵二叉查找树中安放这些单词使得总的期望访问时间最小。注意:二叉查找树中结点的值就是该单词出现...

动态规划_最优二分查找树

一、什么是最优二叉查找树 最优二叉查找树: 给定n个互异的关键字组成的序列K=,且关键字有序(k1 图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子。图二就是在这种情况下一棵最...

0020算法笔记——【动态规划】最优二叉搜索树问题

1、问题描速:        设 S={x1, x2, ···, xn} 是一个有序集合,且x1, x2, ···, xn表示有序集合的二叉搜索树利用二叉树的顶点存储有序集中的元素,而且具...

构造最优二叉查找树的动态规划算法

首先,我们定义集合中的元素的查找概率是已知的(例如,从历史查找的统计数据中得出),这就很自然的引出了一个最优二叉树的问题。 假设a1,a2,.....an是从小到大排列互不相等的键,p1,p2.......

动态规划4-最优二叉查找树

转自:http://blog.csdn.net/mengzhejin/article/details/37880641 前面说过动态规划最典型的就是解决最优化问题的(具有最优子结构的...
  • ltx06
  • ltx06
  • 2014-12-22 16:56
  • 341

动态规划 -- 最优二叉查找树

转自 :江南烟雨  一、什么是最优二叉查找树 最优二叉查找树: 给定n个互异的关键字组成的序列K=,且关键字有序(k1 图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子...

【算法学习】最优二叉查找树(动态规划)

一、什么是最优二叉查找树 最优二叉查找树: 给定n个互异的关键字组成的序列K=,且关键字有序(k1 图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子。图二就是在这种情况下一棵最...

最优二叉查找树的期望搜索代价(动态规划)C++实现

// 最优二叉查找树的期望搜索代价.cpp : Defines the entry point for the console application. // #include "stdafx...

数据结构之(动态规划)之最优二叉查找树

1、前言:   接着学习动态规划方法,最优二叉查找树问题。二叉查找树参考http://www.cnblogs.com/Anker/archive/2013/01/28/2880581.html。如果...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)