假設關鍵字的總數為n,用c[i,j]表示第i個關鍵字到第j個關鍵字的最優二叉查詢樹的代價,我們的目標是求c[0,n-1]。要求c[i,j],首先要從第i個關鍵字到第j個關鍵字中選乙個出來作為根結點,選出根結點後,最優二叉搜尋樹的代價為左子樹的代價加上右子樹的代價,由於每選出乙個根結點,每個關鍵字的搜尋長度都增加1,因此得出遞推式,即當
i到j之間的二叉搜尋樹的根結點
10optimalbst(w,roots);
1112
for(int i=0;i)
16system.out.println();17}
1819 printroot(words, roots,0,w.length-1);
20/*
21最少平均比較次數為:2.18
220 1 1 1 1 1 1
230 1 1 1 1 1 4
240 0 2 2 4 4 6
250 0 0 3 4 4 6
260 0 0 0 4 4 6
270 0 0 0 0 5 6
280 0 0 0 0 0 6
29begin和while的根結點為 do
30begin和begin的根結點為 begin
31else和while的根結點為 while
32else和then的根結點為 if
33else和end的根結點為 else
34end和end的根結點為 end
35then和then的根結點為 then
36*/37}
3839
//roots中存放i到j之間的二叉搜尋樹的根結點
40public
static
void optimalbst(double w,int
roots)
4849
for(int s=2;s<=w.length;s++)
65 }//366
double sum=0;
67for(int t=i;t<=j;t++)
70 c[i][j]=min+sum;
71 }//
272 }//
173 system.out.println("最少平均比較次數為:"+c[0][w.length-1]);74}
7576
//列印最優根
77public
static
void printroot(string words,int roots,int i,int
j)84
}85 }
view code
第六次作業 二叉樹
這個作業屬於哪個課程 這個作業要求在 homework 11430 這個作業的目標 理解建樹過程 學號2018204299 一 實驗目的 1 掌握二叉樹的基本特性 2 掌握二叉樹的先序 中序 後序的遞迴遍歷演算法 3 理解二叉樹的先序 中序 後序的非遞迴遍歷演算法 4 通過求二叉樹的深度 葉子結點數...
第六次作業 二叉樹
這個作業屬於哪個課程 這個作業要求在 homework 11430 這個作業的目標 掌握二叉樹的基本特性,掌握二叉樹的先序 中序 後序的遞迴遍歷演算法,理解二叉樹的先序 中序 後序的非遞迴遍歷演算法,通過求二叉樹的深度 葉子結點數和層序遍歷等演算法,理解二叉樹的基本特性 學號 2018204195 ...
第六次作業 二叉樹
這個作業屬於哪個課程 這個作業要求在 這個作業的目標 掌握二叉樹的基本特性 二叉樹的先序 中序 後序的遞迴遍歷演算法 理解二叉樹的先序 中序 後序的非遞迴遍歷演算法。通過求二叉樹的深度 葉子結點數和層序遍歷等演算法,理解二叉樹的基本特性 學號2018204254 一 實驗目的 1 掌握二叉樹的基本特...