数据结构和算法

147 阅读2分钟

0. 叙述

0.1 什么是数据结构?

程序设计 = 数据结构 + 算法

0.2 数据分为逻辑结构和物理结构

逻辑结构:数据对象中数据元素之间的相互关系
物理结构:数据的逻辑结构在计算机中存储形式

0.3 集合结构

集合结构中的数据元素除了同属于一个集合外,它们之间没有其它关系

0.4 线性结构

线性结构中的数据元素之间是一对一的关系

0.5 树形结构

树形结构中的数据元素之间存在一种一对多的层次关系

0.6 图像结构

数据元素多对多关系

0.7 数据元素存储方式

顺序存储:数据元素存放在地址连续的存储单元里(数组)
链式存储:数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的(医院排号系统)

0.8 什么是算法?

解决特定问题求解步骤的描述

0.9 算法5个特征

输入:零个或多个输入
输出:至少有一个或多个输出
有穷性:算法执行有限步骤,不会死循环
确定性:每一个步骤都是确定的,不会有二义性;相同的输入只能有唯一的输出结果
可行性:算法每一步都能通过执行有限次数完成

0.10 算法的设计要求

正确性:
	- 程序没有语法错误;
    - 合法的输入能够产生满足要求的输出
    - 非法输入能够产生满足规格的说明
    - 对故意刁难的测试都有满足要求的输出结果
可读性:
	- 代码是写给人看的,顺带在机器上运行
健壮性:
	- 对于不合法的输入,处理相关的异常
时间效率高、存储量低:

1. 时间复杂度和空间复杂度

1.1 高级语言编写的程序在计算机上运行所耗的时间取决于

- 算法采用的策略和方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度

1.2 例1

- 第一种算法执行了 1+(n+1)+n=2n+2 次
- 第二种算法 1+1=2 次
- 如果将循环看做一个整体,忽略头尾的开销,两个算法的差距是 n 和 1 的差距

1.3 例2

执行次数 100^2 次

1.4 算法效率度量方法

1.5 例3

解析:(函数渐近增长)

1.6 例4

1.7 例5

1.8 总结

1.9 解释1.4

1.10 推导大O阶方法

1.11 常数阶

O(1)

1.12 线性阶

1.13 平方阶

1.14 平方阶 例6

1.15 对数阶 例7

int i = 1, n = 100;
while (i < n) {
    i = i * 2;
}