重庆大学计算复杂性及算法分析课程内容纲要

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六讲 (四学时)

主要参考书2-第2章-2.3.4.1-自由树

主要参考书2-第2章-2.3.4.5-通路长度

主要参考书3-第5章-5.2-5.2.2-通过交换进行排序-算法B(冒泡

排序)

知道大家学过图论.但是直接的把图论的内容放到算法分析上在图论课程中没有的,更不要说这里可以是一个延展.如果实际要用,还请认真阅读细节.

树的基本数学性质

图形:定义为顶点和以及连接不同顶点的边的集合.为了分析方便,才这样定义

连通图形(不计方向):也是为了分析方便,才这样定义

自由树(生成树):n个节点,n-1条边

在第五讲中采用过的方法非常简单和直观.但是有两个不足.一个是会

弄出不少非独立的变量.另一个是还漏掉了一些关系.这在电路原理的

内容中有过系统的介绍.不过现在不大记得了.要完整的独立方程必须

列出全部独立的节点和回路方程.然而这样的方法太费事.于是高老师

给我们了一个相对简单点的方法.

将自由树直接用于分析计算机算法,从而确定(不是减少)独立的未知量.并且给出一个系统的寻找它们的方法.

1.构造程序的框图

2.求出该框图的自由树(生成树)

3.用每一条属于该图形,但是不属于自由树的边ei构成一个回路Ci.

4,按照ei的方向写出回路Ci的代数表达(书中没有给出方程的形式,不

知为什么?)

5.这里形成的方程全部是独立的(注意,后面不独立的是程序中的变量,如A..S中的某些)

6.在给定的图形有n个框和m条边,见下面对定理K的注释1.于是一共有

m-(n-1)=m-n+1条不属于自由树的边.这些就是独立变量.其余的边可以通过这些独立变量的线性变换来表示.具体的表达方式有:

(1)用线性代数的方法来解(尽管有相当的计算量,但是求解过程规范)

(2)用节点方程来构造回路方程(麻烦而且混乱)

(3)用(1)的变形来完成(简洁).看看具体怎么做.因为e3出现在C0,C2,和C8中.所以描述e3这条边上遍历的次数E3=E0(C0中在e3上的贡

献)-E2(C2在e3上的贡献)+E8(C8在e3上的贡献).也即ej出现在哪个Ci 中,就把它带符号抄过来.

7.到此所有的边都有了基于独立变量的描述,于是就可以求A,B,...,S

这样一组与具体程序紧密相关的方程了.基于的原理是进入方框的诸E

之和 = 框中之值 = 离开方框的诸E之和.着就是克希霍夫定律.

8.把由程序所表示的A,B,...,S的含义代数化(如上一讲中的B+C=16X-1)并代入.得到执行时间的表示.

这里的做法比上一讲的方法规范.不必靠机灵找到需要的表示.由于这

里独立变量有9个,也就是有9条属于图形但是不属于自由树的边.所以A,B,...,S中有6个变量是非独立的.由于分析程序的时候写出的变量并没有考证独立性,这里给出了系统的办法.不过在具体应用之前还需要

进一步的理解和模仿.

应该把前面的例子用这里的方法再求解一遍,时间关系未能成行.

定理K注释

1. 一个图形有m条边,n个节点.构成自由树用了n-1条边,剩下的边都可以构成独立的回路.这样的边有m - (n - 1) = m - n + 1条.

附注:这样的例子.实际上前面的例子都满足这一点

2.定理K的作用是什么?不清楚

2.3.4.5 通路长度

在算法分析中,树形的"通路长度"概念很重要,因为这个量直接关系

到执行的时间.我们主要关心的是二叉树的情形,因为它与计算机表示

密切相关.

1.扩充的二叉树.

扩充的要么没有儿子,要么就有2个儿子.这样确实要方便的多.原来

的节点是圆的,n个,扩充的节点是方的,s个.注意二叉树是自由树的一种.所以一棵树的边数比圆节点的点数少1.每扩充一个节点多一条边.有多少方节点又有多少条边.故一共n-1+s条边.

2.通路长度(处理过程中要保证是扩充的二叉树,于是才能够比较容易的明白高老师所说)

(1)外部通路长度E

(2)内部通路长度I

(3)E = I + 2n 一个归纳的证明过程,添加一个内部节点,并且采用归纳法来证明.一个思路.每个内部节点连接2个外部节点.假设内部节点的通路长度是I,则外部节点的通路长度由两部分构成,一是内部通路长度本身,另一个是连接在每个内部节点的所有外部节点的边和.因为有n 个内部节点,所以有2n的边和.所以等式成立.另外可以想象把在拥有

n-1个内部节点的二叉树上的任意一个外节点改变成内部节点,再为该内部节点添加2个外部节点.把外节点改成内节点内部通路长度+1,本来的外节点变成内节点外部通路长度-1,但是又在新的内节点上添加了2个外节点,外部通路长度+4,实际上只多了3.于是有

En-1 = In-1 + 2(n-1)

= In-1 + 2n - 2

= In-1 + 2n - 3 + 1

En-1 + 3 = In-1 +1 + 2n

En = In + 2n

3.极小通路长度的n个节点的二叉树

如果算法的计算时间可以用树来描述的话,那么最优的树形是本节的树.它使得各种各样的计算时间最小.得到该结论有一个前提,那就是遍历个树支的概率是一样的.否则就需要带权的最小通路长度,如Huffman 编码.由于分析的对象一般都假设为等可能的分布,所以这里就没有再涉及带权通路长度.

这种二叉树拥有0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,...序列前n项的和的内部通路长度.单一树支的长度和内部通路长度是对计算效率的两种不同的评价依据.从完成一项任务不仅仅是完成一条树支的工作可以感到内部通路长度有更合理的应用依据.如尽管有些基于比较的排序的某一个局部的工作两可以用 lgn 来描述,但是我们仍旧用的是对该项任务的全体计算代价 nlgn.从这样的角度上来讲,这样的树对算法的分

相关文档
最新文档