01.数据结构:逻辑结构和物理结构。
其中逻辑结构是面向问题的,
而物理结构是面向计算机的,
它们的基本目标都是将数据及其逻辑关系存储到计算机内存中。
02.逻辑结构:是指数据对象中数据元素之间的相互关系。分为四种:集合结构、线性结构、树形结构和图形结构。
03.物理(存储)结构:是指数据的逻辑结构在计算机中的存储形式。数据的存储结构应正确反映数据元素之间的逻辑关系,这是关键。
数据元素的存储结构:1.顺序存储结构和2.链式存储结构。
1.顺序存储结构:把数据元素放在地址连续的存储单元中,数据间的逻辑关系和物理关系一致。如,数组。
2.链式存储结构:把数据元素放在任意的存储单元中,数据间使用指针关联。
数据元素的存储关系不能反映其逻辑关系。如,链表。
04.算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
05.算法的基本特性:
输入,算法具有零个或多个输入,
输出,至少有一个或多个输出。
有穷性,算法在执行有限步后能够自动结束,不会出现无限循环。
确定性,算法的每一步都具有确定的含义,不会出现二义性。
可行性,算法的每一步都能够通过执行有限次操作完成。
06.算法复杂度:时间复杂度和空间复杂度。
时间复杂度:执行算法所需要的计算工作量
空间复杂度:执行这个算法所需要的内存空间
07.时间复杂度:算法的时间复杂度反映了算法执行的时间长短,它是度量一个算法好坏的重要指标。
度量一个算法的时间复杂度通常采用“大O表示法”
08.时间复杂度的几条基本计算规则:
- 基本操作,即只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法进行计算
- 循环结构,时间复杂度按乘法进行计算
- 分支结构,时间复杂度取最大值
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
- 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
常见时间复杂度
执行次数函数举例 阶 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(2n) 平方阶
5log2n+20 O(logn) 对数阶
2n+3nlog2n+19 O(nlogn) nlogn阶
6n3+2n2+3n+4 O(n3) 立方阶
2n O(2n) 指数阶
常见的时间复杂度之间的关系
所消耗的时间从小到大
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
list内置类型的时间复杂度
Operation Big-OEfficiency
indexx[] O(1)
Index assignment O(1)
append O(1)
pop() O(1)
pop(i) O(n)
Insert(i,item) O(n)
del operator O(n)
iteration O(n)
contains(in) O(n)
get slice[x:y] O(k)
del slice O(n)
set slice O(n+k)
reverse O(n)
concatenate O(k)
sort O(n log n)
multiply O(nk)
dict 内置类型的时间复杂度
Operation Big-OEfficiency
copy O(n)
get item O(1)
set item O(1)
delete item O(1)
contains(in) O(1)
iteration O(n)