算法设计与分析复习总结(一)

第一章 算法概述

算法与程序

算法的四条性质

输入:0个或多个
输出:至少产生一个量进行输出
确定性:组成算法的每条指令是清晰的,无歧义的。
有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

程序的特点

程序是算法用某种程序设计语言的具体实现,可以不满足有限性,无限循环执行。

算法复杂度分析

算法的复杂性是算法运行需要的计算机资源的量。
在算法复杂性的表示法中:
Θ Θ Θ (big-theta):紧致界 / 紧确界。
O O O (大欧):上界。
o o o(小欧):非紧的上界。
Ω Ω Ω(大欧米伽):下界。
ω ω ω(小欧米伽):非紧的下界。
在这里插入图片描述

时间复杂度

在这里插入图片描述
注意:在一般输入数据的程序里,输入多多少少会影响到算法的计算复杂度,为消除这种影响可用拉斯维加斯算法对输入进行预处理。

关于拉斯维加斯算法

拉斯维加斯算法是一类随机化算法,它的显著特点是总是返回正确的结果,尽管它的运行时间可能是随机的。这类算法在不同的运行中可能花费不同的时间完成计算,但每次运行都保证了结果的正确性。要理解为什么拉斯维加斯算法找到的解一定是正确的,我们需要看其工作原理:

工作原理

拉斯维加斯算法利用随机性来提高效率,但它在验证结果正确性上有一个明确的机制。其基本步骤通常包括:

  1. 随机选择一个候选解或进行一次随机试验。
  2. 检查这个候选解是否满足问题的要求(即是否是正确解)。
  3. 如果解不正确,则重新选择或重新试验,直到找到正确解为止。
保证正确性的原因
  1. 结果验证:拉斯维加斯算法在每次生成候选解后都会进行验证。这一步是确定性的,不会出错。如果候选解不正确,算法会继续尝试其他候选解,直到找到正确解。这一特性保证了当算法终止时,返回的解一定是正确的。

  2. 正确性的前提:拉斯维加斯算法设计的一个关键前提是存在一种有效的方式来验证解的正确性。验证过程是准确的,不会有误判。

  3. 不确定的是时间,而非结果:拉斯维加斯算法的不确定性在于运行时间,因为它可能需要多次尝试才能找到正确解,但结果的正确性是有保障的。它不会在没有找到正确解之前终止。

例子:快速选择算法(Quickselect)

快速选择算法用于在无序数组中找到第k小的元素。它是拉斯维加斯算法的一种,利用快速排序的分区方法,但只处理一个子数组。尽管分区的位置是随机的,它总是能通过不断调整分区来最终找到正确的元素。

形式化证明

考虑一个问题和拉斯维加斯算法如下:

  • 对于给定的输入,算法通过随机选择某些候选解来处理。
  • 每次随机选择后,算法验证该候选解是否满足问题的要求。

如果我们设候选解集合为 S S S,正确解集合为 S ∗ S^* S(其中 S ∗ ⊆ S S^* \subseteq S SS),拉斯维加斯算法每次从 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问题并不是那种只有暴力搜索才能解决的问题。
NP完全问题

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 计算机算法设计与分析是计算机科学与技术专业的一门重要课程,该课程旨在培养学生解决复杂问题的能力,提高算法设计与分析的能力。复习该课程的期末考试,我建议可以从以下几个方面进行复习: 首先,复习算法的基本知识。包括递归与分治策略、动态规划、贪心算法、回溯算法等常见算法的基本原理和代码实现方法。 其次,深入理解常见的时间复杂度和空间复杂度分析方法,熟悉不同算法的优缺点,并能在不同问题场景下选择合适的算法。 然后,重点复习常见的排序算法和查找算法,如冒泡排序、插入排序、选择排序、快速排序、堆排序等,以及线性查找、二分查找等。 另外,复习算法,包括图的表示方法、图的遍历算法、最短路径算法(Dijkstra算法、Floyd-Warshall算法)和最小生成树算法(Prim算法、Kruskal算法)等。 最后,通过做一些实例题和习题,加深对算法的理解和应用能力,提高解题的效率。 在复习过程中,可以参考csdn等一些相关的学习资源,查找更多的学习资料和参考题目,加深对算法的认识。同时也可以结合自己的课堂笔记、教材和讲义,全面复习总结。 总之,计算机算法设计与分析期末考试的复习需要全面、系统地复习相关算法和数据结构的知识,并能够熟练应用到实际问题中。通过不断的实践和练习,提高解题的能力和效率。 ### 回答2: 计算机算法设计与分析期末考试复习题介绍了一些重要的算法和数据结构,学生们可以通过复习这些题目来准备考试。以下是一些常见的题型和解答思路: 1. 排序算法:考察对常见排序算法的理解和分析。如快速排序、归并排序、堆排序等。需要掌握它们的时间复杂度、原理和实现方式,以及它们在不同场景下的优劣势。 2. 搜索算法:考察对常见搜索算法的掌握程度。如深度优先搜索(DFS)、广度优先搜索(BFS)、二分查找等。需要了解它们的原理、如何实现以及最优应用场景。 3. 图算法:考察对图算法的熟悉程度。如最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法(如Prim算法、Kruskal算法)等。需要了解它们的原理、时间复杂度和应用场景。 4. 动态规划:考察对动态规划算法的理解和应用。需要掌握动态规划的基本概念、状态转移方程的建立和求解。重点理解背包问题、最长公共子序列等常见问题的动态规划解法。 5. 数据结构:考察对常见数据结构的掌握程度。如数组、链表、栈、队列、二叉树、图等。需要了解它们的基本操作、特性、应用场景以及在算法中的使用方法。 在复习期间,建议学生们重点关注基础概念的理解、算法原理的掌握以及常见题目的解题技巧。同时,通过做大量的练习题来提升自己的算法设计和分析能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏澄_Daniel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值