《算法设计与分析基础》复习笔记

date: 2021-12-28

期末复习系列

《The Design and Analysis of Algorithms》Anany Levitin 著 潘彦 译


第一章 绪论

1.1 算法

算法:一系列解决问题的明确指令 【对于符合一定规范的输入,能够在有限时间内获得要求的输出】

要点:

  1. 算法的每一步都不能有 歧义
  2. 必须认真确定算法所处理的 输入的值域
  3. 同一算法可以用几种不同的形式来描述
  4. 同一问题可能存在几种不同的算法
  5. 同一问题的不同解法,解题速度可能也显著不同

举例:
最大公约数算法:

  1. 欧几里得算法
    gcd(m,n)=gcd(n,m mod n),因为 gcd(m,0)=m 所以m最后的取值即是 m和n初值的最大公约数。
  2. 连续整数检测算法
    [不能处理其中一个input是0的情况]
  3. 中学算法
    [注意:该方法用 埃式筛法来处理质数序列的话,是无法处理一个及以上input是1的情况的(1不是质数) ]

在这里插入图片描述
在这里插入图片描述
参照之前整理的 质数相关Blog

1.2 算法问题求解基础

算法是问题的程序化 解决方案(获得答案的精确指令)
在这里插入图片描述

理解问题

算法的输入 确定了该算法所解问题的一个实例(instance)

严格确定算法需要处理的实例范围是非常重要的 [例如上面的三种最大公约数算法,它们能够处理的实例范围是不同的]

正确的算法要能够正确处理 所有合法的输入 [特例、边界值]

了解计算设备的性能

计算机主流:冯诺依曼体系结构 (其根本:随机存取机RAM)

它的主要假设是:指令逐条运行,每次执行一步操作。 => 设计在这种机器上运行的算法称为 顺序算法

=> 一些更新式计算机打破了RAM模型的假设,能够在同一时间执行多条操作 并行计算 ,能够利用这种计算能力的算法称为 并行算法

对于某些 需要处理海量数据的 非常复杂的问题 /处理 对时间很敏感 的应用,需要考虑计算机系统的速度和存储限制。[一般作为科学实验 可以不用]

精确解法和近似解法之间的权衡

精确算法:

近似算法:某些重要问题无法求得精确解(eg.求平方根/解非线性方程/求定积分);问题所具有的固有复杂性,导致计算很慢(eg.某问题涉及数量庞大的选择)。

一个近似算法可以作为更复杂精确算法的一部分

算法的正确性证明

算法的描述:文字 / 伪代码

算法的正确性证明:必须证明对于每一合法输入,该算法都会在有限的时间内输出一个需要的结果。

证明正确性的一般方法是使用 数学归纳法 ,因为算法的迭代过程本就符合这种证明所需要的一系列步骤。

对于近似算法的正确性证明,我们通常试图证明该算法所产生的 误差不超出预定义的范围 。

算法的分析

算法需要具备的几个重要特性:正确性、效率(时间效率、空间效率)、简单性、一般性。

时间效率:算法运行有多快 空间效率:算法需要多少 额外(除了存储算法本身,另外需要的空间) 的存储空间

一般性:1.算法所解决问题的一般性 2. 算法所接受的输入的一般性

1.3 重要问题类型

排序算法

两个特性:

  1. 稳定性
    如果一个排序算法保留了等值元素在输入中的 相对顺序 ,就是 稳定的。
  2. 在位性
    如果一个算法 不需要 额外的存储空间(除了个别存储单元外),就是在位的。
查找

对于查找而言,也没有一种算法在任何情况下都是最优的。有些算法速度快,但是需要更多的存储空间;有些算法速度非常快,但仅适用于有序数组。

图问题

基本的图算法包括:图的遍历算法、最短路算法、有向图的拓扑排序。

两个经典问题:旅行商问题(找出访问n个城市的最短路径,并保证每个城市只访问一次)、图着色问题(用最少种类的颜色为图中的顶点填色,并保证邻接顶点的颜色不同)

几何问题

两个经典问题:最近点对问题(求给定平面上的n个点中 距离最近 的两个点)、凸包问题(找一个能把给定集合中所有点都包含在里面的最小凸多边形)。

数值问题

对于大多数 例如解方程组、求定积分、求函数值等 涉及连续性的数学问题,我们都只能求近似解。

困难:这类问题一般都要操作实数,而实数在计算机内部只能近似表示。且对近似数的大量算数操作可能会将大量 舍入误差 叠加起来,导致非常糟糕的结果。

1.4 基本数据结构

在这里插入图片描述
在这里插入图片描述

第二章 算法效率分析基础

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值