算法的五个重要的特征

算法的五个重要的特征
算法的五个重要的特征

1、算法的五个重要的特征:确定性、能行性、输入、输

出、有穷性/有限性。

2、表示算法的语言主要有:自然语言、流程图、盒图、

PAD图、伪代码、计算机程序设计语言

3、算法分析有两个阶段:事前分析和时候测试。

4、衡量算法有几个方面:时间和空间。。。

5、渐进意义下的符号的意义:记:算法的计算时间为

f(n), 数量级限界函数为g(n),其中,n是输入或输出规模的某种测度。f(n)表示算法的“实际”执行时间—与机器及语言有关。g(n)是形式简单的函数,如nm,logn,2n,n!等。是事前分析中通过对计算时间或频率计数统计分析所得的与机器及语言无关的函数。

以下给出算法执行时间:上界(О)、下界(Ω)、“平均”()的定义。

定义1.1 如果存在两个正常数c和N0,对于所有的N ≥N0,有|f(N)|≤C|g(N)|,则记作:f(N)= O(g(N))。

1)当说一个算法具有O(g(n))的计算时间时,指的就是

如果此算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于g(n)的一个常数倍。

2)g(n)是计算时间f(n)的一个上界函数,f(n)的数量级

就是g(n)。

Eg : 因为对所有的N≥1有3N≤4N,所以有3N=O(N);

因为当N≥1时有N+1024≤1025N,所以有N+1024=O(N); 因为当N≥10时有2N2+11N-10≤3N2,所以有

2N2+11N-10=O(N2)

因为对所有N≥1有N2≤N3,我们有N2=O(N3)

作为一个反例N3≠O(N2),因为若不然,则存在正的常数C 和自然数N0,使得当N≥N0,有N3≤CN2,即N≤C。显然,当取N=max{N0,C+1}时这个不等式不成立,所以N3≠O(N2)

多项式定理:

定理1.1 若A(n) = amnm+…+a1n+a0是一个m次多项式,则有A(n)=Ο(nm) 即:变量n的固定阶数为m的任一多项式,与此多项式的最高阶nm同阶。

证明:取n0=1,当n≥n0时,有|A(n)|≤|am|nm+…+|a1|n+|a0| ≤(|am|+|am-1|/n+…+|a0|/nm) nm

≤(|am|+|am-1|+…+|a0|) nm

令c= |am|+|am-1|+…+|a0|

定理得证。

符号O运算性质:(f,g为定义在正数集上的正函数) (1)O(f)+O(g)=O(max(f,g))

(2)O(f)+O(g)=O(f+g)

(3)O(f)O(g)=O(fg)

(4)如果g(N)=O(f(N)),则O(f)+O(g)=O(f)

(5)O(Cf(N))=O(f(N)),其中C是一正常数。

(6)f=O(f)

定理 1.2 如果f(n) =am nm+.+a1n+a0 且am > 0,则f(n)=?(nm )。

该定义的优点是与O的定义对称,缺点是f(N)对自然数的不同无穷子集有不同的表达式,且有不同的阶时,不能很好地刻画出f(N)的下界。比如当

100 N为正偶数

f(N)=

6N2 N为正奇数按照定义,得到f(N)=?(1),这是个平凡的下界,对算法分析没有什么价值。

“平均情况”限界函数

定义1.3 如果存在正常数c1,c2和n0,对于所有的n ≥n0,有c1|g(N)| ≤|f(N)| ≤c2|g(N)|

则记作f(N)= (g,(N))

含义:

算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。可看作:既有f(N)=Ω(g(N)),又有f(N)=Ο(g(N))

【例1.8】循环次数直接依赖规模n-变量计数之一。(1) x=0;y=0; (2) for(k=1;k<=n;k++) (3) x++; (4) for(i=1;i<=n;i++)

(5) for(j=1;j<=n;j++) (6) y++;

该算法段的时间复杂度为T(n)=Ο(n2)。

当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。【例1.9】循环次数间接依赖规模n-变量计数之二。(1) x=1;(2) for(i=1;i<=n;i++) (3) for(j=1;j<=i;j++) (4) for(k=1;k<=j;k++) (5) x++;

该算法段中频度最大的语句是(5),从内层循环向外层分析语句(5)的执行次数:算法段的时间复杂度为:T(n)=O(n3/6+低次项)=O(n )。

b.算法的时间复杂度与输入实例的初始状态有关。

这类算法的时间复杂度的分析比较复杂,一般分最好情况(处理最少的情况),最坏情况(处理最多的情况)和平均情况分别进行讨论。

【例1.10】在数值A[0..n-1]中查找给定值K:(1) i=n-1;

(2) while( i>=0 and A[i]<>k )

(3) i=i-1;(4) return i;

此算法的频度不仅与问题规模n有关,还与输入实例中A

的各元素取值及k的取值有关:

1. 若A中没有与k相等的元素,则(2)频度f(n)=n(最坏情况);

2. 若A最后一个元素等于k ,则(2)频度f(n)是常数1(最好情况);

在求平均情况时,一般地假设查找不同元素的概率P是相同的,则算法的平均复杂度为:

若对于查找不同元素的概率P不相同时,其算法复杂度就只能做近似分析,或在构造更好的算法或存储结构后,做较准确的分析。

例1.11】求N!

递归方程为:T(n)=T(n-1)+O(1) 其中O(1)为一次乘法操作。迭代求解过程如下:

T(n)=T(n-2)+O(1)+O(1)

=T(n-3)+O(1)+O(1)+O(1) ……=O(1)+……+O(1)+O(1)+O(1 )

=n*O(1) =O(n)

【例1.12】抽象地考虑以下递归方程,且假设n=2k,则迭代求解过程如下:

∴T(n) =O(n)

【例1.13】一个楼有n个台阶,有一个人上楼有时一次跨一个台阶,有时一次跨两个台阶,编写一个算法,计算此人有几种不同的上楼方法,并分析算法的时间复杂度。解:设计一个递归算法。

H(int n)

{

if (n<0) printf(“Error!”);

if n=1 return(1);

if n=2 return(2);

else return(H(n-1)+H(n-2));

}

时间复杂度(设T(n))分析:

C n≤2

T(n)=

T(n-1)+T(n-2) n>2

∴T(n) ≤2T(n-1) ≤2 T(n-2) ≤…≤ 2 T(1) =O(2 ) 【例1.14】抽象地考虑以下递归方程,且假设n=2k,则迭代求解过程如下:

T(n)=2T(n/2)+O(n) =2T(n/4)+2O(n/2)+O(n) =…=O(n)+O(n)+… +O(n)+O(n)+O(n) =k×O(n) =O(k×n) =O(nlog2 n)

【例1.15】抽象地考虑以下递归方程,迭代求解过程如下:T(n)=T(n/3)+T(2n/3)+n

=T(n/9)+T(2n/9)+n/3+T(2n/9)+T(4n/9)+2n/3 =… ≤∑n=(k+1)n=n(log n+1)

设最长路径长度为k,(2/3) n=1∴k=log n 、、、、、、、、、、加图

Chapter2

1贪婪算法的思想:贪婪算法通过一系列的局部选择来得到一个问题的解。所作的每一个选择都是当前状态下“最优”的选择。

要依照某种策略。策略“只顾眼前,不管将来”,称之为“贪婪策略”。

贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。

1 贪婪算法的思想-例4.

2 活动安排问题

◆规则:选择具有最早结束时间的相容活动加入,使剩余的可安排时间最大,以安排尽可能多的活动。

◆由于输入的活动以其完成时间的非减序排列,所以算法GreedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。

◆也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。

例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下:

贪心算法解决01背包问题:

对于0-1背包问题,贪心选择之所以不能得到最优解是因为在这种情况下,它无法保证最终能将背包装满,部分闲置的背包空间使每公斤背包的价值降低了。

//事实上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所导致的最终方案,然后再作出最好选择。由此就导出许多互相重叠的子问题。

这正是该问题可用动态规划算法求解的重要特征。

动态规划

动态规划的基本思想:

动态规划方法的基本思想是,把求解的问题分成许多阶段或多个子问题,然后按顺序求解各子问题。最后一个子问题就是初始问题的解。

由于动态规划的问题有重叠子问题的特点,为了减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

动态规划=贪婪策略+递推(降阶)+存储递推结果

最大字段和的问题

:

算法(递归形式)

int Num=100

char a[Num],b[Num],str[Num];

main( )

{ int m,n,k;

print (“Enter two string”);

input(a,b);

m=strlen(a);

n=strlen(b),

k=lcs_len(n,m);

build_lcs (k, n,m);

print(str);

}

动态规划中的01背包问题:

分治算法

利用分支算法解决最大字段和的问题:

同题异策的问题

广度优先和深度优先的应用:

广度搜索的例子

缺少分支限界的01背包算法???

回溯法和分支限界的区别:

算法的五个重要的特征

1、算法的五个重要的特征:确定性、能行性、输入、输 出、有穷性/有限性。 2、表示算法的语言主要有:自然语言、流程图、盒图、 PAD图、伪代码、计算机程序设计语言 3、算法分析有两个阶段:事前分析和时候测试。 4、衡量算法有几个方面:时间和空间。。。 5、渐进意义下的符号的意义:记:算法的计算时间为 f(n), 数量级限界函数为g(n),其中,n是输入或输出规模的某种测度。f(n)表示算法的“实际”执行时间—与机器及语言有关。g(n)是形式简单的函数,如nm,logn,2n,n!等。是事前分析中通过对计算时间或频率计数统计分析所得的与机器及语言无关的函数。 以下给出算法执行时间:上界(О)、下界(Ω)、“平均”()的定义。 定义1.1 如果存在两个正常数c和N0,对于所有的N ≥N0,有|f(N)|≤C|g(N)|,则记作:f(N)= O(g(N))。 1)当说一个算法具有O(g(n))的计算时间时,指的就是 如果此算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于g(n)的一个常数倍。 2)g(n)是计算时间f(n)的一个上界函数,f(n)的数量级 就是g(n)。 Eg : 因为对所有的N≥1有3N≤4N,所以有3N=O(N); 因为当N≥1时有N+1024≤1025N,所以有N+1024=O(N); 因为当N≥10时有2N2+11N-10≤3N2,所以有 2N2+11N-10=O(N2) 因为对所有N≥1有N2≤N3,我们有N2=O(N3) 作为一个反例N3≠O(N2),因为若不然,则存在正的常数C 和自然数N0,使得当N≥N0,有N3≤CN2,即N≤C。显然,当取N=max{N0,C+1}时这个不等式不成立,所以N3≠O(N2) 多项式定理: 定理1.1 若A(n) = amnm+…+a1n+a0是一个m次多项式,则有A(n)=Ο(nm) 即:变量n的固定阶数为m的任一多项式,与此多项式的最高阶nm同阶。 证明:取n0=1,当n≥n0时,有|A(n)|≤|am|nm+…+|a1|n+|a0| ≤(|am|+|am-1|/n+…+|a0|/nm) nm ≤(|am|+|am-1|+…+|a0|) nm 令c= |am|+|am-1|+…+|a0| 定理得证。 符号O运算性质:(f,g为定义在正数集上的正函数) (1)O(f)+O(g)=O(max(f,g)) (2)O(f)+O(g)=O(f+g) (3)O(f)O(g)=O(fg) (4)如果g(N)=O(f(N)),则O(f)+O(g)=O(f) (5)O(Cf(N))=O(f(N)),其中C是一正常数。 (6)f=O(f) 定理 1.2 如果f(n) =am nm+.+a1n+a0 且am > 0,则f(n)=?(nm )。 该定义的优点是与O的定义对称,缺点是f(N)对自然数的不同无穷子集有不同的表达式,且有不同的阶时,不能很好地刻画出f(N)的下界。比如当 100 N为正偶数 f(N)= 6N2 N为正奇数按照定义,得到f(N)=?(1),这是个平凡的下界,对算法分析没有什么价值。 “平均情况”限界函数 定义1.3 如果存在正常数c1,c2和n0,对于所有的n ≥n0,有c1|g(N)| ≤|f(N)| ≤c2|g(N)| 则记作f(N)= (g,(N)) 含义: 算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。可看作:既有f(N)=Ω(g(N)),又有f(N)=Ο(g(N)) 【例1.8】循环次数直接依赖规模n-变量计数之一。(1) x=0;y=0; (2) for(k=1;k<=n;k++) (3) x++; (4) for(i=1;i<=n;i++) (5) for(j=1;j<=n;j++) (6) y++; 该算法段的时间复杂度为T(n)=Ο(n2)。 当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。【例1.9】循环次数间接依赖规模n-变量计数之二。(1) x=1;(2) for(i=1;i<=n;i++) (3) for(j=1;j<=i;j++) (4) for(k=1;k<=j;k++) (5) x++; 该算法段中频度最大的语句是(5),从内层循环向外层分析语句(5)的执行次数:算法段的时间复杂度为:T(n)=O(n3/6+低次项)=O(n )。 b.算法的时间复杂度与输入实例的初始状态有关。 这类算法的时间复杂度的分析比较复杂,一般分最好情况(处理最少的情况),最坏情况(处理最多的情况)和平均情况分别进行讨论。 【例1.10】在数值A[0..n-1]中查找给定值K:(1) i=n-1; (2) while( i>=0 and A[i]<>k ) (3) i=i-1;(4) return i; 此算法的频度不仅与问题规模n有关,还与输入实例中A

算法设计与分析考试题及答案要点

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

算法的基本特征是

算法的基本特征是:可行性确定性有穷性拥有足够的情报 算法的基本运算是:算术运算逻辑运算关系运算数据运算 算法的结构特征是:顺序结构选择结购循环结构 算法的基本设计方法:列举法归纳法递推递归减半递推技术回溯法算法复杂度是指时间复杂度和空间复杂度 时间复杂度是指执行算法所需要的计算工作量 空间复杂度是指执行这个算法所需要的内存空间 数据结构分为线性结构和非线性结构 栈、队列、串等都是线性结构 数组、广义表、二叉树和图是非线性结构 线性表的顺序存储结构具有以下特点 线性表中的所有元素所占的内存空间是连续的 线性表中的各数据元素在存储空间中是按照逻辑顺序以此存放的 顺序表的运算有查找、插入、删除三种 栈是一种特殊的线性表它具“有先后出”或“后进先出”的原则 栈顶既可以被删除又可以被插入,栈底既不能被插入也不能被删除。栈底是封闭的 栈的基本运算有入栈退栈读栈顶 队列是一种线性结构它具有“先进先出”的原则一般在队头删除队尾插入 二叉树是一种非线性结构 非空二叉树只有一个根节点

二叉树的基本性质:在二叉树的第K层最多有2^(K-1)(K》1)个节点 深度为M的二叉树最多有2^M-1个节点。 在任意一个二叉树中度为0的结点个数总是比度为一的结点个数多一个 具有N个结点的二叉树其深度至少为以2为底N的对数加一其中以2为底N的对数取整数 二叉树的遍历 1前序遍历:先访问根结点,然后遍历左子树最后遍历右子树 2中序遍历:先访问左子树然后遍历跟结点最后遍历右子树 3后序遍历:先访问左子树然后遍历右子树最后遍历根结点 在以下两种情况只能采用顺序查找 1如果线性表为无序表,则不管是顺序存储结构还是链式存储结构只能用顺序查找。 2既然是有序线性表,如果采用链式存储结构,也只能用顺序查找对于长度为N的有序线性表在最坏的情况下二分法查找只需比较以2为底N的对数而顺序查找需要比较N次。 冒泡排序法在最坏的情况下冒泡排序法需要比较次数为N(N-1)\2 预处理命令开头必须用#号开头并且末尾不加;号 命令行可以出现在程序的任何一行的开头部位,其作用一直持续到源文件的末尾 #define 宏名(形参表)替换文件

算法习题

算法设计与分析试卷 一、填空题(20分,每空2分) 1、算法的性质包括输入、输出、确定性、有限性。 2、动态规划算法的基本思想就将待求问题分解成若干个子问题、先求解子问题,然后 从这些子问题的解得到原问题的解。 3、设计动态规划算法的4个步骤: (1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值得到的信息,构造最优解。 4、流水作业调度问题的johnson算法: (1)令N1={i|ai=bj}; (2)将N1中作业依ai的ai的非减序排序;将N2中作业依bi的非增序排序。 5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}。 6、最优二叉搜索树即是最小平均查找长度的二叉搜索树。 二、综合题(50分) 1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)=20(5分) 2、由流水作业调度问题的最优子结构性质可知,T(N,0)=min{ai+T(N-{i},bi)}(1=sum){ sum=thissum; besti=i; bestj=j;} } return sum; } 4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分) Void OptimalBinarysearchTree(int a,int n,int * * m, int * * w) { for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]= 0;} for(int r=0;r

算法的基本特征

1、算法的基本特征:可行性、确定性、有穷性、拥有足够的情报。 2、常用算法的设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法等。 3、算法的时间复杂度是指执行算法所需要的计算工作量,通俗的说就是算法在执行过程中 所需要的基本运算的执行次数。 4、算法的空间复杂度是指执行算法所需要的内存空间。 5、算法的时间复杂度取决于问题的规模和数据的初态。 6、一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看, 通常递归过程比非递归过程较慢。 7、语句的频度指的是该语句重复执行的次数,一个算法中所有语句的频度之和构成了该算 法的运行时间。即就是时间复杂度。 8、一个算法通常由两种基本要素组成:一是(对数据对象的运算和操作),二是(算法的 控制结构). 9、算法的复杂度主要包括(时间复杂度)和(空间复杂度). 10、通过观察一些简单而特殊的情况,最后总结出一般性的结论的算法设计方法是(归 纳法). 11、.如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为(间接递归调用). 12、由C语言构成的指令序列称作(C源程序)。 13、.C目标文件的扩展名是(.OBJ)。 14、C语言源程序文件的后缀是(.C),经过编译后,生成文件的后缀是(.OBJ),经过连 接后,生成文件的后缀是(.EXE). 15、简单的程序设计一般包括以下几个部分:<1>确定数据结构。<2>确定算法。< 3>(编写代码)。<4>在计算机上调试程序。<5>整理并写出文档资料。 16、结构化程序由顺序结构、选择结构、循环结构三种结构构成。 17、.C语言源程序是由(函数)构成的。 18、一个C程序可以包含任意多个不同名的函数,但有且仅有一个(主函数)。 19、C语言规定,必须用(main)作为主函数的名。 20、在C语言中,每个语句和数据的定义是用(分号)结束的。 21、函数是C程序的基本组成单位,自定义函数可以在主函数之前定义,也可以在主函 数之后定义;函数可以嵌套调用,但不能嵌套定义。 22、在程序中可以对程序进行注释,注释部分必须用符号(/*和*/)括起来。 23、在C语言中,标识符可用作变量名、符号名、函数名、数组名、文件名以及一些具 有专门含义的名字。合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。 24、在C语言中,常量有不同的类型,有整型常量、实型常量、字符常量和(字符串常 量) 25、在C语言中,一个变量实质上是代表了内存中的(某个存储单元)。 26、一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结 构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。 27、在数据结构中,从逻辑上可以把数据结构分成(线性结构和非线性结构)。 28、数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。 29、数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。 30、存储结构、物理结构是同一概念的两个术语,都是数据结构在计算机内存中的表示, 逻辑结构是数据元素间关系的描述,与所用的计算机无关。数据的存储结构又称为数据

最新算法设计与分析复习要点(1)

算法设计与分析的复习要点 第一章:算法问题求解基础 算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 一.算法的五个特征: 1.输入:算法有零个或多个输入量; 2.输出:算法至少产生一个输出量; 3.确定性:算法的每一条指令都有确切的定义,没有二义性; 4.可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现; 5.有穷性:算法必须总能在执行有限步之后终止。 二.什么是算法?程序与算法的区别 1.笼统地说,算法是求解一类问题的任意一种特殊的方法;较严格地说,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 2.程序是算法用某种程序设计语言的具体实现;算法必须可终止,程序却没有这一限制;即:程序可以不满足算法的第5个性质“有穷性”。 三.一个问题求解过程包括:理解问题、设计方案、实现方案、回顾复查。 四.系统生命周期或软件生命周期分为: 开发期:分析、设计、编码、测试;运行期:维护。 五.算法描述方法:自然语言、流程图、伪代码、程序设计语言等。 六.算法分析:是指对算法的执行时间和所需空间的估算。算法的效率通过算法分析来确定。 七.递归定义:是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两部分:基础情况和递归部分; 基础情况:以直接形式明确列举新事物的若干简单对象; 递归部分:有简单或较简单对象定义新对象的条件和方法 八.常见的程序正确性证明方法: 1.归纳法:由基础情况和归纳步骤组成。归纳法是证明递归算法正确性和进行算法分析的强有力工具; 2.反证法。 第二章:算法分析基础 一.会计算程序步的执行次数(如书中例题程序2-1,2-2,2-3的总程序步数的计算)。二.会证明5个渐近记法。(如书中P22-25例2-1至例2-9) 三.会计算递推式的显式。(迭代法、代换法,主方法) 四.会用主定理求T(n)=aT(n/b)+f(n)。(主定理见P29,如例2-15至例2-18)五.一个好的算法应具备的4个重要特征: 1.正确性:算法的执行结果应当满足预先规定的功能和性能要求; 2.简明性:算法应思路清晰、层次分明、容易理解、利于编码和调试; 3.效率:算法应有效使用存储空间,并具有高的时间效率; 4.最优性:算法的执行时间已达到求解该类问题所需时间的下界。 六.影响程序运行时间的主要因素: 1.程序所依赖的算法; 2.问题规模和输入数据规模; 3.计算机系统性能。 七.1.算法的时间复杂度:是指算法运行所需的时间;

算法设计与分析试题与答案

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性: 确定性,有穷性,可行性,0个或多个输入,一个或多个输出。 2.算法的复杂性有时间复杂性和空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低。 3.某一问题可用动态规划算法求解的显著特征是该问题具有最优子结构性质。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列{BABCD}或{CABCD}或{CADCD}。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解。 6.动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法。 8.0-1背包问题的回溯算法所需的计算时间为o(n*2n) ,用动态规划算法所需的计算时间为o(min{nc,2n})。 9.动态规划算法的两个基本要素是最优子结构和重叠子问题。 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;

②构造最优值的递归关系表达式; ③最优值的算法描述; ④构造最优解; 2.流水作业调度问题的johnson算法的思想。 ②N1={i|ai=bi}; ②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’; ③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度。 3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且 (a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N1’={1,3}, N2’={4,2}; 最优值为:38 4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3 的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为:

五大常用算法

五大常用算法之一:分治算法 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。 二、基本思想及策略 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1

算法复习题

1.什么是算法?算法必须满足的五个特性是什么? 算法:一组有穷的规则,规定了解决某一特定类型问题的一系列运算。(有限指令的集合,遵循它可以完成一个特定的任务). 必须满足的五个特性是(遵循以下五条准则): 1.有穷(限)性 2.确定性 3.可(能)行性 4.输入(n≥0) 5.输出(n≥1) 2.对算法进行分析分哪两个阶段?各自完成什么任务(分别得到什么结果)? 对一个算法要作出全面的分析可分成两个阶段进行,即:事前分析和事后测试。 事前分析求出该算法的一个时间界限函数; 事后测试搜集此算法的执行时间和实际占用空间的统计资料。 3.证明:若f1(n)=O(g1(n))并且f2(n)= O(g2(n)),那么f1(n) +f2(n)= O(max{g1(n), g2(n)} 证明: 根据f1(n)=O(g1(n))可知,存在正常数C1,当n≥n0时,使得|f1(n)|≤ C1|g1(n)|; 同理,根据f2(n)= O(g2(n))可知,存在正常数C2,当n≥n0时,使得|f2(n)|≤C2|g2(n)| 当n≥n0时,|f1(n)+f2(n)|≤|f1(n)|+|f2(n)|≤C1|g1(n)|+C2|g2(n)|≤ C1|g k(n)|+C2|g k(n)|

≤(C1+C2)|g k(n)|,其中g k(n)=max{g1(n),g2(n)},k={1,2} 当n≥n0时,取C=(C1+C2),据定义命题得证。 4.如果f 1(n)= Θ(g 1 (n))并且f 2 (n)= Θ(g 2 (n)),下列说法是否正确?试说明 之。 (a) f1(n) +f2(n)= Θ(g1(n)+ g2(n)) (b) f1(n) +f2(n)= Θ(min{g1(n), g2(n)}) (c) f1(n) +f2(n)= Θ(max{g1(n), g2(n)}) 答:(a)和(c)均正确,(b)错误。 (a)正确可以根据定义直接证得。 (b)错误可举反例。例:f1(n)= 2n,f2(n)=2 n2 下面证明(c)正确性. 根据上题已经证明f1(n)+f2(n)= O(max{g1(n),g2(n)}),下面只需证明 f 1(n)+f 2 (n)= Ω(max{g 1 (n), g 2 (n)}),即存在正常数C,使得|f 1 (n)+f 2 (n)|≥ C(max{g 1(n), g 2 (n)}) 根据f1(n)= Θ(g1(n))并且f2(n)= Θ(g2(n)) 得到,当n≥n0时,存在正常数C1、C2、C3、C4 C 1|g 1 (n)|≤|f 1 (n)|≤C 3 |g 1 (n)| C 2|g 2 (n)|≤|f 2 (n)|≤C 4 |g 2 (n)| 不妨设max{g1(n), g2(n)}= g1(n) 由于|f1(n)+f2(n)|≥||f1(n)|-|f2(n)||≥|C1|g1(n)|-C3|g2(n)|| =C|max{g 1(n), g 2 (n)}| 取C≥|C1-C3|的正常数,由定义得 f 1(n)+f 2 (n) = Ω(max{g 1 (n), g 2 (n)})

什么叫算法简述算法基本特性。

1.什么叫算法?简述算法的基本特性。 2.如何评价一个算法?简述空间复杂性和时间复杂性的概念。 3.试分析下列各程序段的时间复杂性。 (1)i=1; (2) for(i=1; i<=m; i++) (3) x=n; /*n>1*/ k=0; for(j=1; j<=n; j++) y=0; n=100; A[i][j] = i * j; while(x>=(y+1)*(y+1)) do{k = k + 10 * i; y = y + 1; i++; }while(i ! 100); 4.简述下列概念:数据、数据元素、数据类型、数据结构; 5.简述数据的逻辑结构、数据的存储结构和数据运算的概念。 6.线性表可用顺序表和单链表作为存储结构。试问: (1) 两种存储表示各有哪些主要优缺点? (2) 如果有n 个表同时并存,且处理过程中个表的长度会动态发生变化,表的 总数也可能自动变化,在此情况下应选用哪种存储表示?为什么? (3) 若表的总数基本稳定,且很少进行插入和删除,但要求以最快速度存取表 中元素,这时应采用哪种存储表示?为什么? 7.设ha 和hb 分别是两个带表头结点的升序单链表的表头指针。试设计一个算法将这两个链表合并成为一个降序单链表。要求结果链表仍使用原来两个链表的结点空间而不另开辟其他存储空间,表中允许出现重复数据。 8.设有一个线性表12(,,,)n L a a a = ,试分别在顺序表和单链表两种存储表示方式下,各设计一个将线性表L 逆置的算法,要求不重新开辟存储空间。所谓逆置是指将线性表中的元素次序颠倒过来,即成为11(,,,)n n L a a a -'= 。 9. 设有一个栈,元素的进栈次序依次为A, B, C, D, E. 试问能否得到下面的出栈序列?若能请写出操作序列,若不能请说明原因。 (1) C, E, A, B, D (2) C, B, A, D, E (3) D, C, A, B, E (4) A, C, B, E, D (5) A, B, C, D, E (6) E, A, B, C, D 10. 何谓队列的上溢现象?解决它有哪些方法?分别简述其工作原理。 11.试写一个算法,它借助栈逆置一个单链表。 12.已知一棵树边的集合为{,,,,,,,,,,,,},请画出这棵树,并回答下列问题:(1)哪个结点是根结点?(2)哪些是叶子结点?(3)哪个是结点g 的双亲?(4)哪些是结点g 的祖先?(5)哪些是结点g 的孩子?(6)哪些是结点e 的子孙?(7)哪些是结点e 的兄弟?哪些是结点f 的兄弟?(8)结点b 和n 的层次号分别是什么?(9)树的深度是多少?树的度是多少?(10)以结点c 为根的子树深度是多少? 13 试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。 14 已知一棵度为k 树中有1n 个度为1的结点,有2n 个度为2的结点, ,有k n 个度为k 的结点,问:树中有多少个叶子结点?

五大经典算法介绍

1分治法 1.1基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。 1.2基本思想及策略 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1

1.什么叫算法简述算法的基本特性.

1.什么叫算法?简述算法的基本特性。 答:算法就是求解问题的方法和步骤。这里的方法和步骤是一组严格定义了运算顺序的规则;每一个规则都是有效的,且是明确的;按此顺序将在有限次数下终止。 算法的基本特性:输入,输出,确定性,有穷性,有效性。 2.如何评价一个算法?简述空间复杂性和时间复杂性的概念。 答:评价一个算法优劣的五条标准:正确性,可读性,健壮性,高效性,简洁性。 一个好的算法是满足这五条标准要求的算法。 一个算法的时间代价,是指将该算法转化为程序后在计算机上运行的时间耗费,引入大O记号表示的算法的时间耗费T(n)通常称之为算法的时间复杂度. 度量一个算法或程序在执行过程中所花费的额外存储开销(即临时存储工作单元)的大小也是用大O方法,度量的结果称之为算法的空间复杂度。 3.试分析下列各程序段的时间复杂性。 (1)i=1; /* 1 次*/ k=0; /* 1 次*/ n=100; /* 1 次*/ T = 300 =O(1). do{k = k + 10 * i; /* 99次*/ i++; /* 99次*/ }while(i ! 100); /* 99次*/ (3)for(i=1; i1*/ /* 1 次*/ y=0; /* 1 次*/ while(x>=(y+1)*(y+1)) /* */ T = 2 y = y + 1; /* */ 4.简述下列概念:数据、数据元素、数据类型、数据结构; 答:(1)数据(Data)是信息的载体,是对自然界客观事物的符号表示。数据是对那些能够有效地输入到计算机中并且能够被计算机程序所加工和处理的符号全体的总称。 (2)数据元素(Data Element)是数据的基本单位。 (3)数据类型(Data Type)是对在计算机中表示的同一数据对象及其在该数据对象上的一组操作的总称。 (4)数据结构(Data Structure)是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算。 5.简述数据的逻辑结构、数据的存储结构和数据运算的概念。

五种算法知识交流

五种算法

算法 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。 二、基本思想及策略 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。如果原问题可分割成k个子问题,1

1.什么叫算法简述算法的基本特性。

1.什么叫算法简述算法的基本特性。 答:算法就是求解问题的方法和步骤。这里的方法和步骤是一组严格定义了运算顺序的规则;每一个规则都是有效的,且是明确的;按此顺序将在有限次数下终止。 算法的基本特性:输入,输出,确定性,有穷性,有效性。 2.如何评价一个算法简述空间复杂性和时间复杂性的概念。 答:评价一个算法优劣的五条标准:正确性,可读性,健壮性,高效性,简洁性。 一个好的算法是满足这五条标准要求的算法。 一个算法的时间代价,是指将该算法转化为程序后在计算机上运行的时间耗费, 引入大O记号表示的算法的时间耗费T(n)通常称之为算法的时间复杂度. 度量一个算法或程序在执行过程中所花费的额外存储开销(即临时存储工作单元)的大小也是用大O方法,度量的结果称之为算法的空间复杂度。 3.试分析下列各程序段的时间复杂性。 (1) i=1; /* 1 次 */ k=0; /* 1 次 */ n=100; /* 1 次 */ T = 300 =O(1). do{k = k + 10 * i; /* 99次 */

i++; /* 99次 */ }while(i ! 100); /* 99次 */ (3) for(i=1; i1*/ /* 1 次 */ y=0; /* 1 次 */ while(x>=(y+1)*(y+1)) /* 次 */ T = 2 */ 4.简述下列概念:数据、数据元素、数据类型、数据结构; 答:(1)数据(Data)是信息的载体,是对自然界客观事物的符号表 示。数据是对那些能够有效地输入到计算机中并且能够被计算机程序 所加工和处理的符号全体的总称。 (2)数据元素(Data Element)是数据的基本单位。 (3)数据类型(Data Type)是对在计算机中表示的同一数据对象及 其在该数据对象上的一组操作的总称。 (4)数据结构(Data Structure)是指计算机程序中所操作的对象 ——数据以及数据元素之间的相互关系和运算。

算法复习试题

算法复习试题(仅供参考)2009 一、填空题(每空1分,共15分) 1、一个正确的算法应当具有五个特性:(有穷性)、(确定性)、( 能行性 )、 输入和输出。 2、算法的时间复杂性是算法运行所需要的( 计算机资源 )的量,这个量只依赖于 (求解问题的规模 )、(具体的输入数据)和( 算法本身的设计 )。 3、函数的渐进表达式为( T(N) ),函数错误!未找到引用源。的渐进表达式为( 3n 错误!未找到引用源。)。 4、快速排序和归并排序策略上是相同的,都是用的( 递归与分治 ) 算法。 5、对于问题Q ,若满足( Q 是NP 困难的 )、( Q ∈NP )则称Q 为NP 完全的。 6、要求出一个问题所有的可行解,一般要用( 回溯 )算法。 7、通常能用动态规划法求解的问题应具备(最优子结构)和(或者是重叠字问题)相似 )的性质。 二、选择题(每小题2分,共10分) (D ) 1、 概率算法是一种非确定性地选择下一计算步骤的方法,( )算法主要目的 是消除算法所需计算时间对输入实例的依赖。 A .数值概率算法 B .蒙特卡罗算法 C .拉斯维加斯算法 D .舍伍得算法 ( B ) 2、 ASCII 码压缩方法经过两级压缩之后可以减少( )的存储空间。 A .62.5% B .56.25% C .50% D .65% ( A ) 3、 P 类问题与NP 类问题的关系是( ) A .包含于 B .包含 C .属于 D .等于 ( C ) 4、 以下关于判定问题难易处理的叙述中正确的是( )。 A .可以由多项式时间算法求解的问题是难处理的 B .需要超过多项式时间算法求解的问题是易处理的 C .可以由多项式时间算法求解的问题是易处理的 D .需要超过多项式时间算法求解的问题是不能处理的 (C ) 5、 对于含有n 个元素的排列树问题,最坏情况下计算时间复杂性为( )。 A .2 n+1 -1 B . ∑=n i i n 1 !/! C .n! D .2n

五种算法知识讲解

算法 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。 二、基本思想及策略 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1

算法的五个主要特性

一、算法的五个主要特性:①有穷性②确定性③可行性④输入⑤输出 二、算法复杂度(时间)(空间) 三、数据结构(逻辑结构)(存储结构)(数据的操作) 四、存储器映射方法:1、顺序映射2、链式映射(经常增删节点的复杂 数据)3.索引映射(存储效率不高,常用方法)4散列映射 五、数据元素的结构:集合、线性结构、树形结构、图状结构 六、队列:限定了插入和删除操作的线性表 八、树、①有且仅有一个特定的称为根的节点②当n>1时其余节点可分为m(m>0)个互不橡胶的有限级T1.T2…….Tm其中每一个集合本身是一棵树,称为子树。 九、二叉树的存储结构①顺序存储结构②链式存储结构 十、算法通常由两种基本要素构成①对数据对象的运算和操作②算法的控制结构 十一、算法:对某个问题处理方案的正确而完整的描述称为算法 十二、数据结构:互相之间存在着一种或多种关系的数据元素的集合 十三、完全二叉树:除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干缺点。 十四、二叉树①在二叉树的第i层至多有()个节点(I>=1)②深度为k的二叉树至多有()个节点③对任何一个二叉树T1,如果其终端节点数为n1,度为2的节点数为n2,则n1=n2+1 ④具有n个结点的完全二叉树的深度为k+1其中k是()的整数部分 十五、度为0的结点(叶子节点)总是比度为2的结点多一个。 十六、如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=I<=n)有:①如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是节点k,其中k是i/2的整数部分②如果2i>n,则节点i无左孩子,否则其左孩子是节点2i③如果2i+1>n 则节点i无右孩子,否则其右孩子是节点2i+1 十七、遍历:前序遍历;根左右中序遍历;左根右后序遍历;左右根 十八、程序设计:指设计,编制,调试程序的方法和过程。 十九、程序设计风格:指编写程序时所表现出的特点、习惯和逻辑思路二十、消息机制统一了数据流和控制流 二十一、结构化程序设计方法得重要原则是:自顶向下,逐步求精,模块化,限制使用goto语句 二十二、顺序结构,选择结构,重复结构共同特征:严格的只有一个入口和一个出口 二十三、对象的特点:①标示唯一性②分类性③多态性④封装性⑤模块独立性好 二十四、面向对象设计方法的基本特征:封装,多态,继承 二十五、计算机软件的构成;程序、数据、及相关文档 二十六、计算机软件的定义:与计算机系统操作有关的计算机程序规则,以及可能有的文件文档及数据。 二十七、软件分类:系统软件、应用软件、支撑软件 二十八、软件危机表现在:①软件需求的增长得不到满足②软件开发成本和进度无法控制③软件质量难以保证④软件不可维护和维护程度非常低⑤软件成本不断提高⑥软件开发效率的提高赶不上硬件的发展和应用需求的增长。 二十九、软件工程:应用与计算机软件的定义、开发、和维护的一整套方法、工具、文档、实践标准和工序。 三十、软件工程的要素①方法②工具③过程 三十一、软件开发技术:主要有软件开发方法学、软件工具、软件工程坏境 三十二、软件工程管理:主要有软件管理,软件工程经济学 三十三、软件生命周期的的三个时期:①软件定义期②软件开发期③软件维护期 三十四、软件生命周期各阶段的主要任务:①问题定义②可行性研究与计划制定③需求分析④软件设计⑤软件实现⑥软件测试⑦运行维护 三十五、系统的逻辑模块:数据流图和数据字典 三十六、软件需求规格说明书的作用:①便于用户,开发人员进行理解和交流②反映出用户问题的结构,可以作为软件开发工作的基础和依据③作为确认测试和验收的依据 三十七、软件需求规格说明书的特点:①正确性②无歧义性③完整性④可验证性⑤一致性⑥可理解性⑦课修改性⑧可追踪性 三十八、软件设计:1)结构设计2)数据设计3)接口设计4)过程设计{概要设计和详细设计} 三十九、软件设计的重要性和低位:1)软件开发阶段(设计、编码,测试)占软件项目开发总成本的绝大部分,是在软件开发中形成质量的关键环节2)软件设计是开发阶段最重要的步骤,是将需求准确的转化为完整的软件产品或系统的唯一途径;3)软件设计做出的决策,最终影响软件实现的成败4)设计是软件工程和软件维护的基础 四十、软件设计的基本原理:1)抽象2)模块化3)信息隐藏4)模块独立性 四十一、优秀设计:高内聚,低耦合。 四十二、软件概要设计的基本任务: 1)设计软件系统的结构2)数据结构及数据库设计3)编写概要设计文档4)概要设计文档评审 四十三、数据流图的两种典型结构形式:1)变换型和事务性 四十四、程序流图构成的控制结构:1)顺序型2)选择型3)先判断重复姓4)后判断重复型5)多分支选择型 四十五、软件测试的目的:1)测试是为了发现程序的错误而执行程序的过程2)好的测试用例很可能发现迄今为止尚未发现的错误3)一次成功的测试是指发现了至今为止尚未发现的错误 四十六、软件测试:暴露错误,评价可靠性 四十七、软件调试、发现错误的位置,并改正错误 四十八、白盒测试又称为结构测试或逻辑驱动测试 四十九、白盒测试的基本原则:1)保证所测模块中每一个独立路径至少执行一次2)保证所测试模块所有判断的每一个分支至少执行一次3)保证所测模块的每一个循环都在边界条件和一般条件下至少执行一次4)验证所有内部数据结构的有效性 五十、白盒测试主要有(逻辑覆盖和基本路径测试) 五十一、黑盒测试:工能测试或数据驱动测试着重测试软件功能 五十二、黑盒测试方法和技术有:1)等价类划分法2)边界值分析法3)错误推测法 五十三、软件测试实施过程的4个步骤:1)单元测试2)集成测试3)确认测试和系统测试 五十四、软件调试的目的:改正错误 五十五、软件调试的任务、诊断和改正程序中的错误。 五十六、某学生的记录由学号void fun(STREC *a) { int i; a->ave=0.0; for(i=0;iave=a->ave+a->s[i]; a->ave/=N; 五十七、N名学生的成绩已在主函数中放入一个带头结点double fun( STREC *h ) { double ave=0.0; STREC *p=h->next; while(p!=NULL) { ave=ave+p->s; p=p->next; } return ave/N; } 五十八、int fun(char *ss, char c) { int i=0; for(;*ss!='\0';ss++) if(*ss==c) i++;/*求出ss所指字符串中指定字符的个数*/ return i; }

相关文档
最新文档