目录
1.计算机解决具体问题的步骤:
系统功能分析 --> 建立数学模型 --> 设计算法 --> 编写程序 --> 调试与测试
建立数学模型的实质为:分析问题,从问题中提取操作的对象,并找出这些对象间的关系,然后用数学语言加以描述。
2.数据结构
数据结构是一门用来研究非数值计算的程序设计问题中计算机的操作对象,以及他们之间的关系与操作的学科。
3.基本概念与术语
数据:对客观事物的符号描述。在计算机中指所有可以通过输入进入计算机内部并被计算机程序处理的符号的总称。
数据元素:数据的基本单位。在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可以由多个数据项组成。
数据项:数据项是数据不可分割的最小单位。
数据对象:性质相同的数据元素的集合,是数据的一个子集。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。数据元素相互之间的关系称为结构,根据关系的不同特性,可将其分为四类:集合、线性结构、树形结构、图状结构或网状结构。
集合:结构间的数据元素间除了“同属于一个集合”的关系外,别无其他关系。
线性结构:结构中的数据元素存在一个对一个的关系。
树形结构:结构中的数据元素存在一个对多个的关系。
图状结构:结构中的数据元素存在多个对多个的关系。
数据结构的形式定义为:数据结构是一个二元组
Data_Structuer = ( D , S )
其中:D是数据元素的有限集,S是D上关系的有限集。
4.逻辑结构与物理结构
逻辑结构:数据元素间的逻辑关系。线性结构,集合,树形结构,网状结构。
物理结构(存储结构):数据结构在计算机中的表示。包括数据元素的表示和关系的表示。
顺序存储结构:借助数据元素在存储器中的相对位置来表示数据元素间的逻辑关系。即逻辑上相邻的数据元素在实际存储中也连续。
链式存储结构:借助指示元素存储地址的指针来表示数据元素间的逻辑关系。逻辑上相邻的数据元素,实际存储不一定连续。
5.数据类型
数据类型:数据类型明显或隐含地规定了在程序执行期变量或表达式所有可能取值地范围以及在这些值上所允许地操作。即数据类型是一个值的集合和定义在这个值集上一些操作的总称。
高级程序语言中数据类型可分为两类:原子类型,结构类型。
结构类型可以看作由一种数据类型与定义在该类型上的操作所组成。
6.抽象数据类型
抽象数据类型:指一个数学模型以及定义在该模型上的一组操作。数学特性不变,均不影响其外部的使用。
一个含抽象数据类型的软件模块通常应包含定义,表示和实现三部分。
抽象数据类型的定义通常由一个值域和定义在该值域上的一组操作所组成的,按值得不同特性可分为:
(1)原子类型:原子类型变量的值是不可分解的。
(2)固定聚合类型:其值由确定数目的成分按某种结构组成。
(3)可变聚合类型:构成可变聚合类型的值的成分的数目是不确定的。
抽象数据类型可以采用如下三元组表示:
( D , S , P )
其中,D是数据对象,S是D上的关系集,P是定义在D上的一组操作。
抽象数据类型定义格式:
ADT抽象数据类型名{
数据对象: <数据对象的定义>
数据关系: <数据关系的定义>
数据操作: <数据操作的定义>
}ADT抽象数据类型名
数据操作的定义格式:
基本操作名(参数表)
初始条件: <初始条件的描述>
操作结果: <操作结果的描述>
/*
基本操作两种参数:
1.赋值参数只为操作提供输入值
2.引用参数以&打头,除可提供输入值外,还将返回操作结果。
*/
7.算法
算法是对特定问题求解步骤的描述,他是指令的有限序列,其中每一条指令表示一个或多个操作。
算法的重要特性:
(1)有穷性:一个算法在执行有穷步后结束,且每一步均在有穷时间内完成。
(2)确定性:每一条指令均有确切的含义,不会产生二义性。
(3)可行性:算法描述操作均可通过已实现的基本运算执行有限次实现。
(4)输入:一个算法有零个或多个输入。
(5)输出:一个算法有一个或多个输出。
设计一个”好“算法应考虑:
(1)正确性:算法满足具体算法的需求
(2)可读性
(3)健壮性:算法可对非法数据做出反应或给出处理,而不会产生莫名其妙的输出结果。
(4)效率与低存储量需求
8.算法效率的度量
算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,度量一个程序的执行时间通常有两种办法。
(1)事后统计:不同算法的程序可通过一组或若干组相同的统计数据分辨优劣。
缺陷:a.必须先运行依据算法编写的程序。
b.所得时间的统计量依赖于计算机的软硬件环境,容易掩盖算法自身的优劣。
(2)事前估算
程序在计算机上运行的时间取决于如下因素:
a.算法采用策略 b.问题规模 c.书写程序的语言 d.编译程序生成机器代码的质量
e.机器指令执行速度
可以粗略认为:一个特定算法”运行工作量“的大小只依赖于问题规模。
一般情况下,算法中基本操作重复执行次数是问题规模n的某个函数 f(n),算法的时间度量记作:
T(n) = O(f(n))
他表示随问题规模n的增大,算法执行时间的增长率和 f(n) 的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。
语句频度指该语句在程序中重复执行的次数。
9.算法的存储空间需求
类似于算法的时间复杂度,以空间复杂度作为算法所需存储空间的度量,记作
S(n) = O(f(n))
其中n为问题规模的大小。