一,生成函数与递推
递推关系举例
【例1】Hanoi问题:这是个组合数学中的著名问题。N个圆盘依其半径大小,从下而上套在A柱上,如下图示。每次只允许取一个移到柱B或C上,而且不允许大盘放在小盘上方。若要求把柱A上的n个盘移到C柱上请设计一种方法来,并估计要移动几个盘次。现在只有A、B、C三根柱子可用。
|
| |
|
| |
A
B C
第一步把A中N-1个移动到B(借助C)
第二步把A中最下一个移动到C
第三步把B中移动到C(借助A)
算法复杂度:
h(n)表示n个盘子所需要转移次数。
h(n)=2h(n-1)+1
h(1)=1
递归算法:
【例2】排错问题.n个有序的元素应有个不同的排列,如若一个排列使得所有的元素都不在原来的位置上,则称这个排列为错排;有的叫重排。
以1,2,3,4四个数的错排为例,分析其结构,找出规律性的东西来。
1)1 2的错排是唯一的,即2 1。
2)1 2 3的错排有3 1 2,2 3 1。这二者可以看作是1
2错排,3分别与1,2换位而得的。
即
2 1 32与3换位3 1 2
2 1 3 1与3换位2 3 1
3)1,2,3,4的错排
4 3 2 1,4 1 2 3,4 3 1 2,
3 4 1 2,3 4 2 1,2 4 1 3,
2 1 4 3,3 1 4 2,2 3 4 1。
第一列是4分别与1,2,3互换位置,其余两个元素错排,由此生成的。
第二列是4分别与3,1,2(123的一个错排)的每一个数互换而得到的
分析:
设n个数1,2,…,n错排的数目为Dn,任取其中一数 i,数i分别与其他的n-1个数之一互换,其余n-2个数进行错排,共得 (n-1)Dn-2个错排。另一部分位数i以外的n-1个数进行错排,然后 i 与其中每个数互换得(n-1)Dn-1个错排。
Dn=(n-1)(Dn-1 + Dn-2) D1=0 D2=1
Dn - nDn-1=(-1) `n
二,递归算法的结构
递归结构定义
在进行递归算法的设计时,通常先写出问题的递归定义,递归定义由基本项和归纳项两部分组成。
•基本项,也就是递归出口。它描述了一个或几个递归过程的终止状态。所谓终止状态指的是不需要继续递归而直接求解的状态。
•归纳项,也称为递归过程。它描述了如何实现从当前状态到终止状态的变化。
• 基于递归的插入排序算法
三,组合算法分析
1)全排列算法
•模型对应
•序数法
•字典序法
•中介数法
•换位法
例题:1 2 3 4 5 6 7 8 9 字典序全排列,求8 3 9 6 4 7 5 2 1的下一个排列
分析:一个全排列可看做一个字符串,字符串可有前缀、后缀。所谓一个的下一个就是这一个与下一个之间没有其他的。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。
例如,839647521是1--9的排列。1—9的排列最前面的是123456789,最后面的是987654321,从右向左扫描若都是增的,就到了987654321,也就没有下一个了。否则找出第一次出现下降的位置。
解答: 1、搜索末端的最长递降序列。
2、记紧挨着该序列左边的数为 a。
3、在该序列中从右到左寻找首个大于 a 的数记为 b。
4、交换 a、b,反转原序列被 b 换入后的新序列。
(输出全排列)算法:
(输出下一个)算法:
2)中介数
在[1,n]的全排列中,nn-1…
321是最后一个排列,其中介数是(n-1,n-2,...,3,2,1)。而其序号为
1*1!+2*2!+……(n-1)!
计算给定排列的序号
8 3 9 6 4 7 5 2 1的序号即先于此排列的排列的个数。将先于此排列的排列按前缀分类。
将8!,7!,…,1!前面的系数抽出,放在一起得到7 2 6 4 2 3 2 1。
7 2 6 4 2 3 2 1是计算排列8 3
9 6 4 7 5 2 1的序号的中间环节,我们称之为中介数。
※这是一个很有用的概念。
【例12】由中介数推出排列的算法,例如由中介数7
2 6 4 2 3 2 1(8个数)推算出全排列:8 3 9 6 4 7 5 2 1
方法一: 推导
p1 p2 p3 p4 p5 p6 p7 p8 p9
8 2 1
8 3 2 1
8 3 4 2 1
8 3 9 4 2 1
…… …… ……
其他详细方法参见博文
http://blog.csdn.net/tianshuai11/article/details/7520370
分享到:
相关推荐
### 算法设计与分析复习...以上是对算法设计与分析复习资料中的核心知识点进行的总结,旨在帮助读者理解和掌握算法的基本概念、随机化算法、复杂性分析、P/NP问题及其关系,以及分治策略和动态规划等关键概念和技术。
计算机-算法分析与设计复习资料 本资源摘要信息是关于算法分析与设计的复习资料,涵盖了算法分析与设计的基本概念、方法和技术。该资源包括填空题、简答题、选择题等多种形式的题目,涵盖了算法分析与设计的各个...
《算法分析与设计》是计算机科学领域中的核心课程,它主要关注如何有效地解决问题,并通过数学模型和计算理论来评估和优化算法的效率。这门课程的复习资料和试卷是学习者深入理解算法、提高编程技能的关键工具。 1....
算法分析与设计复习习题集 一、填空题: 1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。 2、多项式 的上界为O(nm)。 3、算法的基本特征:输入、输出、确定性、有限性。 4、...
算法复习资料是学习和提升编程技能的重要资源,涵盖了数据结构、排序、搜索、图论等多个方面。本文将深入探讨这些关键知识点,帮助你巩固和提高对算法的理解。 首先,我们来谈谈数据结构。数据结构是组织和存储数据...
本篇复习资料涵盖了广东工业大学课程“算法设计与分析基础”中的一些关键知识点,它们是期末考试的复习重点。 ### 第二章 算法效率分析基础 在算法效率分析中,我们通常使用大O表示法来描述算法的时间复杂度。例如...
本复习涵盖了算法的基本概念、特性、评价标准以及常见算法的时间和空间复杂性。 1. 算法的五个特征: - 有穷性:算法必须在有限的步骤后停止,不会无限运行。 - 确定性:算法的每一步都有明确的定义,无歧义。 -...
计算机算法设计与分析第2~4章算法复习题 本文将详细解释计算机算法设计与分析第2~4章的相关知识点,并对给定的文件内容进行详细分析。 分治算法 分治算法是一种常用的算法设计策略,它将问题分解为子问题,然后...
这份"算法分析与设计复习资料"包含了该领域的重要概念、方法和技术,旨在帮助学习者准备相关的考试或深入理解算法设计的基础知识。 一、算法基础 算法是一系列解决问题的明确指令,通常用于数据处理、计算或其他...
接着,第十三和十四章转向整数规划,特别是Gorory的割平面算法,将整数规划与图论有效结合,展示了组合最优化与复杂性理论在实际问题中的应用。 书中的后半部分更多地涉及NP完全性理论。与传统依赖图灵机理论的阐述...
本资源是算法分析和设计的复习资料,涵盖了算法的基本概念、时间和空间复杂性、动态规划、贪心算法、分支限界法等重要知识点。 算法的基本概念 算法是一系列明确定义的计算步骤,旨在解决特定的问题。算法具有四个...
- 分析:分析算法的时间和空间复杂性。 - 测试:通过实验验证算法的实际性能。 2. **评价算法的标准**: - 正确性:算法是否能正确解决问题。 - 健壮性:算法对异常情况的处理能力。 - 简单性:算法实现的难度...
总之,这个复习提纲覆盖了算法设计与分析的主要方面,从基础概念到高级技术,旨在全面提高学习者的算法分析和设计能力。深入理解和掌握这些知识点对于IT专业人士来说至关重要,无论是开发高效软件还是解决复杂问题,...
总结来说,算法分析期末复习资料覆盖了算法分析的各个方面,包括算法的基本概念、描述方法、非递归和递归算法的分析步骤、分治策略设计思想以及二分搜索算法和时间复杂度分析。掌握这些内容,不仅有助于期末考试取得...
12. **复杂性理论**:了解P、NP、NPC等概念,理解计算复杂性的理论框架。 13. **实践应用**:结合实际问题,如网络路由、物流配送、资源调度等,运用所学算法设计解决方案。 通过深入学习以上知识点,并结合压缩包...
《算法分析与设计》是计算机科学中的核心课程,主要探讨如何设计有效的算法以及如何分析算法的性能。同济大学的这门课件涵盖了算法的多个关键方面,包括基础概念、设计策略、复杂度分析和应用实例。以下是根据提供的...