算法导论【复习】

这篇博客是作者对《算法导论》的复习整理,涵盖了算法复杂度的O(), θ(), Ω()三个渐进边界,介绍了如何通过代入法、递归树法和主方法求解复杂度。此外,内容包括排序算法(如快速排序、堆排序等)、中位数和顺序统计量的计算,以及查找算法(如二分查找和哈希查找)。博客还涉及到了分治策略、动态规划和贪心算法,并讨论了树(如二叉搜索树、红黑树、AVL树)和图(如最小生成树、单源最短路径)的相关算法。" 88142136,8209328,安卓开发入门详解:Android Studio基础操作,"['Android开发', '入门指南', 'activity', 'intent']
摘要由CSDN通过智能技术生成

算法导论【复习】

教材:算法导论第三版

本博客内容均为自行整理,以供学过算法的同学快速回忆之用。

本人第一篇博客,当然要献给算法啦!博客是在复习的时候整理的,有点类似于记忆碎片,比较简略,欢迎大家在评论区讨论、补充、纠正。

算法导论期末复习大纲

【算法复杂度】:

假设所需计算机资源的量只和问题规模算法输入算法本身的函数相关。

时间复杂度:

用基本操作步数衡量,独立于机器。
在不同情况下算法复杂度也是不同的,常见的情况有最好情况下,平均情况下,最坏情况下的时间复杂度。

首先,是时间复杂度的三个概念O(), θ \theta θ(), ω \omega ω()。

【算法导论】P26,三张图有助于理解

- O O O() 渐进上界

{f(n):存在正常量c, n 0 n_0 n0,使得对所有n>= n 0 n_0 n0,有0<=f(n)<=cg(n)}

- θ \theta θ() 渐进紧确界

{f(n):存在正常量 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,使得对所有n>= n 0 n_0 n0,有0<= c 1 c_1 c1g(n)<=f(n)<= c 2 c_2 c2g(n)}

- Ω \Omega Ω() 渐进下界

{f(n):存在正常量c, n 0 n_0 n0,使得对所有n>= n 0 n_0 n0,有0<=cg(n)<=f(n)}

另外:

1. ο \omicron ο()代表非渐进紧确上界, ω \omega ω()代表非渐进紧确下界。o(g(n)) = {f(n): 对任意正常数c>0,使得对所有n>= n 0 n_0 n0,有0<=f(n)<cg(n)}

2. O ( ) O() O() Ω \Omega Ω()如果非常紧的话都会趋向于 θ \theta θ()。(有一种紧确界的证明方式就是这样的)

3. O ( ) O() O()往往差了些也是对的,但是不准确,比如用O( n 100 n^{100} n100)来描述快速排序的平均时间复杂度也是对的,但是不如O(nlogn)来得确切。所以比较紧的界才有意义,能求出 θ \theta θ()最好啦。(另外,用 o ( n l o g n ) o(nlogn) o(nlogn)来描述快速排序的平均情况就不行,因为 ο \omicron ο()代表非渐进紧确上界,看那个定义中是没有等号的,要注意大O和小o的区别)。

根据递归式求 O O O()和 Ω \Omega Ω()的三种方法:
  • 代入法P48:猜测复杂度式子,假设出来(可能需要带低阶的参数),代入递归式并证明。
  • 递归树法P50:把递归树画出来,然后累加(可能会用到级数相关知识)。那种分成两颗不均匀子树的情况常用这种方法求解。
  • 主方法P53:可以用递归树法推导,推导过程中会用到 n l o g b a = a l o g b n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值