1. 数据结构的基本概念
数据结构两大用途:
- 用于存放要处理的数据,如迷宫地图。
- 用于实现算法策略,如迷宫例子中探索方向增量数组、回溯的栈、避免重复走的标志数组或特殊标记。
1 数据结构由一个四元组来表示:
Data_Structure = ( D, L ,S, O )
数据元素、数据元素之间的逻辑关系、逻辑关系在计算机中的存储表示、以及所规定的操作这四部分。
2 数据元素之间的逻辑结构:
3 存储结构
- 顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。如:数组
- 链式存储:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系。如:链表
4 数据结构的操作
数据元素的查找、插入、删除、遍历和排序。
2. 算法的基本概念
1 算法介绍
算法是满足下述性质的指令序列:
- 输入:有零个或多个外部量作为算法的输入。
- 输出:算法产生至少一个量作为输出。
- 确定性:组成算法的每条指令清晰、无歧义。
- 有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。
2 算法复杂性分析
算法复杂性:时间复杂性和空间复杂性
- N:算法规模。 I:输入
复杂性渐进分析: (只看高阶项)
- 可以采用复杂性渐进分析代替详细数学分析来比较算法效率。
渐进分析的符号:
- 我们用 f(n) = O(g(n)) 来表示 f(n) 是 O(g(n)) 的一个成员函数而不用传统的 T(n) O(f(n)) 来表示。
作图法比较时间复杂度:
- 多项式的时间复杂度紧渐于最高项的时间复杂度。
- 对数的时间复杂度都相同,与底数无关。
- 对数的时间复杂度永远小于次方的时间复杂度。
- 次方的时间复杂度永远小于指数的时间复杂度。
有时复杂度很难用O(n)表示,比如下面的代码:
i=1;
while(i<n)
i += i;
到底复杂度多少呢?这里其实是2部分:i=1的复杂度是1,while的复杂度需要计算,肯定大于1,根据我们前面总结的顺序执行流程复杂度规则,整个复杂度取大的,应该是while循环的复杂度。while循环复杂度我们不会计算,但我们会计算循环次数:i 的值变化是:1,2,4,8...2^k,最后一项i=2^(k-1)>=n退出循环,这时2^(k-1)>=n,k>=logn+1,所以循环k=logn+1次,则退出循环,所以时间复杂度就是O(logn)