数据结构——绪论

来源:互联网 发布:阿里云优惠口令 编辑:程序博客网 时间:2024/05/08 18:12

1.1 学习数据结构的意义和要求

意义:算法和数据结构是计算机科学的两大支柱。

计算机科学早期定义为:研究算法的科学。

计算机科学近期定义为:研究数据的科学。


数据结构是程序设计的基础。

程序 = 算法 + 数据结构。

数据结构是设计OS、DBMS、编译等系统程序和各种应用程序的重要基础。


要求:

1. 掌握各类基本数据结构类型和相应的存储结构。

2. 提高阅读和编写算法的能力。

3. 能针对给定问题,选择相适应的数据结构,并能设计和分析算法。


1.2 数据结构的主要内容

例1:
在计算机中有如下一串数据:
980803 3202670 610054 510102780618748。

整理之后:
980803 班号
3202670 电话号码
610054 邮政编码
510102780618748 其他信息编码

结论一:杂乱的数据不能表达和交流信息。

例2:
电话号码簿(a1 b1) (a2 b2) ...... (an bn)。
其中:ai为某人姓名,bi为该人的电话号码。
要求:设计一个算法,给定一个姓名时,能查出此人的电话号码。

算法一:如果姓名和电话号码的排列次序无规律,则只能逐一比较姓名进行查找。
算法二:如果姓名按字典顺序组织,则查找就快捷多了。

结论二:数据之间是有联系的。

例3:
某大学生管理机构:

学校 —— 系
系 —— 年级
年级 —— 班级
班级 —— 学生

例3中数据之间呈分层结构(树状结构)。

结论三:数据之间是有结构的。

例4:
图书目录管理
设每个书目含:书名、作者、登陆号、分类、出版年月
对图书目录常有如下操作:
查找:某书在书库中是否存在。
插入:购进新书时的录入。
删除:报废和丢失的书,需从目录中去掉。

结论四:在某种数据结构上可定义一组运算。

综上所述:
DS主要研究内容:
1. 数据的各种逻辑结构和物理结构,以及它们之间的相应关系。
2. 并对每种结构定义相适应的各种运算。
3. 设计出相应的算法。
4. 分析算法的效率。

1.3 基本术语

数据:所有能被计算机处理的符号的集合。

数据元素:是数据这个集合中的一个个体。
设给定数据集合为:D = {d1 d2 ... dn},则di属于D,并称di为数据元素。

数据项:数据元素常常还可分为若干个数据项,数据项是数据具有意义的最小单位。

数据对象:具有相同特性的数据元素的集合。
设数据集合D = {0 1 ... A B ... Z},则:数据对象正整数N = {0 1 ... },数据对象字母C = {A B ... Z}。
数据元素是数据的一个个体,数据对象是数据的一个子集。

数据结构:是带有结构的数据元素的集合。

所谓结构就是数据元素之间的关系,即描述数据之间的运算及运算规则。

用集合的形式描述,数据结构就是一个二元组:DS = (D R)。
其中:D是数据元素的集合,R是D上关系的集合。
简言之,数据元素和其相互关系称为数据结构。

逻辑结构:指数据元素之间的结构关系。
物理结构:指数据结构在计算机内的表示。

1.4 算法描述和算法分析

算法概念:算法是一个有限的指令集,遵循指令流可以完成特定的功能。

算法的基本特性:
1. 有穷性:算法经有限步后结束。
2. 确定性:下一步必须是明确的。
3. 可行性:每一步是可执行的。

算法与程序的区别:
算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。

程序是用某种程序设计语言对算法的具体实现。

主要区别在:有穷性、正确定和描述方法。
1. 程序可以是无穷的,例如OS,算法是有穷的。
2. 程序可以是错误的,算法必须是正确的。
3. 程序是用程序设计语言描述,在机器上可以执行。
4. 算法还可以用框图、自然语言等方式描述。

算法分析:
如何衡量一个正确算法的好坏?
衡量的三个尺度:
1. 运行所花费的时间(算法的时间特性)。
2. 所占用存储空间的大小(算法的空间特性)。
3. 其他(可读性、易调性、健壮性等)。

语句频度:语句可能重复执行的最大次数。

时间复杂度:设算法中所有语句的语句频度为t(n),f(n)是当n趋向无穷大时与t(n)为同阶无穷大,则算法的时间复杂度T(n)=O(f(n))。
其中:n为算法计算量或为规模,f(n)是运算时间随n增大时的增长率,O(f(n))是算法时间特性的量度。

例如:
程序段                    语句频度                    时间复杂度
x=x+1                      1                                 O(1) 常数阶

for(i=0;i<n;i++)      n+1                            O(n) 线性阶
   x=x+1

for(i=0;i<n;i++)      n+1
   for(j=0;j<n;j++)   n(n+1)                       O(n^2) 平方阶
       x=x+1

算法与时间复杂性的关系
设A1,A2和A3是求解同一问题的不同算法,其时间复杂度分别为:O(n) O(nlogn) O(n!)。
C1和C2为计算机,且C2的计算速度是C1的10倍。

复杂度          C1可解规模          C2可解规模          可解规模关系
O(n)              N11                        N21                       N21 = 10 N11
O(nlogn)      N12                        N22                       N22 = 10 N12
O(n!)             N13                        N23                       N23 = N13 + 小常数
0 0
原创粉丝点击