序章
以下系列内容,是基于清华大学邓俊辉教授所授课程数据结构的笔记,本人结合PPT与自身感悟制成,算是学习后的填坑,仅当作学习笔记使用,欢迎借鉴学习和提出相关建议,转载需标明出处www.jjyaoao.space
1.序章
时间复杂度
- 最坏情况:以大O记号形式表示的时间复杂度,给出了一个算法的最坏情况,即–对于规模为n的任意输入,算法的运行时间都不会超过O(f(n))
- 最好情况 :大 Ω记号–>如果存在正的常数c和函数g(n),对任意n>>2,有T(n) > c * g(n),即认为:在n足够 大后,g(n)给出了T(n)的一个下界,记为:
T(n) =Ω (g(n))
- 大 Θ记号–>存在正的常数c1和c2,以及函数h(n),对任意n>>2,有 c1*h(n) < T(n) < c2 * h(n),即认为:在n足够大后,h(n)给出了T(n)的一个确界,记为:
T(n) =Θ (g(n))
级数
循环VS级数
越外层循环,复杂度越高!
冒泡排序
1 | void bubblesort(int A[], int n) { |
封底估算
迭代与递归
引入迭代
计算任意n个整数之和不同思路
普通方式
递归跟踪
递推方程
数组倒置
分而治之
二分递归
处理递推式(大师定理)
一些递推式
动态规划
兔子数列解决方案
低效递归
高效迭代
最长公共子序列
局限
循环移位
底层数学方法
看起来速度快其实不然,计算机缓存自动保存一个数据及其附近一段
倒置版顶级方法
前交换,后交换,最后总体交换,实现总体倒置效果
1 |
|
1 |
|
reverse.cpp 具体实现过程
1 | void shift2(int* A, int n, int k) {//O(3n) |
平均-平摊分析
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 jjyaoao's Home!
评论
LivereValine