概念,知识汇总
一 算法的概念
解决一个计算问题的过程:
判断能计算否, 判断能行计算否, 算法设计与分析,用编程语言实现算法,在计算机系统上运行算法
计算 : 可由一个给定计算模型机械地执行的规则或计算步骤序列称为该计算模型的一个计算
算法: 是一个满足下列5个条件的计算:
- 终止性:有限步内必须停止(有穷性)
- 确定性:每步都是严格定义和确定的动作
- 能行性:每个动作都能被精确地机械执行
- 输 入:具有满足给定约束条件的输入
- 输 出:产生满足给定约束条件的结果.
问题: 一个问题是一个关系P ⊆ \subseteq ⊆ Input × \times ×Output.同时P也可以表示为以下形式
P == { < a , b > ∣ a ∈ I n p u t a n d b ∈ O u t p u t <a,b>| a \in Input \ and \ b \in Output <a,b>∣a∈Input and b∈Output},即P表示为一个二元组集合
问题实例: 问题P 的一个实例是P 的一个二元组. 二元组(<9,6,7,3>,< 3,6,7,9>)是 SORT 问题的一个实例
问题和问题的实例的区别:
1.问题是一个二元组集合,问题实例是一个二元组
2.一个算法求解一个 完整的问题 ,而不是仅求解一个问题的一个或几个实例 .
P类问题:能在多项式时间内可解的问题。(等价于: 确定性计算机”能够在“多项式时间”解决的所有问题.)
NP类问题:在多项式时间内“可验证”的问题。(等价于: 非确定性计算机”能够在“多项式时间”解决的所有问题.)
也就是说,不能判定这个问题到底有没有解,而是猜出一个解来在多项式时间内证明这个解是否正确。即该问题的猜测过程是不确定的,而对其某一个解的验证则能够在多项式时间内完成。P类问题属于NP问题,但NP类问题不一定属于P类问题。
NPC问题:1.存在这样一个NP问题 2.所有的NP问题都可以约化成它。
换句话说,只要解决了这个问题,那么所有的NP问题都解决了。
NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。
NP -Hard问题:所有的NP问题都可以约化成的问题.
就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP
Non-NP问题:在多项式时间内无法验证的问题.(等价于: 非确定计算机不能再多项式时间内求解的问题)
“NP难题”: 若一个问题在多项式时间内可验证, 那么它在多项式时间内是否一定可解?
即证明或推翻P=NP
算法分析
- 算法的正确性分析
- 算法的复杂性分析
算法分析的目的:
算法分析分为算法正确性分析和复杂性分析
算法正确性分析确保算法对符合要求的输入在有限时间内能产生正确的结果
算法的复杂性分析,分析算法对不同输入所需资源量,为求解一个问题选择最佳算法、最佳设备
算法正确性: 一个算法是正确的,如果它对于每一个输入都最终停止,而且产生正确的输出.
不正确的算法: 1.存在输入使其不停止 2.存在输入使其得出错误结果
程序调试只能证明算法错误,不能证明算法正确
如何证明算法的正确性:
普通算法的正确性证明:1.对所有输入都停止 2.对所有输入都产生正确的结果
近似/随机算法的正确性证明: 1.对所有输入都停止 2.对所有输入都产生近似正确/极少数不正确解
算法的复杂度分析
分析时间复杂度
分析空间复杂度
时间复杂度: 时间复杂度描述的是一个函数,该函数描述算法的运行时间随着问题规模的增长的变化情况
空间复杂度: 空间复杂度描述的是一个函数,该函数描述算法占用内存空间随问题规模增长的变化情况
实例的时间复杂度: 算法对特定输入产生结果所需要的的原子操作数
实例的空间复杂度: 算法对特定输入产生结果所需要的储存空间大小
问题的复杂性可研究那些方面?
•固有复杂性
•复杂性上 、 下界
•平均复杂性
•复杂性问题的分类 P=NP?
•公理复杂性理论:抽象复杂性研究
优化问题: 求解代价最小的可行解的问题
一个问题的最优解不一定是唯一的
举例:最短路径,旅行商、任务调度等问题
因此我们也可以说:优化问题就是给定一个代价函数,在问题的解空间中搜索具有最小或最大代价的优化解
问题的下界: 用于解决该问题的任意算法所需要的最小时间复杂度
问题的下界是不唯一的, 通常指:最坏情况下界
问题的下界的意义
计算出问题的复杂度下界可以告诉我们当前算法是否最优,是否还可以优化
排序的复杂度下界: Ω(n)
通过比较的排序的复杂度下界: Ω(nlogn)
循环不变量:数据或数据结构的关键性质
循环不变量的证明:
证明分三个阶段
(1)初始 阶段 :循环开始前循环不变量成立
(2)循环 阶段 :循环体每执行一次 循环不变量成立
(3)终止 阶段 :算法结束后,循环不变量保证算法正确
应用: 证明最长公共子序列, 凸壳 的正确性
二 算法的数学基础
计算函数的阶:
- 算法执行时间随问题规模增长而增长的阶(增长率).
- 执行时间函数的主导项
同阶: 设f(n)和g(n)是正值函数。如果
∃ c 1 , c 2 > 0 , n 0 , ∀ n > n 0 , c 1 g ( n ) ≤ f ( n ) ≤ c 2 g (