最优二叉查找树的期望搜索代价(动态规划)C++实现
来源:互联网 发布:魔蝎数据怎么看 编辑:程序博客网 时间:2024/06/06 05:05
// 最优二叉查找树的期望搜索代价.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<cmath>
#include<limits>
#define N 100
using namespace std;
const double MAX = numeric_limits<double>::max(); //double的最大值
int _tmain(int argc, _TCHAR* argv[])
{
//p[j]存储第j关键字的概率(j=1...n)
double p[N];
//存储第j虚拟键的概率(j=0...n)
double q[N];
//存储包含关键字ki....kj的最优子树的搜索代价
double c[N][N];
//存储包含关键字ki....kj和虚拟键的最优子树的概率和
double w[N][N];
//存储存储包含关键字ki....kj的最优子树的根
int root[N][N];
int cases;
cout<<"请输入案例的个数:"<<endl;
cin>>cases;
while(cases--)
{
int n;
double sum = 0;
int i,j,l;
cout<<"请输入关键字的个数:"<<endl;
cin>>n;
cout<<"请输入每个关键字的概率:"<<endl;
for(i=1;i<=n;i++)
{
cin>>p[i];
sum += p[i];
}
cout<<"请输入每个虚拟键的概率:"<<endl;
for(i=0;i<=n;i++)
{
cin>>q[i];
sum += q[i];
}
//
if(abs(sum-1)>0.01)
{
cout<<"输入的概率和不为1,请重新输入"<<endl;
cases++;
continue;
}
for(i=1;i<=n+1;i++)
{
c[i][i-1] = q[i-1];
w[i][i-1] = q[i-1];
}
for(l=1;l<=n;l++)
{
for(i=1;i<=n-l+1;i++)
{
j = l+i-1;
c[i][j] = MAX;
w[i][j] = w[i][j-1] + p[j] +q[j];
int r;
for(r=i;r<=j;r++)
{
double k = c[i][r-1] + w[i][j] + c[r+1][j];
if(k<c[i][j])
{
c[i][j] = k;
root[i][j] = k;
}
}
}
}
cout<<"最优二叉查找树的期望搜索代价为:"<<c[1][n]<<endl;
}
system("pause");
return 0;
}
---------------------------------------------测试程序----------------------------------------------
请输入案例的个数:
1
请输入关键字的个数:
5
请输入每个关键字的概率:
0.15 0.10 0.05 0.10 0.20
请输入每个虚拟键的概率:
0.05 0.10 0.05 0.05 0.05 0.10
最优二叉查找树的期望搜索代价为:2.75
请按任意键继续. . .
- 最优二叉查找树的期望搜索代价(动态规划)C++实现
- 最优二叉查找树的期望搜索代价(动态规划)C++实现
- 最优二叉树的搜索期望代价
- 二叉搜索树 -【动态规划】最优C++实现
- 算法java实现--动态规划--最优二叉树搜索
- 动态规划--最优二叉查找树
- 最优二叉查找树(动态规划)
- 动态规划之-最优二叉查找树
- 动态规划 -- 最优二叉查找树
- 动态规划4-最优二叉查找树
- 动态规划4-最优二叉查找树
- 最优二叉查找树(动态规划)
- 动态规划-最优二叉查找树
- 动态规划--4.最优二叉查找树
- 动态规划-最优二叉搜索树
- 动态规划--最优二叉搜索树
- 动态规划之最优二叉搜索树
- 最优二叉搜索树-动态规划
- 矩阵链乘法问题(给A1A2A3...An加括号,使之乘法次数最小)动态规划问题C++实现
- ACM最长公共子序列问题(动态规划)C++实现
- ACM 重构二叉树 C++实现
- ACM最长单调递增子序列问题(动态规划)o(n*n)C++实现
- 最长递增子序列优化算法(时间复杂度为nlgn)C++实现
- 最优二叉查找树的期望搜索代价(动态规划)C++实现
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 区间图着色问题(贪心算法)C++实现
- ACM小明的数学题Ⅲ
- ACM第K个数 C++实现
- 希尔排序C++实现
- pthread_cond_timedwait 实例
- 归并排序 C++实现
- Linux 计时器 函数