【算法设计与分析】如何分析一个算法

2023-05-16

说明:参考书目为《Computer Algorithms --- Introduction to Design and Analysis》(第三版)Sara Baase, Allen Van Gelder

部分内容参考自大工林晓惠老师的课程【算法设计与分析】讲解。林老师讲算法非常细致,让人很容易理解,推荐一波~

(如部分内容涉及侵权,请联系我删除,谢谢)

 

该系列文章关于算法主要包含两部分:算法设计(分治、动态规划、贪心、图算法...) + 算法分析(算法的时间和空间分析、问题本身的计算复杂性、算法的正确性证明、NP-complete问题:对策论、数学归纳法等)

如何分析一个算法?

之后的文章请见:

【算法设计与分析】4.2 插入排序

【算法设计与分析】(习题4.2-4.5) 冒泡排序

本篇文章目录

算法评价的准则

1. 正确性

2. 时间

3. 空间

4. 简单性、清晰性

5. 优化


算法评价的准则:

1. 正确性

证明对于每一个合法的输入,该算法都会在有限的时间内得到满足要求的输出。

包括证明与该算法有关的引理、定理、公式。(一般使用数学归纳法证明)

2. 时间

1)主要影响算法时间效率的因素:①算法本身选用的策略;②问题的规模

在做时间效率分析时,我们从算法中选择出“基本操作”,以该“基本操作”的重复执行次数作为算法的时间量度f(n)

比如:

问题基本操作
在数组中查找xx与数组元素进行比较
两个矩阵相乘两个数值相乘

 


 

 

2)一般要进行平均A(n)和最坏W(n)情况下的时间复杂度分析:

W(n)=max\left \{ f(I)\left | I\epsilon D_{n}\right \}

A(n)=\sum_{I}pr(I)f(I)    pr(I)指的是相应情况的概率

3)时间复杂度\Theta及其上界O、下界\Omega

①时间复杂度的上界O(g(n))=f(n) → 存在正数c和n_{0},使得对一切n\geq n_{0},有0\leq f(n)\leq cg(n)

②时间复杂度的下界\Omega (g(n))=f(n) → 存在正数c和n_{0},使得对一切n\geq n_{0},有0\leq cg(n)\leq f(n)

③时间复杂度\Theta (g(n))=f(n) → 存在正数c_{1}c_{2}n_{0},使得对一切n\geq n_{0},有0\leq c_{1}g(n)\leq f(n)\leq c_{2}g(n)

即,f(n)=O(g(n)), f(n)=\Omega (g(n)),\Theta (g)=O(g)\bigcap \Omega(g)

4)常见的时间复杂度函数

3. 空间

4. 简单性、清晰性

5. 优化

 如果问题的计算时间下界是\Omega(f(n)),则计算时间复杂度为O(f(n))的算法是最优算法。例如,基于“比较”操作完成的排序问题的计算时间下界为\Omega(nlogn),则时间复杂度为O(nlogn)的排序算法是最优算法。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法设计与分析】如何分析一个算法 的相关文章

随机推荐