数据结构
含义
简单来说,数据结构就是关系,描述数据元素之间存在的一种或多特定关系的集合。
分类
- 逻辑结构:指数据对象中数据元素之间的相互关系;
- 物理结构:指数据的逻辑结构在计算机中的存储形式。
四大逻辑结构
- 集合结构
- 线性结构
- 树形结构
- 图形结构
两大物理结构
- 顺序存储结构
把数据元素存在地址连续的存储单元里,数据间的逻辑关系和物理关系是一致的。
如,数组结构。
- 链式存储结构
把数据元素存在任意存储单元里,这组存储单元可以连续,也可以不连续。
这样的形式其存储关系并不能反映逻辑关系,所以需要一个指针存放数据元素的地址,这样通过地址就可以找到相关元素的位置。
算法
五个基本特征
- 输入:算法具有零个或多个输入。
- 输出:算法至少有一个或多个输出。
- 有穷性:算法的执行步骤有限,并且每个步骤要在可接受内的时间内完成。
- 确定性:每个步骤都有具体明确的含义,只有一条执行路径,相同的输入只能有唯一的输出结果。
- 可行性:算法的每一步都能够通过执行有限次数完成。
算法设计的要求
- 正确性:
- 算法程序没有语法错误。
- 算法程序对于合法输入能够产生满足要求的输出。
- 算法程序对于非法输入能够产生满足规格的说明。
- 算法程序对于故意刁难的测试输入都有满足要求的输出结果。
- 可读性:算法设计的目的之一就是便于阅读、理解和交流。
- 健壮性:当输入的数据不合理时,算法能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。
- 时间效率高和存储量低
算法效率
时间复杂度
用大O记法来体现时间复杂度。
常用的时间复杂度所耗费时间从小到大依次是:
O(1)<O(log(n))<O(n)<O(nlog(n))<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)O(1)<O(log(n))<O(n)<O(nlog(n))<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)O(1)<O(log(n))<O(n)<O(nlog(n))<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
平均情况与最坏情况
当查找一个有n个随机数字数组的某个数字,最好的情况是第一个数字就是,则时间复杂度为O(1),但也有可能这个数字在最后一个位置,则时间复杂度为O(n)。
- 平均运行时间是期望运行时间
- 最坏运行时间是一种保证。通常除非特别限定,一般提到的运行时间都是最坏情况的运行时间。
空间复杂度
在写代码时,完全可以用空间换取时间。