关于事件之一组离散且客观的事实描述,是构成信息和知识的原始材料。
数据并非杂乱无章的堆砌在一起,而是按照某种结构组织在一起的,比如线性的,层次的,或者网状的结构。
对数据进行操作的方法就是“算法”
- 顺序结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中
- 链式结构:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系
- 索引结构
- 散列结构
- 是数据中的一个“个体”
- 是数据结构中讨论的基本单位?
- 是数据结构中讨论的最小单位
- 数据元素通常是数据项的集合?
是指一个数学模型以及定义在此数学模型上的一组操作。
数据对象,数据关系,基本操作????????{D,R,O}
D:数据元素集
R:D上的关系集合
O:对D的基本操作集
1)正确性
2)可读性
3)健壮性
4)高效率与低存储量
1)算法选用的策略
2)编写程序的语言
3)编译程序产生的机器代码的质量
4)计算机执行指令的速度
5)问题的规模
缺点:
必须执行程序
存在掩盖算法本质的其他因素?
一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示),或者说,它是问题规模的函数,记为f(n)。
假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可以记为:
T(n)=O(f(n))
称O(f(n))为算法的时间复杂度
使用执行基本操作次数来度量
1)运行工作量f(n)的低阶部分不会影响比较结果
2)f(n)的高阶部分的常数项也可以省略掉
算法的时间复杂度也称为渐进时间复杂度
如果存在正的常数C和自然数,使得时,有,则称函数f(N)当N充分大时有上界,且g(N)是它的一个上界,记为
(3)运算规则:
算法的存储量包括:
1)输入数据所占的空间
2)程序本身所占的空间
3)辅助变量所占的空间
常数阶:
对数阶:
线性阶:
线性对数阶:
多项式阶:
指数阶:
1.问题的理解
2.数据结构设计
3.算法设计
4.算法分析
5.程序测试与实现
程序=数据结构+算法
软件=程序+文档