《算法分析与设计》2012-2013-2学期期中测试(信息安全专业DQ 教学班)
姓名: 学号: 得分:
1. 证明()()()()()()()O f n O g n O f n g n +=+。(10分)
证明:对于任意f 1(n ) ∈ O (f (n )),存在正常数c 1和自然数n 1,使得对所有n ≥ n 1,有f 1(n ) ≤ c 1f (n )成立。 类似,对于任意g 1(n ) ∈ O (g (n )),存在正常数c 2和自然数n 2,使得对所有n ≥ n 2,有g 1(n ) ≤ c 2g (n )成立。
令c 3 = max{c 1, c 2},n 3 = max{n 1, n 2},则对所有的n ≥ n 3,有
f 1(n ) +
g 1(n ) ≤ c 1f (n ) + c 2g (n )
≤ c 3f (n ) + c 3g (n )
= c 3(f (n ) + g (n ))
即()()()()()()()O f n O g n O f n g n +=+成立。
2. 将下列5个函数按渐近增长率由低至高进行排序,要求写出比较过程。(15分) 解: 100log 2log log log 24()log 100log ,()2log ,n n n f n n n f n n n +====
(1) 2()f n 是对数函数的幂,5()f n 是幂函数,因此()25()()f n O f n =;
(2) ()()
()491105log lim lim lim log n n n f n n n n n f n n →∞→∞→∞===∞,因此()54()()f n O f n =; (3) ()
()423log 1lim lim
lim 0log n n n f n n n f n n n n →∞→∞→∞===,因此()43()()f n O f n =; (4) 对1()f n 和3()f n 取对数,有
()()() 13log ()log loglog loglog ,log ()2log loglog log f n n n n n n n f n n n n =+=Θ=Ω=+=Θ, 因为()log n O n =,所以()31()()f n O f n =;
因此,5个函数按渐近增长率由低至高排序为25431(),(),(),(),()f n f n f n f n f n 。
3. 给定按升序排列的n 个不同整数存于数组a [1:n ]中,请设计()log O n 的算法找到下标i ,1i n ≤≤,使得a [i ] = i ,如不存在这样的下标,则返回0。(15分)
解:
令head = 1, rear = n .
(1) 当head <= rear 时,令mid = ?(head + rear)/2?;
(2) 如果a [mid] = mid ,返回mid 值,结束。
如果a [mid] > mid ,令rear = mid – 1,返回(1)继续执行;
如果a [mid] < mid ,令head = mid + 1,返回(1) 继续执行;
(3)返回0值,结束。
public static int Search(int [] a, int n)
{
// 在 a[0] <= a[1] <= ... <= a[n -1] 中搜索 a[i] = i
// 找到a[i] = i 时返回i ,否则返回0
int left = 0; int right = n – 1;
while (left <= right)
{
int mid = ?(left + right)/2?;
if (a[mid] == mid) return mid;
if (a[mid] > mid) right = mid – 1;
else left = mid + 1;
}
return 0; // 未找到a[i] = i
}
4. 利用主方法给出下列递归式的渐近界,并用数学归纳法证明式(2)的渐近界。(20分)
(1) ()()42T n T n n =+, (2) ()()242T n T n n =+, (3) ()()3
42T n T n n =+解:(1) 24,2,log log 42,b a b a ==== 因此,()()2T n n =Θ. (2) 24,2,log log 42,b a b a ==== 因此,()()2log T n n n =Θ. (3) 2
4,2,log log 42,b a b a ==== 而且()()()333424223,
f n n n n cf n ==≤=其中34n =,
因此,()()3T n n =Θ. 证明:假设当k n <时,()2log T k ck k ≤,其中c 为常数。
因此,命题得证。5. 利用直接展开法求解下列递归式的渐近界。(20分)
(1) ()()242T n T n n =+, (2) (
)T n n =+解:(1)
(2) (
)T n n =+ 其中122k n '=,则 所以,()()()2log log 1log log 2
T n T n n n =+=Θ+, 即()()loglog T n O n n =.
6. 某超市中有n 种商品搞活动,每种商品i 的重量是w i ,其价格为v i ,现在给你发一个容量为C 的购物车,你可以在这n 种商品中选一些放入你的购物车中免费带走。但是要求所选的商品重量之和不能大于购物车容量C ,而且超市中每种商品每人最多选两件。请问在这种情况下你如何选择商品使得你能带走的免费商品的价格达到最大?(20分)
(a) 为该问题设计一个动态规划算法,要求写出分析过程和递归式。
(b) 若该超市共有3种商品搞活动,商品的价值依次为v = (25, 30, 15),商品的重量依次为w = (2, 3, 1),购物车容量为C = 5。运用自底而上的方法求解上述问题,要求画出表格,并给出最优解与最优值!
解:
方法1 ?
将n 种商品全部复制一份得到2n 种商品,这样每种商品最多只能选择1件。 ?
定义m (i , j )为购物车容量为j ,由第1, …, i 种商品装入购物车的最优值。 ?
Case 1: 不选择第i 种商品 ? 则m (i , j )为当重量限制为j 时,{1, …,i – 1}种商品装入购物车所产生的最大价值 ? Case 2: 选择第i 种商品.
? 新的重量限制为 j – w i
算法设计与分析实验报告 学院信息科学与技术学院 专业班级软件工程3班 学号 20122668 姓名王建君 指导教师尹治本 2014年10月
实验四 矩阵相乘次序 一、问题提出 用动态规划算法解矩阵连乘问题。给定n 个矩阵{A 1,A 2,…,A n },其中A i 与A i+1是可乘的,i=1,2,…,n-1。要算出这n 个矩阵的连乘积A 1A 2…A n 。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵连乘积可递归地定义为: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A 是完全加括号的,则A 可表示为2个完全加括号的矩阵连乘积B 和C 的乘积并加括号,即A=(BC)。 例如,矩阵连乘积A 1A 2A 3A 4有5种不同的完全加括号的方式:(A 1(A 2(A 3A 4))),(A 1((A 2A 3)A 4)),((A 1A 2)(A 3A 4)),((A 1(A 2A 3))A 4),(((A 1A 2)A 3)A 4)。每一种完全加括号的方式对应于一个矩阵连乘积的计算次序,这决定着作乘积所需要的计算量。若A 是一个p ×q 矩阵,B 是一个q ×r 矩阵,则计算其乘积C=AB 的标准算法中,需要进行pqr 次数乘。 (3)为了说明在计算矩阵连乘积时,加括号方式对整个计算量的影响,先考察3个矩阵{A 1,A 2,A 3}连乘的情况。设这三个矩阵的维数分别为10×100,100×5,5×50。加括号的方式只有两种:((A 1A 2)A 3),(A 1(A 2A 3)),第一种方式需要的数乘次数为10×100×5+10×5×50=7500,第二种方式需要的数乘次数为100×5×50+10×100×50=75000。第二种加括号方式的计算量时第一种方式计算量的10倍。由此可见,在计算矩阵连乘积时,加括号方式,即计算次序对计算量有很大的影响。于是,自然提出矩阵连乘积的最优计算次序问题,即对于给定的相继n 个矩阵{A 1,A 2,…,A n }(其中矩阵Ai 的维数为p i-1×p i ,i =1,2,…,n ),如何确定计算矩阵连乘积A 1A 2…A n 的计算次序(完全加括号方式),使得依此次序计算矩阵连乘积需要的数乘次数最少。 二、求解思路 本实验采用动态规划算法解矩阵连乘积的最优计算次序问题。本实验的算法思路是: 1)计算最优值算法MatrixChain():建立两张表(即程序中的**m 和**s ,利用二维指针存放),一张表存储矩阵相乘的最小运算量,主对角线上的值为0,依次求2个矩阵、3个矩阵…、直到n 个矩阵相乘的最小运算量,其中每次矩阵相乘的最小运算量都在上一次矩阵相乘的最小运算量的基础上求得,最后一次求得的值即为n 个矩阵相乘的最小运算量;另一张表存储最优断开位置。 2)输出矩阵结合方式算法Traceback():矩阵结合即是给矩阵加括号,打印出矩阵结合方式,由递归过程Traceback()完成。分三种情况: (1)只有一个矩阵,则只需打印出A1; (2)有两个矩阵,则需打印出(A1A2); (3)对于矩阵数目大于2,则应该调用递归过程Traceback()两次,构造出最优加括号方式。 三、算法复杂度 该算法时间复杂度最高为)(n 3 O 。 四、实验源代码
华南农业大学期末考试试卷(A卷) 2008学年第一学期考试科目:算法分析与设计考试类型:(闭卷)考试时间:120 分钟学号姓名年级专业 一、选择题(20分,每题2分) 1.下述表达不正确的是。 A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐进表达式上界函数是O(logn)
D.logn3的渐进表达式下界函数是Ω(n3) 2.当输入规模为n时,算法增长率最大的是。 A.5n B.20log 2n C.2n2 D.3nlog 3 n (n)表示当输入规模为n时的算法效率,以下算法效率最优的是。 A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog 2 n 4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所 需的L型骨牌的个数是。 A.(4k– 1)/3 B.2k /3 C.4k D.2k 5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想, 运用分治算法对n个元素进行划分,应如何选择划分基准下面答案解释最合理。 A.随机选择一个元素作为划分基准 B.取子序列的第一个元素作为划分基准
C.用中位数的中位数方法寻找划分基准 D.以上皆可行。但不同方法,算法复杂度上界可能不同 6.有9个村庄,其坐标位置如下表所示: 现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。 A.(,0)B.(,)C.(5,5)D.(5,0) 个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水,水流恒定。如下说法不正确 A.让水桶大的人先打水,可以使得每个人排队时间之和最小 B.让水桶小的人先打水,可以使得每个人排队时间之和最小
《投资分析》课程平时作业1 一、单项选择题(每小题2分,共20分) 1.项目市场分析(C ) A、只在可行性研究中进行 B、只在项目评估中进行 C、在可行性研究和项目评估中都要进行 D、仅在设计项目产品方案时进行2.计算项目的财务净现值所采用的折现率为( B ) A、财务内部收益率 B、基准收益率 C、财务净现值率 D、资本金利润率 3.已知终值F,求年金A应采用( C ) A、资金回收公式 B、年金终值公式 C、偿债基金公式 D、年金现值公式 4.项目分为基本建设项目和更新改造项目,其分类标志是(A ) A、项目的性质 B、项目的用途 C、项目的规模 D、项目的资金来源 5.在下列说法中,错误的是( B ) A、基本建设项目属于固定资产外延式扩大再生产 B、更新改造项目属于固定资产外延式扩大再生产 C、项目的规模一般是按其总投资额或项目的年生产能力来衡量的 D、生产性项目主要是指能够形成物质产品生产能力的投资项目 6.在进行项目市场预测时,如果掌握的是大量相关性数据,则需选用(C )A、德尔菲法B、时间序列预测法 C、回归预测法 D、主观概率法
7.二次指数平滑法主要用于配合(A ) A、直线趋势预测模型 B、次抛物线趋势预测模型 C、三次抛物线趋势预测模型 D、季节变动预测模型 8.下列说法中错误的是(B ) A、当FNPV>0时项目可行; B、当FIRR≥ic时项目不可行; C、当Pt>PC时项目不可行; D、当FCE>官方汇率时项目不可行。9.已知现值P,求年金A应采用( D ) A、年金现值公式 B、年金终值公式 C、偿债基金公式 D、资金回收公式 10.下列影响项目建设经济规模的因素中,最重要的是(D ) A、市场需求总量 B、市场供给总量 C、项目投资者可能获得的产品市场份额 D、A和C 二、多项选择题(每题2分,共12分) 1.项目市场分析的主要内容包括(ABCDE ) A、市场需求分析 B、市场供给分析 C、市场竞争分析 D、二项目产品分析 E、市场综合分析 2.项目市场调查的原则(ABCD ) A、准确性原则 B、完整性原则 C、时效性原则 D、节约性原则 E、科学性原则 3.项目市场调查的方法主要有(ABC ) A、观察法 B、询问法 C、实验法 D、网络调查法 E、面谈法
《算法分析与设计》作业( 一) 本课程作业由两部分组成。第一部分为”客观题部分”, 由 15个选择题组成, 每题1分, 共15分。第二部分为”主观题部分”, 由简答题和论述题组成, 共15分。作业总分30分, 将作为平时成 绩记入课程总成绩。 客观题部分: 一、选择题( 每题1分, 共15题) 1、递归算法: ( C ) A、直接调用自身 B、间接调用自身 C、直接或间接 调用自身 D、不调用自身 2、分治法的基本思想是将一个规模为n的问题分解为k个规模 较小的字问题, 这些子问题: ( D ) A、相互独立 B、与原问题相同 C、相互依赖 D、相互独立且与原问题相同 3、备忘录方法的递归方式是: ( C ) A、自顶向下 B、自底向上 C、和动态规划算法相同 D、非递归的 4、回溯法的求解目标是找出解空间中满足约束条件的: ( A )
A、所有解 B、一些解 C、极大解 D、极小解 5、贪心算法和动态规划算法共有特点是: ( A ) A、最优子结构 B、重叠子问题 C、贪心选择 D、 形函数 6、哈夫曼编码是: ( B) A、定长编码 B、变长编码 C、随机编码 D、定 长或变长编码 7、多机调度的贪心策略是: ( A) A、最长处理时间作业优先 B、最短处理时间作业优 先 C、随机调度 D、最优调度 8、程序能够不满足如下性质: ( D ) A、零个或多个外部输入 B、至少一个输出 C、指令的确定性 D、指令的有限性 9、用分治法设计出的程序一般是: ( A ) A、递归算法 B、动态规划算法
C、贪心算法 D、回溯法 10、采用动态规划算法分解得到的子问题: ( C ) A、相互独立 B、与原问题相同 C、相互依赖 D、相互独立且与原问题相同 11、回溯法搜索解空间的方法是: ( A ) A、深度优先 B、广度优先 C、最小耗费优先 D、随机搜索 12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策 有可能导致算法: ( C ) A、所需时间变化 B、一定找到解 C、找不到所需的解 D、性能变差 13、贪心算法能得到: ( C ) A、全局最优解 B、 0-1背包问题的解 C、背包问题的 解 D、无解 14、能求解单源最短路径问题的算法是: ( A ) A、分支限界法 B、动态规划 C、线形规划 D、蒙特卡罗算法 15、快速排序算法和线性时间选择算法的随机化版本是:
《算法设计与分析》期中试卷 一、叙述分治算法的基本思想及一般算法设计模式; 二、叙述动态规划算法的基本步骤及动态规划算法的基本 要素; 三、改进课本P74的Lcs算法,使改进算法不用数组b亦 可在O(m+n)的时间内构造最长公共序列; 四、求下列函数的渐近表达式 (1). 3n2+10n (2).n2/10+2n (3)21+1/n (4)logn3 (5)10log3n 五、对于下列各组函数发f(n)和g(n),确定f(n)=O((g(n))) 或者f(n)= ((g(n)))或者f(n)=θ((g(n))),并简述理由 (1). f(n)=logn2 , g(n)=logn+5; (2). f(n)=logn2 , g(n)= √n; (3), f(n)=n, g(n)= logn2; (4). f(n)=nlogn+n,g(n)=logn; (5). f(n)=10.g(n)=log10; (6). f(n)=log2n g(n)=logn (7). f(n)=2n g(n)= 3n; (8). f(n)=2n g(n)= 100n2;
六、设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当 搜索元素x不再数组中时,返回小于x的最大元素位置i和大于x 的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x 在数组中的位置 七、设a[0:n-1]是有n个元素的数组,k(0<=k<=n-1)是非负整数。 试设计一个算法将子数组a[0:k]与a[k+1:n-1]换位。要求算法在最坏的情况下耗时O(n),且只用到O(1)的辅助空间。 八、在一个由元素组成的表中出现次数最多的元素称为众数。试写 一个寻找众数的算法,并分析其计算复杂性。 九、设计一个O(n2)时间的算法,找出由n个数组成的序列的最长 单调递增子序列。 十、给定n中物品和一背包,物品i的重量是ω,体积是b i,其价 值为v i ,背包的容量为C,容积为D。问:应该如何选择装入背包中的物品,使得装入背包中的物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包,不能将物品i装入背包多次,也不能只装入部分的物品i。 试设计一个解此问题的动态规划算法,并分析算法的计算复杂性。
(一)名词解释 1.软件 2.软件危机 3.数据流图 4.数据字典 5.变换流 6.事务流 7.耦合性 8.内聚性 9.程序设计语言(PDL) (二)填空题 1. 在信息处理和计算机领域内,一般认为软件是_____、_____ 和_____ 。 2. 数据流图的基本组成部分有_____、_____、_____、_____。 3. 数据流图和数据字典共同构成了系统的_____模型,是需求规格说明书的主要组成部分。 4. 数据流图一般可分为_____和_____两类。 5. 结构化设计方法中,要把数据流图转换成软件结构,若某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD称为_____数据流图。 6. PDL是描述处理过程“_____ ”的细节,结构化语言是描述加工“_____ ”的。 (三)选择题 1. 软件工程的概念是哪年提出的( )。 A. 1988 B. 1968 C. 1948 D. 1928 2. 影响输入输出风格的因素不包括( )。 A. 数据状态 B. 通信环境 C. 用户经验 D. 输入/输出设备 3. 符合数据说明顺序规范的是( )。 A. 全程量说明、局部量说明、类型说明、常量说明 B. 全程量说明、局部量说明、常量说明、类型说明 C. 类型说明、常量说明、全程量说明、局部量说明 D. 常量说明、类型说明、全程量说明、局部量说明 4. 瀑布模型的关键不足在于( )。 A. 过于简单 B. 各个阶段需要进行评审 C. 过于灵活 D. 不能适应需求的动态变更 5. 以下哪一项不是软件危机的表现形式( )。 A. 开发的软件不满足用户需要 B. 开发的软件可维护性差 C. 开发的软件价格便宜 D. 开发的软件可靠性差 6. 软件可行性研究实质上是要进行一次( )需求分析、设计过程。 A. 简化、压缩的 B. 详细的 C. 彻底的 D. 深入的 7. 结构化设计是一种面向( )的设计方法。 A. 数据流 B. 模块 C. 数据结构 D. 程序 8. 与确认测试阶段有关的文档是( )。
《算法分析与设计》作业(一) 本课程作业由两部分组成。第一部分为“客观题部分”,由15个选择题组成,每题1分,共15分。第二部分为“主观题部分”,由简答题和论述题组成,共15分。作业总分30分,将作为平时成绩记入课程总成绩。 客观题部分: 一、选择题(每题1分,共15题) 1、递归算法:(C ) A、直接调用自身 B、间接调用自身 C、直接或间接调用自身 D、不调用自身 2、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的字问题,这些子问题:(D ) A、相互独立 B、与原问题相同 C、相互依赖 D、相互独立且与原问题相同 3、备忘录方法的递归方式是:(C ) A、自顶向下 B、自底向上 C、和动态规划算法相同 D、非递归的 4、回溯法的求解目标是找出解空间中满足约束条件的:(A ) A、所有解 B、一些解 C、极大解 D、极小解 5、贪心算法和动态规划算法共有特点是:( A ) A、最优子结构 B、重叠子问题 C、贪心选择 D、形函数 6、哈夫曼编码是:(B) A、定长编码 B、变长编码 C、随机编码 D、定长或变长编码 7、多机调度的贪心策略是:(A) A、最长处理时间作业优先 B、最短处理时间作业优先 C、随机调度 D、最优调度 8、程序可以不满足如下性质:(D ) A、零个或多个外部输入 B、至少一个输出 C、指令的确定性 D、指令的有限性 9、用分治法设计出的程序一般是:(A ) A、递归算法 B、动态规划算法
C、贪心算法 D、回溯法 10、采用动态规划算法分解得到的子问题:( C ) A、相互独立 B、与原问题相同 C、相互依赖 D、相互独立且与原问题相同 11、回溯法搜索解空间的方法是:(A ) A、深度优先 B、广度优先 C、最小耗费优先 D、随机搜索 12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策有可能导致算法:( C ) A、所需时间变化 B、一定找到解 C、找不到所需的解 D、性能变差 13、贪心算法能得到:(C ) A、全局最优解 B、0-1背包问题的解 C、背包问题的解 D、无解 14、能求解单源最短路径问题的算法是:(A ) A、分支限界法 B、动态规划 C、线形规划 D、蒙特卡罗算法 15、快速排序算法和线性时间选择算法的随机化版本是:( A ) A、舍伍德算法 B、蒙特卡罗算法 C、拉斯维加斯算法 D、数值随机化算法 主观题部分: 二、写出下列程序的答案(每题2.5分,共2题) 1、请写出批处理作业调度的回溯算法。 #include
武汉大学计算机学院 算法设计与分析 期中测试 姓名: 学号: 学院: 专业: 一、请用大“O(·)”记号求下列函数的渐进表达式:3n 2 + 10n -1; n 2/10 + 2n +1/n; 14 + 5/n + 1/n 2 ; n n +2log ; 20log3n (10分,每小题2分) 解答: 上述渐进表达式的时间复杂度分别为: 3n 2 + 10n -1 =O(n 2); n 2/10 + 2n + 1/n =O(2n ); 14 + 5/n + 1/n 2=O(1); n n +2log =O(logn); 20log3n =O(n) 二、 令{1},{2},{3},…,{8}是n 个单元素集合,每个集合由一棵仅有一个结点的树表示。请用按秩合并和路径压缩措施的UNION-FIND 算法来执行以下操作序列,并画出每一步操作完成后的树表示。(总分20分)合并和查找操作序列如下所示:UNION (1,2);UNION (4,3);UNION (5,6);UNION (7,8);UNION (2,6);FIND (1);UNION (3,8);UNION (8,6);FIND (4);FIND (5)。要求:UNION 操作在同秩情况下,以后一个结点作为根结点。如UNION (1,2),生成以2为根结点的树。 解答:
(b) (a) UNION (1,2);UNION (4,3);UNION (5,6);UNION (7,8); (c) UNION (2,6); (d) FIND (1); (e) UNION (3,8);(g)FIND (4 ); (h) FIND (5); (f) UNION (8,6); 三、 设有n 个小球,其中一个是劣质球,其特征是重量较轻,给你一个天平,设计一个分治算法,找出劣质球。(总分15分) (1) 写出算法的主要思路;(5分) (2) 试分析算法的时间复杂度;(5分) (3) 试分析n=9和10,即n 分别为奇数和偶数,两种情形下的分治过程。(5分) 解法:(1)二对分算法思路:
《算法设计与分析》历年期末试题整理(含答案) (1)用计算机求解问题的步骤: 1、问题分析 2、数学模型建立 3、算法设计与选择 4、算法指标 5、算法分析 6、算法实现 7、程序调试 8、结果整理文档编制 (2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程 (3)算法的三要素 1、操作 2、控制结构 3、数据结构算法具有以 下5 个属性: 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间完成。确定性:算法中每一条指令必须有确切的含义。不存在二义性。只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。 输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。 输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。 算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。 效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。一般这两者与问题的规模有关。 经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法 迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。 利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。 三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。 编写计算斐波那契(Fibonacci)数列的第n 项函数fib(n)。