数据结构学习笔记
绪论
算法的定义
解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的特性
- 有限性: 一个算法必须保证执行有限步之后结束.
- 确切性: 一个算法的每一步骤必须有确切的定义.
- 输入: 一个算法有零个或多个输入, 以刻画运算对象的初始情况, 所谓零个输入是指算法本身给定了初始条件.
- 输出: 一个算法有一个或多个输出. 没有输出的算法毫无意义.
- 可行性: 一个算法的任何计算步骤都是可以被分解为基本可执行的操作,每个操作都能够在有限时间内完成.
算法的设计要求
算法设计一般要求满足以下几点:
1. 正确性:算法的执行结果应当满足预先规定的功能和性能要求。即算法应当满足具体问题的需求,设计或选择的算法应当能够正确地反映这种需求,这是衡量算法正确与否的准则。
2. 可读性:一个算法应当思路清晰、层次分明、易读易懂。算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解,而晦涩难懂的算法易于隐藏较多的错误,最终难以调试和修改。
3. 健壮性:当输入不合法的数据时,应当作适当处理,不致于引起严重后果。例如当输入数据不在允许的范围时,算法应能适当地作出反应或处理,而不会产生莫名其妙的输出结果。
4. 高效性:有效地使用存储空间和有高效的时间效率。效率是指的执行时间,如果对于一个问题有多个算法可以解决,那么执行时间短的算法效率就高。存储量需求是指算法执行过程中所需的最大存储空间。一个理想的算法应该是数据所占用的存储空间较小而数据处理的速度较快。
时间复杂度计算规则
加法规则
\[T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))\]
乘法规则
\[T(n)=T_1(n)\times T_2(n)=O(f(n))\times O(g(n))=O(f(n)\times g(n))\]
常见的时间复杂度大小顺序
\[O(1)<O(\log n)<O(n)<O(n\log n)<O(n^2)<O(n^3)<\cdots <O(n^k)<O(2^n)<O(n!)<O(n^n)\]
线性表
顺序表的插入
1 |
|
循环单链表插入(尾指针表示, 带头节点)
1 |
|
循环单链表合并(尾指针表示, 带头节点)
1 |
|
栈的应用-括号匹配
1 |
|
栈的应用-进制转换
1 |
|