`

【算法复习四】计算复杂性与算法分析---算法分析

 
阅读更多

一,生成函数与递推

递推关系举例

1Hanoi问题:这是个组合数学中的著名问题。N个圆盘依其半径大小,从下而上套在A柱上,如下图示。每次只允许取一个移到柱BC上,而且不允许大盘放在小盘上方。若要求把柱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 323换位3 1 2

2 1 3 13换位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问题及其关系,以及分治策略和动态规划等关键概念和技术。

    计算机-算法分析与设计复习资料.pdf

    计算机-算法分析与设计复习资料 本资源摘要信息是关于算法分析与设计的复习资料,涵盖了算法分析与设计的基本概念、方法和技术。该资源包括填空题、简答题、选择题等多种形式的题目,涵盖了算法分析与设计的各个...

    算法分析与设计 复习资料以及试卷

    《算法分析与设计》是计算机科学领域中的核心课程,它主要关注如何有效地解决问题,并通过数学模型和计算理论来评估和优化算法的效率。这门课程的复习资料和试卷是学习者深入理解算法、提高编程技能的关键工具。 1....

    算法分析与设计复习习题集

    算法分析与设计复习习题集 一、填空题: 1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。 2、多项式 的上界为O(nm)。 3、算法的基本特征:输入、输出、确定性、有限性。 4、...

    算法复习算法复习资料

    算法复习资料是学习和提升编程技能的重要资源,涵盖了数据结构、排序、搜索、图论等多个方面。本文将深入探讨这些关键知识点,帮助你巩固和提高对算法的理解。 首先,我们来谈谈数据结构。数据结构是组织和存储数据...

    广东工业大学--算法设计与分析基础--期末复习知识点.pdf

    本篇复习资料涵盖了广东工业大学课程“算法设计与分析基础”中的一些关键知识点,它们是期末考试的复习重点。 ### 第二章 算法效率分析基础 在算法效率分析中,我们通常使用大O表示法来描述算法的时间复杂度。例如...

    算法设计与分析总复习.ppt

    本复习涵盖了算法的基本概念、特性、评价标准以及常见算法的时间和空间复杂性。 1. 算法的五个特征: - 有穷性:算法必须在有限的步骤后停止,不会无限运行。 - 确定性:算法的每一步都有明确的定义,无歧义。 -...

    计算机算法设计与分析第2~4章算法复习题

    计算机算法设计与分析第2~4章算法复习题 本文将详细解释计算机算法设计与分析第2~4章的相关知识点,并对给定的文件内容进行详细分析。 分治算法 分治算法是一种常用的算法设计策略,它将问题分解为子问题,然后...

    算法分析与设计复习资料

    这份"算法分析与设计复习资料"包含了该领域的重要概念、方法和技术,旨在帮助学习者准备相关的考试或深入理解算法设计的基础知识。 一、算法基础 算法是一系列解决问题的明确指令,通常用于数据处理、计算或其他...

    组合最优化算法和复杂性

    接着,第十三和十四章转向整数规划,特别是Gorory的割平面算法,将整数规划与图论有效结合,展示了组合最优化与复杂性理论在实际问题中的应用。 书中的后半部分更多地涉及NP完全性理论。与传统依赖图灵机理论的阐述...

    算法分析和设计的复习资料

    本资源是算法分析和设计的复习资料,涵盖了算法的基本概念、时间和空间复杂性、动态规划、贪心算法、分支限界法等重要知识点。 算法的基本概念 算法是一系列明确定义的计算步骤,旨在解决特定的问题。算法具有四个...

    东南大学算法设计与分析复习题

    - 分析:分析算法的时间和空间复杂性。 - 测试:通过实验验证算法的实际性能。 2. **评价算法的标准**: - 正确性:算法是否能正确解决问题。 - 健壮性:算法对异常情况的处理能力。 - 简单性:算法实现的难度...

    2018-2019-2《算法设计与分析A》复习提纲 -总.docx

    总之,这个复习提纲覆盖了算法设计与分析的主要方面,从基础概念到高级技术,旨在全面提高学习者的算法分析和设计能力。深入理解和掌握这些知识点对于IT专业人士来说至关重要,无论是开发高效软件还是解决复杂问题,...

    算法分析期末复习资料 整理

    总结来说,算法分析期末复习资料覆盖了算法分析的各个方面,包括算法的基本概念、描述方法、非递归和递归算法的分析步骤、分治策略设计思想以及二分搜索算法和时间复杂度分析。掌握这些内容,不仅有助于期末考试取得...

    算法设计与分析期末复习.7z

    12. **复杂性理论**:了解P、NP、NPC等概念,理解计算复杂性的理论框架。 13. **实践应用**:结合实际问题,如网络路由、物流配送、资源调度等,运用所学算法设计解决方案。 通过深入学习以上知识点,并结合压缩包...

    同济大学 《算法分析与设计》课件

    《算法分析与设计》是计算机科学中的核心课程,主要探讨如何设计有效的算法以及如何分析算法的性能。同济大学的这门课件涵盖了算法的多个关键方面,包括基础概念、设计策略、复杂度分析和应用实例。以下是根据提供的...

Global site tag (gtag.js) - Google Analytics