#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define max 100
//此函式返回一棵二叉樹的最小平均路長
//n為有序集個數
//a中存放在二叉樹中的葉節點找到x的概率(成功)
//b中存放在內節點上找到x的概率(失敗)
//s[i][j]存放最優子樹t(i,j)根節點的元素
//t(i,j)為有序集關於訪問概率的一棵最優二叉樹
//w[i][j]表示查詢落在區間(xi-1, xj+1)上的概率
//w[i][j] = a[i-1] + b[i] +…+ b[j] + a[j]
//m[i][j]為子樹最小平均路長,m[1][n]即為整棵二叉樹的最小平均路長
double obst(int n, double a, double b, int s[max], double w[max], double m[max])
for(r=0; r
}m[i][j] += w[i][j];}}
return m[1][n];
}int main()
; double b = ;
int n = 4;
printf("有序集的概率分布為:\n");
for(int i=0; i<4; i++)
double m[max][max], w[max][max];
int s[max][max];
double u = obst(n-1, a, b, s, w, m);
printf("二叉搜尋樹最小平均路長為: %.2f\n", u);
return 0;
}
最優二叉搜尋樹
問題描述 詳見演算法導論p212 p213 對於給定關鍵字序列,構造一顆最優的二叉查詢樹t,使得在t內的一次搜尋的期望代價最小 前提概念 最優子結構 設包含有序關鍵字 ki,kj 的最優二叉查詢樹以kr i r j 為根節點,則其左子樹 ki,kr 1 和右子樹 kr 1,kj 也同樣為最優二叉查詢...
動態規劃 最優二叉搜尋樹
動態規劃與分治方法類似,都是通過組合子問題來求解原問題。通常用來求解最優化問題,通常按如下4個步驟設計乙個動態規劃演算法 1.刻畫乙個最優解的結構特徵 2.遞迴的定義最優解的值 3.採用自底向上的方法計算最優解的值 4.利用計算出的資訊構造乙個最優解。二叉搜尋樹 optimal binary sea...
最優二叉搜尋樹動態規劃
最優二叉搜尋樹問題是對於有序集s及其訪問概率或權值 q0,p1,q1,p2,q2,p3,q3 在所有表示有序集s的二叉搜尋樹中找出一顆具有最小平均路長的二叉搜尋樹。解決方法 使用動態規劃方法自底向上逐步構造最優二叉搜尋樹。動態規劃的兩個重要要素是 1 最優子結構。2 重疊子問題。1 所謂最優化子結構...