【数据结构】绪论

一.数据

1.数据的定义:

关于事件之一组离散且客观的事实描述,是构成信息和知识的原始材料。

2.数据的组织:

数据并非杂乱无章的堆砌在一起,而是按照某种结构组织在一起的,比如线性的,层次的,或者网状的结构。

3.数据的可操作性:

对数据进行操作的方法就是“算法”

4.数据的存储结构:

  • 顺序结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中
  • 链式结构:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系
  • 索引结构
  • 散列结构

5.数据的构成单位:

数据元素:

  • 是数据中的一个“个体”
  • 是数据结构中讨论的基本单位 

数据项:

  • 是数据结构中讨论的最小单位
  • 数据元素通常是数据项的集合 

6.抽象数据类型(Abstract Data Type,即:ADT) 

是指一个数学模型以及定义在此数学模型上的一组操作。

数据对象,数据关系,基本操作        {D,R,O}

D:数据元素集

R:D上的关系集合

O:对D的基本操作集

7.算法设计的原则

1)正确性

2)可读性

3)健壮性

4)高效率与低存储量

 8.算法效率的衡量方法和准则

(1)与算法执行时间相关的因素

1)算法选用的策略

2)编写程序的语言

3)编译程序产生的机器代码的质量

4)计算机执行指令的速度

5)问题的规模

(2)算法效率的衡量方法和准则

1)事后统计法:

缺点:

必须执行程序

存在掩盖算法本质的其他因素 

2)事前分析估算法

一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示),或者说,它是问题规模的函数,记为f(n)。

假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可以记为:

T(n)=O(f(n))

称O(f(n))为算法的时间复杂度

9.估算算法的运行工作量f(n)

使用执行基本操作次数来度量

(1)时间复杂度的估算规则:

1)运行工作量f(n)的低阶部分不会影响比较结果

2)f(n)的高阶部分的常数项也可以省略掉

算法的时间复杂度也称为渐进时间复杂度

(2)定理:

如果存在正的常数C和自然数$N_0$,使得$N\geqslant N_0$时,有$f(N)\leqslant Cg(N)$,则称函数f(N)当N充分大时有上界,且g(N)是它的一个上界,记为$f(N)=O(g(N))$

(3)运算规则:

$O(f)+O(g)=O(max(f,g))$

$O(f)O(g)=O(fg)$

(3)算法的空间复杂度定义为:

$S(n)=O(g(n))$

算法的存储量包括:

1)输入数据所占的空间

2)程序本身所占的空间

3)辅助变量所占的空间

(4)常见的复杂度:

常数阶:$O(1)$

对数阶:$O(log_2{n})$

线性阶:$O(n)$

线性对数阶:$O(nlog_2{n})$

多项式阶:$O(n^2)$

指数阶:$O(2^n)$

二.计算机问题求解的五个步骤

1.问题的理解

2.数据结构设计

3.算法设计

4.算法分析

5.程序测试与实现

程序=数据结构+算法

软件=程序+文档

你可能感兴趣的:(数据结构)