标签(空格分隔): 数据结构 算法 学习笔记
调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。
数据结构
逻辑结构(数据对象中数据元素之间的相互关系)
1. 集合结构——数组元素除同一集合外无其他关系 2. 线性结构——一对一关系 3. 树形结构——一对多关系 4. 图形结构——多对多关系
物理结构/存储结构(针对内存而言,数据的逻辑结构在计算机中的存储形式)
1. 顺序存储结构 2. 链式存储结构
算法的设计要求
1. 正确性
2. 可读性
3. 健壮性(*当输入数据不合法时,算法也能做出相关处理*)
4. 时间效率高,存储量低
大O记法 O( )——算法的时间复杂度的体现
推导大O阶的方法:
1. 用常数1取代运行时间中的所有加法常数(单纯的分支结构,其时间复杂度也是O(1));
2. 在修改后的运行次数函数中,只保留最高阶项;
3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数。
常见的时间复杂度
执行次数函数 | 阶 | 非正式术语 |
---|---|---|
12 | O(1) | 常数阶 |
2n+3 | O(n) | 线性阶 |
3n2+2n+1 | O(n2) | 平方阶 |
5log2n+20 | O(logn) | 对数阶 |
2n+3nlog2n+19 | O(nlogn) | nlogn 阶 |
6n3+2n3+3n+4 | O(n3) | 立方阶 |
2n | O(n) | 指数阶 |
常用的时间复杂度所耗费的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
(O(n^3)以上的时间复杂度均不现实)
算法的空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现
算法空间复杂度公式:
S(n)=O(f(n))
终于大致通读了《大话数据结构》啦。现将学习笔记整理一下,整理完毕后将对着《数据结构与算法分析》一书精读,后续会再次更新笔记。笔记只是单独的知识点,方便对着日后对着知识点回忆复习。有任何错误欢迎各位大佬指正啦~第一次尝试用MarkDown编辑~