算法分析与设计复习总结
第一章 算法概述
算法与程序
算法的四条性质
输入:0个或多个
输出:至少产生一个量进行输出
确定性:组成算法的每条指令是清晰的,无歧义的。
有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。
程序的特点
程序是算法用某种程序设计语言的具体实现,可以不满足有限性,无限循环执行。
算法复杂度分析
算法的复杂性是算法运行需要的计算机资源的量。
在算法复杂性的表示法中:
Θ
Θ
Θ (big-theta):紧致界 / 紧确界。
O
O
O (大欧):上界。
o
o
o(小欧):非紧的上界。
Ω
Ω
Ω(大欧米伽):下界。
ω
ω
ω(小欧米伽):非紧的下界。
时间复杂度
注意:在一般输入数据的程序里,输入多多少少会影响到算法的计算复杂度,为消除这种影响可用拉斯维加斯算法对输入进行预处理。
关于拉斯维加斯算法
拉斯维加斯算法是一类随机化算法,它的显著特点是总是返回正确的结果,尽管它的运行时间可能是随机的。这类算法在不同的运行中可能花费不同的时间完成计算,但每次运行都保证了结果的正确性。要理解为什么拉斯维加斯算法找到的解一定是正确的,我们需要看其工作原理:
工作原理
拉斯维加斯算法利用随机性来提高效率,但它在验证结果正确性上有一个明确的机制。其基本步骤通常包括:
- 随机选择一个候选解或进行一次随机试验。
- 检查这个候选解是否满足问题的要求(即是否是正确解)。
- 如果解不正确,则重新选择或重新试验,直到找到正确解为止。
保证正确性的原因
-
结果验证:拉斯维加斯算法在每次生成候选解后都会进行验证。这一步是确定性的,不会出错。如果候选解不正确,算法会继续尝试其他候选解,直到找到正确解。这一特性保证了当算法终止时,返回的解一定是正确的。
-
正确性的前提:拉斯维加斯算法设计的一个关键前提是存在一种有效的方式来验证解的正确性。验证过程是准确的,不会有误判。
-
不确定的是时间,而非结果:拉斯维加斯算法的不确定性在于运行时间,因为它可能需要多次尝试才能找到正确解,但结果的正确性是有保障的。它不会在没有找到正确解之前终止。
例子:快速选择算法(Quickselect)
快速选择算法用于在无序数组中找到第k小的元素。它是拉斯维加斯算法的一种,利用快速排序的分区方法,但只处理一个子数组。尽管分区的位置是随机的,它总是能通过不断调整分区来最终找到正确的元素。
形式化证明
考虑一个问题和拉斯维加斯算法如下:
- 对于给定的输入,算法通过随机选择某些候选解来处理。
- 每次随机选择后,算法验证该候选解是否满足问题的要求。
如果我们设候选解集合为 S S S,正确解集合为 S ∗ S^* S∗(其中 S ∗ ⊆ S S^* \subseteq S S∗⊆S),拉斯维加斯算法每次从 S S S中随机选择一个解并验证是否属于 S ∗ S^* S∗。由于验证过程是确定性的,算法不会停止直到选到一个属于 S ∗ S^* S∗的解。
因此,可以总结为:
- 拉斯维加斯算法的输出结果总是正确的,因为它在找到正确解之前不会停止运行。
结论
拉斯维加斯算法通过随机化提高效率,同时依赖确定性的验证步骤来保证结果正确性。即使算法的运行时间可能是随机的,返回结果的正确性是有保证的。这种特性使得拉斯维加斯算法在需要高可靠性和正确性的计算任务中非常有用。
计算模型
建立计算模型的目的是为了使问题的计算复杂性分析有一个共同的客观尺度。
基本计算模型是用于研究和描述计算过程的抽象工具,它们在计算理论中扮演着重要角色。
这些模型被称为基本计算模型的原因如下:
抽象性:这些模型提供了一种简化且抽象的方式来描述计算过程,帮助研究者分析和理解计算的基本原理和极限。
通用性:这些模型能够描述各种计算问题和算法,并用于证明计算的可行性和复杂性。
理论基础:基本计算模型如图灵机、RAM等构成了计算理论的基础,是计算复杂性、可计算性和算法分析等领域的重要工具。
简化计算过程:通过抽象掉不必要的细节,这些模型使得研究者能够专注于计算的核心概念和过程,提高研究效率。
基本计算模型
RAM(Random Access Machine,随机存取机器):
这是一种理论计算模型,它将计算机看作一个拥有无限内存的机器,每个内存单元可以直接存取。RAM模型用于分析算法的时间复杂度和空间复杂度,是计算复杂性理论中的重要工具。
RASP(Random Access Stored Program,随机存取存储程序机器):
RASP模型是对RAM模型的扩展,它包含一个程序存储器,可以存储并执行程序指令。这种模型更加接近实际的计算机系统。
TM(Turing Machine,图灵机):
图灵机是由艾伦·图灵提出的一种抽象计算模型,它由无限长的纸带和一个读写头组成。图灵机是计算理论中的一个基本概念,用于定义计算的可计算性和研究计算的极限。图灵机模型是现代计算机理论的基础。
NP完全性理论
约化的概念
几类问题的韦恩关系图
P问题(Polynomial,多项式)
定义:可以在多项式时间复杂度内解决的问题
注意:P类问题是NP问题的子集
举例:n个数的排序问题,时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)
NP问题(Nondeterministic Polynomial,非确定性多项式)
定义:可以在多项式时间内验证一个解的问题,即给出一个答案,可以很快地(在多项式时间内)验证这个答案是对的还是错的,但不一定能在多项式时间内求出正确的解
举例:数独问题、判断一个图是否存在哈密顿(Hamilton)回路问题
NP难问题(NPH,NP-Hard)
定义:任意NP问题可以在多项式时间内约化成该问题,即为了解决NP问题A,先将问题A约化为另一个问题B,解决问题B的同时也解决了问题A,问题B就是一个NP难问题。
举例:求旅行商的最短回路问题
注意 :NP难问题不一定是NP问题,因为一个问题约化过后会更难,就不一定还可以在多项式时间复杂度内验证答案。
NP完全问题(NPC,NP-complete)
定义:所有既是NP问题,又是NP难问题的问题。
即一个NP问题,任意的NP问题可以约化到它。
举例:旅行商的在限制花费时是否可行问题
注意:NPC问题才是只能暴力搜索解决的问题,而NP问题并不是那种只有暴力搜索才能解决的问题。