0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx

上传人:b****6 文档编号:16021141 上传时间:2022-11-17 格式:DOCX 页数:18 大小:123.97KB
下载 相关 举报
0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx_第1页
第1页 / 共18页
0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx_第2页
第2页 / 共18页
0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx_第3页
第3页 / 共18页
0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx_第4页
第4页 / 共18页
0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx

《0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

0020算法笔记动态规划最优二叉搜索树问题Word文档下载推荐.docx

在一个表示S的二叉树T中,设存储元素Xi的结点深

度为Ci;

叶结点(xj,xj+0的结点深度为dj。

nn

厂孕(1+处剳同

注:

在检索过程中,每进行一次比较,就进入下面一层,对于成功的检索,比较的次数就是所在的层数加1。

对于不成功的检索,被检索的关键码属于那个外部结点代表的可能关键码集合,比较次数就等于此外部结点的层数。

对于图的内结点而言,第0层需要比较操作次数为1,第1层需要比较2次,第2层需要3次。

p表示在二叉搜索树T中作一次搜索所需的平均比较次数。

P又称

为二叉搜索树T的平均路长,在一般情况下,不同的二叉搜索树的平均

路长是不同的。

对于有序集S及其存取概率分布(ao,b1,a1,bn,an),

在所有表示有序集S的二叉搜索树中找出一棵具有最小平均路长的二叉搜索树。

设Pi是对ai检索的概率。

设qi是对满足ai<

X<

ai+1,0<

=i<

=n的标

识符X检索的概率,(假定a0=-—^且an+1=+^)。

对于有n个关键码的集合,其关键码有n!

种不同的排列,可构成的不同二叉搜索树有瓏+1"

棵。

(n个结点的不同二叉树,卡塔兰数)。

如何评价这些二叉搜索树,可以用树的搜索效率来衡量。

例如:

标识符集{1,

2,3}={do,if,stop}可能的二分检索树为:

(a)(b)

若P1=0.5,P2=0.1,P3=0.05,q0=0.15,q1=0.1,q2=0.05,q3=0.05

求每棵树的平均比较次数(成本)。

Pa(n)=1Xp1+2p2+3和3+1qo+2Xq1+3Xq2+q3)=1

Pa(n)=1.5O

0.5+2)0.1+30^05+1区05+2>

0.1+3«

0.05+0.05)=1.5

Pb(n)=1

Xp1+2

p3+3

祁2+1

q0+2>

q3+3«

q1+q2)=1

X

0.5+2)0.05+3

为+1

0<

15+2>

0.05+30.1+0.05)=1.6

Pc(n)=1

Xp2+2

(p1+

p3)+2

(q0+q1+q2

+q3)=10.1+2

(0.5+0.05)

+2(0.15+0.1+0.05+0.05)=1.9

Pd(n)=1

Xp3+2

莎1+3

q3+2>

q0

+3和1+q2)=1

0.05+2

区5+3

0.1+1

0^5+2

0.15+3

(0.1+0.05)=2.15

Pe(n)=1

p2+3

>

p1+1

q2

+3和0+q1)=1

K1+3

区5+1

0d5+3

(0.15+0.1)=2.85

因此,上例中的最小平均路长为

可以得出结论:

结点在二叉搜索树中的层次越深,需要比较的次数就越多,因此

要构造一棵最小二叉树,一般尽量把搜索概率较高的结点放在较高的层次。

2、最优子结构性质:

假设选择k为树根,则1,2,…,-1和ao,a1,…,on都将位于左

子树L上,其余结点(k+1,…,n和ak,ak+i,…,a)位于右子树R上。

设COST(L)和COST(R)分别是二分检索树T的左子树和右子树的成

若T

本。

则检索树T的成本是:

P(k)+COST(L)+COST(R)+

是最优的,则上式及COST(L)和COST(R)必定都取最小值。

证明:

二叉搜索树T的一棵含有顶点Xi,…,Xj和叶顶点(xi-1,

Xi),••,•(Xj,Xj+1)的子树可以看作是有序集{Xi,•,Xj}关于全集为{Xi-1,

Xj+1}的一棵二叉搜索树(T自身可以看作是有序集)。

根据S的存取分

布概率,在子树的顶点处被搜索到的概率是:

i<

kij{Xi,…,Xj}的存储概率分布为{ai-1,bi,…,

bj,aj},其中,ah,bk分别是下面的条件概率:

瓦=加/%i£

k<

j;

5^=鶴/\片・U幻'

Zo

设Tij是有序集{xi,…,Xj}关于存储概率分布为{ai-1,bi,…,baj}的一

棵最优二叉搜索树,其平均路长为pij,Tij的根顶点存储的元素Xm,其左

子树Tl和右子树Tr的平均路长分别为Pl和Pr。

由于Tl和Tr中顶点深度是它们在Tij中的深度减1,所以得到:

左子樹

(右子树、

{的搜索丿

叫Pij=n(P£

+1丿+⑷脱++1丿

=5+叫卄1刃+'

4心几

由于Ti是关于集合{Xi,•,Xm-1}的一棵二叉搜索树,故Pl>

=Pi,m-1。

若Pl>

Pi,m-1,贝y用Ti,m-1替换Tl可得到平均路长比Tij更小的二叉搜索树。

这与Tij是最优二叉搜索树矛盾。

故Ti是一棵最优二叉搜索树。

同理可证

Tr也是一棵最优二叉搜索树。

因此最优二叉搜索树问题具有最优子结构

性质。

3、递推关系:

根据最优二叉搜索树问题的最优子结构性质可建立计算pij的递归

式如下:

叫jPij=⑰+(殳;

专山41+叫i<

J

t)..1=01V/M打

初始时:

如75

记wi,jpi,j为m(i,j),则m(1,n)二wi,npi,n=pi,n为所求的最优值。

计算m(i,j)

的递归式为:

川(A7)=、耳了+mill斤一1)+ni{k+1,/)},i£

°

i<

j

川亿f-1)=ai=12

4、求解过程:

Ttn+1][n]

1)没有内部节点时,构造T[1][0],T[2][1],T[3][2]

2)构造只有1个内部结点的最优二叉搜索树T[1][1],T[2][2]

T[n][n],可以求得m[i][i]同时可以用一个数组存做根结点元素为:

 

T[n][n],

(起止下标的差)

T[1][1],T[2][2]

n-1T[1][n]

具体代码如下:

[cpp]viewplaincopy

//3d11-1最优二叉搜索树动态规划

#include"

stdafx.h"

#include<

iostream>

usingnamespacestd;

double**w);

9.

void

Traceback(intn,inti,intj,int

10.

11.

int

main()

12.

{

13.

double

a[]={0.15,0.1,0.05,0.05};

14.

b[]={0.00,0.5,0.1,0.05};

15.

16.

coutvv

"

有序集的概率分布为:

vvendl;

17.

for(int

i=0;

ivN+1;

i++)

18.

19.

a"

vvivv"

="

vva[i]vv"

b"

20.

}

21.

22.

**m=newdouble*[N+2];

23.

int**s

=newint*[N+2];

24.

**w=newdouble*[N+2];

25.

26.

ivN+2;

i++)

27.

28.

m[i]=

newdouble[N+2];

29.

s[i]=

newint[N+2];

30.

w[i]=

31.

32.

33.

OptimalBinarySearchTree(a,b,N,m,s,w);

34.

二叉搜索树最小平均路长为:

--

35.

构造的最优二叉树为:

36.

Traceback(N,1,N,s,0,'

O'

);

37.

38.

39.

40.

deletem[i];

41.

deletes[i];

42.

deletew[i];

43.

44.

delete

[]m;

45.

[]s;

46.

[]w;

47.

return

0;

voidOptimalBinarySearchTree(

8.

<

"

vvb[i]vvendl;

vvm[1][N]vvendl;

**s,intf,charch);

doublea[],doubleb[],intn,double**m,int**s,

50.voidOptimalBinarySearchTree(

doublea[],doubleb[],

double**w)

51.

52.

//初始化构造无内部节点的情况

53.

for(inti=0;

=n;

54.

55.

w[i+1][i]=a[i];

56.

m[i+1][i]=0;

57.

58.

59.

for(intr=0;

r<

n;

叶+)

//r代表起止下标的差

60.

61.

for(inti=1;

=n-r;

i++)//i为起始元素下标

62.

63.

intj=i+r;

//j

为终止元素下标

64.

65.

//构造T[i][j]

填写w[i][j],m[i][j],s[i][j]

66.

//首选i作为根,

其左子树为空,右子树为节点

67.

w[i][j]=w[i][j-1]+a[j]+b[j];

68.

m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1