最優二叉搜尋樹2

2021-07-05 20:21:07 字數 899 閱讀 2101

#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 所謂最優化子結構...