《大话数据结构》读书笔记(一)——数据结构基础和算法

  1. 数据结构分类
    (1)按照逻辑结构的方式分为四种:集合结构、线性结构、树形结构、图形结构。
    (2)按照物理结构的方式分为两种:顺序存储结构、链式存储结构

  2. 算法的特性(5个):
    (1)输入、输出:可以没有输入,但是最少有一个输出。
    (2)有穷性:算法一定可以自动结束
    (3)确定性:在一定条件下,只有一条执行路径,不会产生二义问题。
    (4)可行性:每一步都能通过执行有限次完成,可以转换成程序运行,并得到正确的结果。

  3. 算法设计的要求(5个)
    (1)正确性:算法没有语法错误、对于合法数据能够产生满足要求的输出结果、对于非法数据能够得出满足规格的说明结果,这是一般做算法的要求。
    (2)可读性:他人也可以看懂
    (3)健壮性:当输入数据不合法的时候,可以做出相关处理,而不是产生异常或者其他不正常的结果。
    (4)时间效率高和存储量低:简单来说,就是花最少的时间、用最少的存储空间办成同样的事就是好算法。

  4. 算法效率的度量方法
    (1)事后统计方法:不实用,不再描述。
    (2)事前分析估算法(就是一直提到的时间复杂度):一个程序的运行时间依赖于两个方面:算法好坏和问题的输入规模(输入量多少)。测定运行时间最可靠的方法,就是计算对运行时间有消耗的基本操作的执行次数。

  5. 时间复杂度(O())
    分析算法复杂度,最重要的就是分析循环结构的运行情况,数列的相关运算是要补充的知识。
    推导算法:
    (1)用常数1取代运行时间中的所有加法常数。
    (2)在修改后的运行次数函数中,只保留最高项。
    (3)如果最高项存在且不是1,则去除与这个项相乘的常数。
    得到的结果就是O()

  6. 常见的时间复杂度
执行次数函数 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(n2) 平方阶
5log2n+20 O(logn) 对数阶
2n+ nlog2n+19 O(nlogn) nlogn阶
6n3+2n2+4 O(n3) 立方阶
2n O(2n) 指数阶

常用的时间复杂度所耗费的时间从小到大依次是:
O(1)< O(logn) < O(n)< O(nlogn)< O(n2) < O(n3) < O(2n) < O(n!)< O(nn)

你可能感兴趣的:(数据结构和算法分析)