算法分析 期末大作业内容

合集下载

算法分析与设计大作业

算法分析与设计大作业

算法分析与设计大作业摘要:本文以算法分析与设计为主题,对算法的概念、分析和设计进行了探讨。

首先介绍了算法的概念和基本特征,其次分析了算法的效率和复杂度,并介绍了常用的算法复杂度表示方法。

然后,通过实例分析了几种常用的排序算法的性能与复杂度,并对它们进行了比较。

最后,总结了算法分析与设计的重要性,并提出了进一步研究的方向。

一、引言随着计算机技术的快速发展,算法分析与设计成为计算机领域中的重要研究方向。

算法是指解决特定问题的具体步骤和方法,是计算机科学的核心和基础。

算法的效率和复杂度对计算机的性能和运行时间有着直接的影响,因此算法的分析和设计非常重要。

二、算法的概念和特征算法是指在有限的时间内解决特定问题的一种方法。

它具有以下特征:输入、输出、确定性、有穷性和可行性。

输入是指算法接受的问题的数据或信息,输出是指算法求解得到的问题的解。

确定性是指算法在任何情况下都能够得到相同的结果。

有穷性是指算法在执行有限的步骤后能够终止。

可行性是指算法的每一步都是可行的,即能够被计算机执行。

三、算法的效率和复杂度算法的效率是指算法解决问题所需要的时间和空间资源的多少。

算法的复杂度是用来描述算法执行过程中所需要的资源的多少。

常用的算法复杂度表示方法有时间复杂度和空间复杂度。

时间复杂度表示算法的执行时间与输入规模之间的关系,用大写O表示。

空间复杂度表示算法所需的空间资源与输入规模之间的关系,用大写S表示。

四、常用的排序算法及性能与复杂度分析1.插入排序插入排序是一种简单直观的排序算法。

它的基本思想是将未排序的元素逐个插入到已排序的序列中。

插入的过程中,需要比较和移动元素的次数与未排序序列中的元素个数相关,因此时间复杂度为O(n^2)。

空间复杂度为O(1)。

2.冒泡排序冒泡排序是一种重复比较相邻元素并交换位置的排序算法。

它的基本思想是两两比较相邻元素,如果顺序错误则交换位置。

冒泡的过程中,需要进行n-1次的比较和交换操作,因此时间复杂度为O(n^2)。

算法设计与分析报告大作业

算法设计与分析报告大作业

算法分析与设计大作业班级: 12信科姓名:郭倩南学号: 1242155105完成日期: 2015-6-4指导教师:陈平序号选定题目所用算法设计技术1数字三角形问题动态规划2集合划分问题分治法回溯法3求子集问题评分:大作业报告1、数字三角形问题一、问题描述对于给定的由n行数字组成的数字三角形,计算从三角形的底至顶的路径经过的数字和的最大值。

如:73 88 1 02 7 4 44 5 2 6 5二、实验内容与实验步骤实验内容:输入数据的第1 行是数字三角形的行数n,1<=n<=100。

接下来n行是数字三角形各行中的数字。

所有数字在0..99之间实验步骤:1、首先证明该问题满足最优化原理最优化原理:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。

简而言之,一个最优化策略的子策略总是最优的。

2、建立动态规划函数3、填表三、实验环境Window7系统,vc++6.0软件四、问题分析由观察数字三角形可知,从数字三角形的顶层出发,下一层选择向左还是向右取决于两个4层数字三角形的最大数字和,而对于第四层的决定取决于第三层的最大数字和,依次类推,可知该问题是多阶段决策最优化问题,并且划分出来的子问题是相互重叠的,所以该问题采用动态规划法解决动态规划:与分治法相似,把问题分解按层次分成子问题,直到可以直接求解的子问题,然后一级一级地向上求解。

与分治法的出别在于:动态规划适用有许多重复子问题出现的问题,它保存已求出问题的解。

73 8 3 88 1 0 8 1 1 02 7 4 4 2 7 4 7 4 4 4 5 2 6 5 4 5 2 6 5 2 6 5一个五层数字三角形子问题〔1〕子问题〔2〕五、问题解决〔1〕根据对问题的分析,写出解决方法。

1、证明:S,S1,S2,..Sn,t是从S到t的一条数字和最大的路径,从源点S开始,设从S到下一段的顶点S1已经求出,如此问题转化为求从S1到t的数字和最大的路径,显然S1,S2,...Sn,t一定构成一条从S1到t的数字和最大值的路径,如假如不然,设S1,r1,r2,....rq,t是一条数字和最大的路径,如此S,S1,r1,r2,....rq,t的路径经过数字和的最大值比S,S1,S2,...Sn,t的路径数字和更大,从而导致矛盾,所以数字三角形问题满足最优性原理。

算法设计与分析课程大作业

算法设计与分析课程大作业

题目作业调度问题及算法分析学院名称:计算机与信息工程学院专业名称:计算机科学与技术目录《算法设计与分析》课程大作业 (1)一.动态规划算法解决流水作业调度 (3)1、问题描述 (3)2、算法分析 (3)3. 算法的描述 (4)4、部分算法实现 (5)5. 运行结果 (6)6、时空效率分析 (6)二.贪心算法解多机调度问题 (6)1、问题描述 (6)2、算法分析 (7)3.部分算法实现 (7)4.计算复杂性分析 (8)5. 运行结果 (9)三.回溯法解决批作业调度问题 (9)1.问题描述 (9)2.算法思想 (10)3. 部分算法实现 (11)4.运行结果 (12)5.时间复杂性分析 (12)四.作业调度算法比较 (12)五.课程学习总结 (13)摘要:在现代企业中,作业调度已成为提高资源利用率、从而提高企业运行效益的关键环节之一。

把各个作业分配到车间现有的设备上,并确定它们的先后次序,这是一项复杂的工作本文就作业调度排序问题进行了研究,通过对几个经典作业调度算法的分析讨论,总结了各个算法对作业调度的求解过程,并给出了每个算法的复杂度及性能分析。

关键词:作业调度;动态规划;贪心算法;回溯法;一.动态规划算法解决流水作业调度1、问题描述给定n 个作业,每个作业有两道工序,分别在两台机器上处理。

一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。

一个作业只有在机器1上的处理完成以后才能由机器2处理。

假设已知作业i 在机器j 上需要的处理时间为t[i,j]。

流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。

2、算法分析直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。

在一般情况下,机器M2上会有机器空闲和作业积压2种情况。

在一般情况下,机器M1开始加工S 中作业时,机器M2还在加工其他作业,要等时间t 后才可利用。

将这种情况下完成S 中作业所需的最短时间记为T(S,t)。

Linux大作业的算法分析怎么写

Linux大作业的算法分析怎么写

Linux大作业的算法分析怎么写Linux大作业分析框架1、以算法输入规模n作为参数进行分析算法效率2、时间复杂度:找出基本操作O(1),再计算它的运行次数(忽略乘法常量,仅关注增长次数)3、增长次数:log2n4、最差、平均和最佳效率均是指输入规模为n时候的效率(平均效率可以引用已知的推到结果)主要概括分析框架:1、算法的时间效率和空间效率都用输入规模的函数进行度量。

2、用算法的基本操作的执行次数来度量时间效率,用算法消耗的额外单位的数量来度量空间单位3、在输入规模相同的情况下,有写算法的效率会有显著的差异,对于这类算法需要分析最差、平均和最佳效率4、框架主要关心:输入规模趋向于无限大的情况下它的效率问题渐近符号和基本效率类型1、O(g(n))是增长次数&amp;lt;=c*g(n)的函数集合,上阶2、Ω(g(n))是增长次数&amp;gt;=c*g(n)的函数集合,下阶3、θ(g(n))是增长次数=c*g(n)的函数集合,同阶可以利用极限进行比较增长次数(洛必达法则)算法整体效率是由具有较大增长次数的部分所决定的。

非递归问题的数学分析的通用方案1、决定哪个参数表示输入规模的度量标准2、找出算法的基本操作3、检查基本操作的执行次数是否只依赖于输入规模,如果它还依赖于一些其他的特性(例如:元素在数组中的位置等)则分析最差、平均和最佳效率4、建立一个算法基本操作执行次数的求和表达式(有可能是递推表达式)5、利用求和运算的标准运算或者法则来建立一个操作次数的闭合公式,或者至少确定它的增长次数递归问题的数学分析的通用方案1、决定哪个参数表示输入规模的度量标准2、找出算法的基本操作3、检查基本操作的执行次数是否只依赖于输入规模,如果它还依赖于一些其他的特性(例如:元素在数组中的位置等)则分析最差、平均和最佳效率4、对于算法基本操作执行次数,建立一个递推关系以及相应的初始条件。

5、解这个递推式,或者至少确定它的增长次数。

算法设计与分析大作业评分标准

算法设计与分析大作业评分标准

课号:____CK5J08A ___ 课名:_____算法设计与分析______教师: ________________期末大作业要求:在以下几种方式中任选一种一.算法实际应用题任务要求:1.完成一个有一定实用性的程序,其中包含稍复杂的算法模块,算法输入和输出必须显示在图形界面上,最好能把算法运行过程展现在图形界面上。

2.撰写算法设计报告,描述算法设计流程,分析算法效率。

3.进行答辩。

评分标准:1.图形界面的操作方便性与对算法的展现程度(30分)2.算法的复杂程度和算法效率和实用性(30分)3.算法设计流程的解释的清晰度和算法效率分析的准确度(30分)4.答辩10分,采用教师提问学生回答和解释的形式,学生若不能自圆其说、对自己设计的算法流程也讲不清楚,则判定为抄袭,整个大作业为0分。

参考题目:1.算242.倒油3.趣味算式4.马步问题5.单源最短路径6.最小生成树7.工作分配8.2*2*2魔方9.长江游艇10.推箱子11.华容道12.文件搜索13.………..二.ACM算法设计题任务要求:1.完成2道及2道以上ACM算法设计题,题目由教师给定并公布在OJ系统中,学生限定时间内(2个小时),在其中选做2题以上,正确性也由OJ系统判定,并参照OJ系统的标准,形成排名。

完成数量不到2题的,不管排名如何,整个大作业都判定为不及格。

2.为所完成的每道题目撰写解题报告,描述设计思路与流程,分析课号:____CK5J08A ___ 课名:_____算法设计与分析______教师: ________________程序的时空效率。

评分标准:1.算法设计能力(60分),主要根据OJ系统中的排名来评定,部分提交的题目有抄袭嫌疑的学生,教师对其进行质询答辩,采用问答形式,学生若对其提交正确的任何题目,无法通过质询答辩,则判定为抄袭,整个大作业为0分。

2.算法表述与分析能力(40分),根据提交的解题报告中,对算法流程的描述的清晰程度,对算法时空效率的分析的准确程度,进行评定。

算法设计期末大题分析总结

算法设计期末大题分析总结

算法设计期末大题分析总结1. 前言在本次算法设计期末大题分析中,我将对所给的几个算法问题进行详细的分析和总结。

这几个算法问题涉及了各个领域,包括图论、动态规划、字符串处理等等。

在解决这些问题的过程中,我运用了所学的算法知识和编程技巧,通过合理的算法设计和优化,解决了这些问题。

2. 问题1:最小生成树给定一个无向图,每个边都有一个正的权值。

我们需要找到一个最小生成树,使得所有边的权值之和最小。

这是一个非常经典的图论问题,常用的解决方法包括Kruskal算法和Prim算法。

在本次问题中,我使用了Prim算法来解决这个问题。

Prim算法的基本思想是从一个顶点开始,逐渐构造最小生成树,每次选择一个与当前顶点距离最短的边。

通过运用堆数据结构来加速选取最短边的过程,使得算法能够在较短的时间内求解问题。

3. 问题2:最长递增子序列给定一个序列,我们需要找到一个最长的递增子序列,即该子序列中的元素按照从小到大的顺序排列。

这是一个动态规划问题,常用的解决方法是使用动态规划算法来求解。

在本次问题中,我使用了动态规划算法来解决这个问题。

动态规划算法的基本思想是将一个大问题划分成若干个相同或者类似的子问题,并且逐步求解这些子问题,最终得到整个问题的解。

为了实现这个算法,我设计了一个动态规划数组dp,其中dp[i]表示以第i个元素结尾的最长递增子序列的长度。

通过不断更新dp数组中的值,最终可以得到最长递增子序列的长度。

4. 问题3:字符串替换给定一个字符串S和两个子串A和B,我们需要将字符串S中所有的子串A都替换成子串B。

这是一个字符串处理问题,常用的解决方法是使用字符串匹配算法来求解。

在本次问题中,我使用了KMP算法来解决这个问题。

KMP算法的基本思想是通过预处理模式串来减少匹配的次数,从而提高算法的效率。

为了实现这个算法,我设计了一个next 数组,其中next[i]表示在模式串的第i个字符之前的子串中,最长的相等的前缀和后缀的长度。

算法设计与分析大作业报告

算法设计与分析大作业报告

《算法设计与分析大作业报告》班级:学号:姓名:分治法大作业报告问题陈述:编程实现归并排序算法和快速排序算法,输出排序结果。

输入10组相同的数据,验证排序结果和完成排序的比较次数。

分治法基本思想:分治法的基本思想是将问题分解成若干个子问题,然后求解子问题。

子问题较原问题要容易些,先得出子问题的解,由此得出原问题的解,这就是所谓“分而治之”的思想。

算法描述:当要求解一个输入规模为n,且n的取值相当大的问题时,如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1<k≤n,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。

那末,对于这类问题分治法是十分有效的。

本实验就是通过归并排序和快速排序来体现分治的思想。

1.归并排序的思想:将A(1),……,A(N)分成两个集合,对每个集合单独分类,然后将已分类的两个序列归并成一个含N个元素分好类的元素2.快速排序的思想:选取A的某个元素做为划分元素,然后将其他元素重新排列,使在划分元素以前出现的元素都小于或等于它,在划分元素之后出现的划分元素都大于等于它。

程序代码:#include <stdio.h>#include <time.h>#include <stdlib.h>void MergeSort(int *data,int x,int y,int *temp){ int p,q,m,i=x;if (y-x>1){m = x+(y-x)/2;p = x;q = m;MergeSort(data,x,m,temp);MergeSort(data,m,y,temp);while(p<m||q<y){if (q>=y||(p<m&&data[p]<data[q])){temp[i++] = data[p++];}else{temp[i++] = data[q++];}}for(i=x;i<y;i++)data[i] = temp[i]; }}void HoareSort(int *data,int x,int y){int p=x,q=y-1,temp;while(p<q) {while (q>p&&data[q]>=data[p])q--;if (q>p){temp = data[p],data[p] = data[q],data[q] =temp;p++;}while(q>p&&data[p]<=data[q])p++;if (p<q){temp = data[p],data[p] = data[q],data[q] =temp;q--;}if (p==q) {HoareSort(data,x,p);HoareSort(data,p+1,y);}}}int main(){int data[10],i;int temp[10];srand(time(NULL));for (i=0;i<10;i++){ data[i] = rand()%100; }printf("未排序排序的数据为:\n");for (i=0;i<10;i++){printf("%d ",data[i]);}printf("\n");printf("归并排序的顺序为: \n");MergeSort(data,0,10,temp);for (i=0;i<10;i++){printf("%d ",data[i]); }printf("\n");printf("快速排序的顺序为: \n");HoareSort(data,0,10);for (i=0;i<10;i++){printf("%d ",data[i]);}printf("\n");return 0;}运行结果:结论分析:归并排序和快速排序都是递归排序,但是归并排序是稳定的排序方法,快速排序是不稳定的排序方法。

【图文】算法分析与设计大作业

【图文】算法分析与设计大作业

算法理论、教改类题目学习大量相关算法(程序),总结出对应方法的一些特点,将其写成论文形式,并以足够的例子作为佐证。

24.论分治法、动态规划、贪心法的区别 25.论递归程序向非递归程序的转换 26.论应用型本科院校算法课程的教学目标和教学方法 27.论二叉树在计算机科学与技术中的应用 28.数据库索引的算法解释 29.论贪心法的适用范围 30.解空间搜索方法的选择依据 31.分治法算法分析综述
算法应用、算法研究类题目查阅大量相关资料,对相关内容给出初步的结果。

31.基于UCCI的中国象棋对弈引擎开发技术研究 32.五子棋对弈关键技术研究33.黑白棋对弈关键技术研究 34.数独初始局面生成算法研究 35.支持按文件名搜索的索引构造技术研究 36.通用回溯算法演示系统设计 37.通用分支限界算法演示系统设计 38.通用排序算法演示系统设计 39.通用动态规划算法演示系统设计
40.论文阅读和翻译类题目• 给出一个英文文献,用准确的语言将其翻译为中文,不需要逐字逐句翻译,但主要观点、算法思想和算法过程表述清楚、准确、充分。

格式要求• 论文正文中不得出现大段代码(超过10行)• 标题样式需规范• 参考文献不低于10篇,参考文献格式和标注位置须规范。

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1.确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。

3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。

4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。

时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。

5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。

最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。

6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<="">7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。

目标函数:获得最大利润。

最优量度:最大利润/重量比。

8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。

算法设计与分析课程大作业

算法设计与分析课程大作业

算法设计与分析课程大作业-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN题目作业调度问题及算法分析学院名称:计算机与信息工程学院专业名称:计算机科学与技术目录《算法设计与分析》课程大作业.................................................................... 错误!未定义书签。

一.动态规划算法解决流水作业调度. (4)1、问题描述 (4)2、算法分析 (4)3. 算法的描述 (5)4、部分算法实现 (6)5. 运行结果 (7)6、时空效率分析 (7)二.贪心算法解多机调度问题 (7)1、问题描述 (7)2、算法分析 (7)3.部分算法实现 (7)4.计算复杂性分析 (8)5. 运行结果 (8)三.回溯法解决批作业调度问题 (8)1.问题描述 (8)2.算法思想 (9)3. 部分算法实现 (10)4.运行结果 (10)5.时间复杂性分析 (11)四.作业调度算法比较 (11)五.课程学习总结 (12)摘要:在现代企业中,作业调度已成为提高资源利用率、从而提高企业运行效益的关键环节之一。

把各个作业分配到车间现有的设备上,并确定它们的先后次序,这是一项复杂的工作本文就作业调度排序问题进行了研究,通过对几个经典作业调度算法的分析讨论,总结了各个算法对作业调度的求解过程,并给出了每个算法的复杂度及性能分析。

关键词:作业调度;动态规划;贪心算法;回溯法;一.动态规划算法解决流水作业调度1、问题描述给定n 个作业,每个作业有两道工序,分别在两台机器上处理。

一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。

一个作业只有在机器1上的处理完成以后才能由机器2处理。

假设已知作业i 在机器j 上需要的处理时间为t[i,j]。

流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。

2、算法分析直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。

计算机算法设计与分析期末试题4套(含答案)

计算机算法设计与分析期末试题4套(含答案)

计算机算法设计与分析期末试题4套(含答案)(1)用计算机求解问题的步骤: 1问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

确定性:算法中每一条指令必须有确切的含义。

不存在二义性。

只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。

输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。

输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。

效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。

一般这两者与问题的规模有关。

经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。

在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式。

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。

迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制。

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。

不能让迭代过程无休止地重复执行下去。

迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。

算法分析 期末大作业内容

算法分析 期末大作业内容

算法设计与分析期末成绩考核标准要求:算法设计与分析考试方式为小论文形式。

下面给出了小论文的参考模型和参考题目,供大家选择。

1.小作业题目(仅供参考)(题目的难易:●简单10道题★中等11道题▲复杂10道题)●最佳浏览路线问题问题描述:某旅游区的街道呈网格状,其中东西向的街道都是旅游街,南向的街道都是林荫道。

由于游客众多,旅游街被规定为单行道。

游客在旅游街上只能从西向东走,在林荫道上既可以由南向北走,也可以从北向南走。

阿隆想到这个旅游区游玩,他的好友阿福给了他一些建议,用分值表示所有旅游街相邻两个路口之间的道路浏览的必要程度,分值从-100到100的整数,所有林荫道不打分,所有分值不可能全是负值。

阿隆可以从任一路口开始浏览,在任一路口结束浏览,请写出一个算法,帮助阿隆寻找一条最佳的浏览路线,使得这条路线的所有分值总和最大。

(算法设计与分析第二版P190—11题)●问题描述:某工业生产部门根据国家计划的安排,拟将某种高效率的5台机器,分配给所属的,A,B,C个工厂,各工厂在获得这种机器后,可以为国家盈利如图表所示,问:这5台机器如何分配给各工厂,才能使得国家盈利最大?(P190-14题)●问题描述:编写算法对输入的一个整数,判断他能否被4,7,9整除,并输出一下信息之一,能同时被4,7,9整除;能被其中两个数(要指出那两个)整除能被其中一个数(要指出哪一个)整除不能被4,7,9任一个整除。

(P118-16)●问题描述:某一印刷厂有6项加工任务,对印刷车间和装订车间所需的时间表如下图:完成每项任务都要先去印刷车间印刷,再到装订车间装订。

问咋样安排这6项加工任务的加工工序,使得加工工时最少?(P191-17)●问题描述:编写用动态规划法求组合数mC的算法(P191-19).n●问题描述:仿照分治算法中两个大数相乘的算法策略,完成求解两个n*n阶矩阵A和矩阵B的乘积的算法。

假设n=2k,要求算法的复杂性要小于O(n3).(P190-12)●问题描述:在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照5个方向前进但不能跃出方格,如图所示,人每走过一个方格必须取此方格中的数。

算法分析与设计大作业

算法分析与设计大作业
*/
int
main ( int argc, char *argv[] )
{
char * fixed = "600087000000905706040000080030002000004000690000410023500030170080090200001076300";
char r[MMAX][MMAX] = {{0}};
{
return row/3 * 3 + col/3;
}
void getnext(int *row, int *col, int* nrow, int* ncol){
if(*col ==8)
{
*ncol = 0;
*nrow = (*row)+1;
}பைடு நூலகம்
Else
{
*nrow = *row;
*ncol = (*col) +1;
{
for(col= 0; col<MMAX; col++)
{
if(fixmtr[row][col]!= 0)
{
r[row][(int)fixmtr[row][col]-1] = 1;
c[col][(int)fixmtr[row][col]-1] = 1;
b[getblockid(row,col)][(int)fixmtr[row][col]-1] = 1;
问题描述
在本次算法分析的课堂演示中,我做的是一个关于“裁切悖论——消失的正方形的PPT”,但是由于代码的问题,现在借鉴了同学的实验,写了一个关于数独算法的小题目。
如下图所示,有一个9*9的正方形,而正方形又分成了九个小正方形,现在已经在图示的正方形中给出了一些方格中的数字,要求将正方形中所有小方格的数字填充完,并且每个小正方形以及每行、每列,只能出现一次1~9这九个数字。

1《算法设计与分析》期末大作业题目

1《算法设计与分析》期末大作业题目

综合题目:(1) 在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。

可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测出这枚假币。

(2)动态规划法给定N个整数(可能有负数)组成的序列(a1,a2,···an),求该序列形如的字段和的最大值,当所有整数都为负数时,其最大字段和为0。

.(3) 贪心算法一辆汽车加满油后可以行驶N千米。

旅途中有若干个加油站。

若要使沿途的加油次数最少,设计一个有效的算法,指出应在那些加油站停靠加油。

并证明你的算法能产生一个最优解。

实验提示把两加油站的距离放在数组中,a[1..n]表示从起始位置开始跑,经过n个加油站,a[k]表示第k-1个加油站到第k个加油站的距离。

汽车在运行的过程中如果能跑到下一个站则不加油,否则要加油。

(4)回溯法下图是由14个“+”和14个“-”组成的符号三角形。

2个同号下面都是“+”,2个异号下面都是“-”。

+ + - + - + ++ - - - - +- + + + -- + + -- + -- -+在一般情况下,符号三角形的第一行有n个符号。

符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。

(5) 旅行商售货员问题的分支限界算法某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。

他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。

(6) 使用回溯法编程,求解跳马问题实验内容问题描述:在N*N棋盘上有N2个格子,马在初始位置(X0,Y0),按照象棋中马走“日”的规则,使马走遍全部格子且每个格子仅经过一次。

编程输出马的走法。

给出算法描述。

编程实现,给出N=5,(X0,Y0)=(1,1)时的运行结果。

(7) 连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。

算法设计与分析报告大作业问题详解

算法设计与分析报告大作业问题详解

算法设计技术与方法大作业学院电子工程学院专业电路与系统姓名学号导师姓名1.分别实现多项式求值的四种运算,若针对不同规模的输入值a ,各算法的运行时间,问题 规模n 分别取10,50,100,150,200,300,400,500,10000,20000,50000,100000时绘制四种算法运行时间的比较图。

2.分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为2222⨯,3322⨯,4422⨯,5522⨯,6622⨯,7722⨯,8822⨯,9922⨯,101022⨯,111122⨯,121222⨯时的运行时间与MATLAB 自带的矩阵相乘的运行时间,绘制时间对比图。

3.利用遗传算法求解下面的问题:)20sin()4sin(5.21),(max 221121x x x x x x f ππ⋅+⋅+=⎩⎨⎧≤≤≤≤-8.51.41.120.3..21x x t s1、分析题意可知,该题要用四种不同的方法实现对多项式的求值计算,每种方法取从10-100000不同的规模。

本文采用了以下方法进行求值:直接代入法和递归法。

而其中递归法分三类不同思路进行递归:① n n n n x a x P x P +=-)()(1;② 0a P =,1=Q ,Q a P P Qx Q i +==,;③ i n i i a x x P x P --+'=')()(1。

本文对上述四种方法进行了编程,具体代码如下:程序1.1文件名poly.m% 主程序:实现不同规模下多项式求值的四种运算clc;close all ;clear all ;n=[10 50 100 150 200 300 400 500 10000 20000 50000 100000];x=2;for i=1:12a=rand(1,(n(i)+1)); % 产生多项式,最高次幂为n(i)+1tic;p1(i)=polyval(a,x); % 直接代入法t1(i)=toc;tic;p2(i)=0;for j=1:(n(i)+1)p2(i)=p2(i)+a(j)*x^(j-1); % 递归法1t2(i)=toc;tic;p3(i)=0;q=1;for j=2:(n(i)+1)q=q*x;p3(i)=p3(i)+a(j)*q; % 递归法2endt3(i)=toc;tic;p4(i)=0;for j=1:n(i);p4(i)=x*p4(i)+a(n(i)+1-j); % 递归法3endt4(i)=toc;endfigure(1);subplot(2,2,1);h=semilogx(n,t1); % 这里不能用plot,横轴需要取对数,下同set(h,'linestyle','-','linewidth',1.8,'marker','*','color','g','markersize',6); xlabel('The scale of the problem:n');ylabel('time for first method(s)');title('the relationship between time and scale');grid on;subplot(2,2,2);h=semilogx(n,t2);set(h,'linestyle','-','linewidth',1.8,'marker','*','color','b','markersize',6); xlabel('The scale of the problem:n');ylabel('time for second method(s)');title('the relationship between time and scale');grid on;subplot(2,2,3);h=semilogx(n,t2);set(h,'linestyle','-','linewidth',1.8,'marker','*','color','k','markersize',6); xlabel('The scale of the problem:n');ylabel('time for third method(s)');title('the relationship between time and scale');grid on;subplot(2,2,4);h=semilogx(n,t2);set(h,'linestyle','-','linewidth',1.8,'marker','*','color','r','markersize',6); xlabel('The scale of the problem:n');ylabel('time for forth method(s)');title('the relationship between time and scale');grid on;figure(2);g=semilogx(n,t1,'g+',n,t2,'bx',n,t3,'k*',n,t4,'ro');legend('the first method','the second method','the third method','the forth method'); set(g,'linestyle','-','linewidth',2.0,'markersize',8);xlabel('n=10, 50, 100, 150, 200, 300, 400, 500, 10000, 20000, 50000, 100000'); ylabel('time');title('The comparison chart of four different methods for polyval');grid on;运行结果如下:图 1.1 四种方法所用时间随规模不同而变化的结果图图 2.2 四种方法所用时间随规模不同而变化的对比图由理论分析可知,四种算法的时间复杂度分别为)(2n O 、)(2n O 、)(n O 、)(n O ,由图1.2分析可知,直接带入计算和递归法所用时间相差无几,这与理论分析一直。

算法分析大作业

算法分析大作业

算法分析大作业动态规划方法解乘法表问题和汽车加油行驶问题目录1.动态规划解乘法表问题1.1问题描述------1.2算法设计思想------1.3设计方法------1.4源代码------1.5最终结果------2.动态规划解汽车加油行驶问题2.1问题描述------2.2算法设计思想------2.3设计方法------2.4源代码------2.5最终结果------3.总结1.动态规划解决乘法表问题1.1问题描述定义于字母表∑{a,b,c)上的乘法表如表所示:依此乘法表,对任一定义于∑上的字符串,适当加括号表达式后得到一个表达式。

例如,对于字符串x=bbbba,它的一个加括号表达式为(b(bb))(ba)。

依乘法表,该表达式的值为a。

试设计一个动态规划算法,对任一定义于∑上的字符串x=x1x2…xn,计算有多少种不同的加括号方式,使由x导出的加括号表达式的值为a。

1.2算法设计思想设常量a,b,c 分别为 1, 2 ,3 。

n 为字符串的长度。

设字符串的第 i 到第 j 位乘积为 a 的加括号法有result[i][j][a] 种,字符串的第 i 到第 j 位乘积为 b 的加括号法有result[i][j][b] 种,字符串的第 i 到第 j 位乘积为 c 的加括号法有 result[i][j][c] 种。

则原问题的解是:result[i][n][a] 。

设 k 为 i 到 j 中的某一个字符,则对于 k 从 i 到 j :result[i][j][a] += result[i][k][a] * result[k + 1][j][c] +result[i][k][b] * result[k + 1][j][c] + result[i][k][c] * result[k + 1][j][a];result[i][j][b] += result[i][k][a] * result[k + 1][j][a] +result[i][k][a] * result[k + 1][j][b] + result[i][k][b] * result[k + 1][j][b];result[i][j][c] += result[i][k][b] * result[k + 1][j][a] +result[i][k][c] * result[k + 1][j][b] + result[i][k][c] * result[k + 1][j][c];输入:输入一个以a,b,c组成的任意一个字符串。

算法大题期末考试题及答案

算法大题期末考试题及答案

算法大题期末考试题及答案一、简答题(每题5分,共20分)1. 简述什么是递归算法,并给出一个递归算法的实例。

答案:递归算法是一种在算法中使用函数调用自身的方法来解决问题的算法。

例如,计算阶乘的递归算法定义为:n! = n * (n-1)!,其中n是一个正整数,递归的基本情况是1! = 1。

2. 描述二分查找算法的基本思想,并说明其时间复杂度。

答案:二分查找算法是一种在有序数组中查找特定元素的算法。

其基本思想是将数组分为两半,比较中间元素与目标值,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找。

这个过程重复进行,直到找到目标值或查找范围为空。

二分查找的时间复杂度为O(log n)。

3. 什么是动态规划?动态规划与贪心算法的区别是什么?答案:动态规划是一种通过将复杂问题分解为更小的子问题来解决的方法,并且通过存储这些子问题的解来避免重复计算。

动态规划与贪心算法的区别在于,贪心算法在每一步选择局部最优解,而动态规划则考虑所有可能的子问题解,并选择全局最优解。

4. 解释什么是哈希表,并简述其工作原理。

答案:哈希表是一种数据结构,它提供了快速的数据插入和查找功能。

哈希表通过哈希函数将键映射到表中的一个位置来访问记录,这个通过键到位置的映射过程称为哈希。

如果两个键具有相同的哈希值,这种情况称为冲突,通常通过链地址法或开放地址法来解决。

二、计算题(每题10分,共20分)1. 给定一个数组A=[3, 5, 7, 9, 11],请使用二分查找算法找出11的位置。

答案:首先,确定数组的中间位置,即(0+4)/2=2,比较A[2]与11,发现A[2]=7小于11,因此11在A[2]的右侧。

更新查找范围为A[3]到A[4],即索引3和4。

继续比较A[3]与11,发现A[3]=9小于11,因此11在A[3]的右侧。

最后,比较A[4]与11,发现A[4]=11等于目标值,所以11的位置是4。

算法分析期末考试集答案(套)

算法分析期末考试集答案(套)

算法分析期末考试集答案(套)《算法分析与设计》⼀、解答题 1. 机器调度问题。

问题描述:现在有n 件任务和⽆限多台的机器,任务可以在机器上得到处理。

每件任务的开始时间为s i ,完成时间为f i ,s i问题实例:若任务占⽤的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要⼏台机器?(提⽰:使⽤贪⼼算法)画出⼯作在对应的机器上的分配情况。

2. 已知⾮齐次递归⽅程:f (n)bf (n 1)g(n)f (0)c =-+??=? ,其中,b 、c 是常数,g(n)是n 的某⼀个函数。

则f(n)的⾮递归表达式为:nnn i i 1f (n)cb b g(i)-==+∑。

现有Hanoi 塔问题的递归⽅程为:h(n)2h(n 1)1h(1)1=-+??=? ,求h(n)的⾮递归表达式。

解:利⽤给出的关系式,此时有:b=2, c=1, g(n)=1, 从n 递推到1,有:n 1n 1n 1i i 1n 1n 22n h(n)cbb g(i)22 (22121)----=--=+=+++++=-∑3. 单源最短路径的求解。

问题的描述:给定带权有向图(如下图所⽰)G =(V,E),其中每条边的权是⾮负实数。

另外,还给定V 中的⼀个顶点,称为源。

现在要计算从源到所有其它各顶点的最短路长度。

这⾥路的长度是指路上各边权之和。

这个问题通常称为单源最短路径问题。

解法:现采⽤Dijkstra 算法计算从源顶点1到其它顶点间最短路径。

请将此过程填⼊下表中。

4. 请写出⽤回溯法解装载问题的函数。

装载问题:有⼀批共n 个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi ,且121nii w c c=≤+∑。

装载问题要求确定是否有⼀个合理的装载⽅案可将这n 个集装箱装上这2艘轮船。

如果有,找出⼀种装载⽅案。

解:void backtrack (int i){// 搜索第i 层结点if (i > n) // 到达叶结点更新最优解bestx,bestw;return; r -= w[i];if (cw + w[i] <= c) {// 搜索左⼦树43 2 1 100 30 maxint10 - {1} 初始 dist[5] dist[4] dist[3] dist[2] u S 迭代x[i] = 1;cw += w[i];backtrack(i + 1);cw -= w[i]; }if (cw + r > bestw) {x[i] = 0; // 搜索右⼦树backtrack(i + 1); }r += w[i];}5. ⽤分⽀限界法解装载问题时,对算法进⾏了⼀些改进,下⾯的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采⽤这样的⽅式,算法在执⾏上有什么不同。

算法分析作业1_简单排序算法分析讲述

算法分析作业1_简单排序算法分析讲述

排序算法复杂性分析一秦健刘鹏刘明欢我们郑重承诺,本作业的内容均为原创,没有任何抄袭他人成果的行为,也不存在他人代写作业和程序的行为。

引用他人成果或公开资料的部分都已经按照正确的格式在参考文献中标出。

作者签字得分统计摘要本文通过三种简单排序-插入、冒泡和选择排序算法并运用C++语言编程实现,以计算简单排序算法复杂度。

首先,利用不同规模下随机产生的不同序列,计算三种排序方法下的元运算-比较、交换、移动的次数来定量刻画排序算法的时间复杂度,即序列规模与元运算次数的关系,得到三种算法的时间复杂度均为Ο(n2),这说明这三种排序算法具有相同时间复杂度,并且实现简单,所以也归为一类简单排序算法。

其次,采用统一规模下的不同排列顺序,主要是两个极端序-顺序、逆序的情况下分析三种算法的时间复杂度,得到算法的最好时间复杂度为Ο(1),最坏时间复杂度为Ο(n2),反映出不同顺序的序列导致的排序算法时间复杂度的巨大差异性,并且插入、冒泡排序与选择排序之间的优劣也逐渐显现出来,主要是由于逆序对的数目导致交换次数变化的缘故。

最后,本文将作为其他排序算法的时间复杂度作为后续扩展部分,以待完善。

本文将围绕以下两个问题进行讨论分析:1)设计一个程序,程序的输入为n个(n必须要从键盘输入)0到10000的正整数(正整数可以是随机产生),输出为对这n个数进行从小到大排序后的序列。

排序方法分别使用插入排序、冒泡排序和选择排序。

2)以两个数比较、两个数交换、移动一个数为基本计算单位,测试你所编写的程序对于n=100,500,1000,2000四种输入规模的时间复杂度。

一、算法复杂度1.1算法复杂性算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。

一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。

计算机的资源,最重要的是时间和空间(即存储器)资源。

算法分析报告与设计期末

算法分析报告与设计期末

1. 下面程序段的所需要的计算时间为(2O(n ) )。

2.有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题:在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动( {1,4,8,11} )。

3. 所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。

4. 所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。

5.回溯法是指(具有限界函数的深度优先生成法)。

6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。

在任何时刻,算法只保存从根结点到当前扩展结点的路径。

如果解空间树 中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为(O(h(n)))。

7. 回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。

8. 用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。

9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。

10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:1413121110987654f[i]12 2 8 8 6 5 3 5 0 3 1 S[i] 11 10 9 8 7 6 5 4 3 2 1 i11. 用回溯法解布线问题时,求最优解的主要程序段如下。

如果布线区域划分为n m 的方格阵列,扩展每个结点需O(1)的时间,L 为最短布线路径的长度,则算法共耗时 ( O(mn) ),构造相应的最短距离需要(O(L))时间。

12. (渐进时间上限)(O (mn ))。

13. 旅行售货员问题的解空间树是(排列树)。

二、 证明题1. 一个分治法将规模为n 的问题分成k 个规模为n /m 的子问题去解。

设分解阀值n0=1,且adhoc 解规模为1的问题耗费1个单位时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析期末成绩考核标准要求:算法设计与分析考试方式为小论文形式。

下面给出了小论文的参考模型和参考题目,供大家选择。

1.小作业题目(仅供参考)(题目的难易:●简单10道题★中等11道题▲复杂10道题)●最佳浏览路线问题问题描述:某旅游区的街道呈网格状,其中东西向的街道都是旅游街,南向的街道都是林荫道。

由于游客众多,旅游街被规定为单行道。

游客在旅游街上只能从西向东走,在林荫道上既可以由南向北走,也可以从北向南走。

阿隆想到这个旅游区游玩,他的好友阿福给了他一些建议,用分值表示所有旅游街相邻两个路口之间的道路浏览的必要程度,分值从-100到100的整数,所有林荫道不打分,所有分值不可能全是负值。

阿隆可以从任一路口开始浏览,在任一路口结束浏览,请写出一个算法,帮助阿隆寻找一条最佳的浏览路线,使得这条路线的所有分值总和最大。

(算法设计与分析第二版P190—11题)●问题描述:某工业生产部门根据国家计划的安排,拟将某种高效率的5台机器,分配给所属的,A,B,C个工厂,各工厂在获得这种机器后,可以为国家盈利如图表所示,问:这5台机器如何分配给各工厂,才能使得国家盈利最大?(P190-14题)●问题描述:编写算法对输入的一个整数,判断他能否被4,7,9整除,并输出一下信息之一,能同时被4,7,9整除;能被其中两个数(要指出那两个)整除能被其中一个数(要指出哪一个)整除不能被4,7,9任一个整除。

(P118-16)●问题描述:某一印刷厂有6项加工任务,对印刷车间和装订车间所需的时间表如下图:完成每项任务都要先去印刷车间印刷,再到装订车间装订。

问咋样安排这6项加工任务的加工工序,使得加工工时最少?(P191-17)●问题描述:编写用动态规划法求组合数mC的算法(P191-19).n●问题描述:仿照分治算法中两个大数相乘的算法策略,完成求解两个n*n阶矩阵A和矩阵B的乘积的算法。

假设n=2k,要求算法的复杂性要小于O(n3).(P190-12)●问题描述:在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照5个方向前进但不能跃出方格,如图所示,人每走过一个方格必须取此方格中的数。

要求找到一条路径从低到顶的路径,使其数相加之和为最大,输出最大和的值。

(P190-14)●问题描述:N 块银币中有一块不合格,已知不合格的银币比正常的银币重,先用一天平,请利用它找不合格的银币,并且用天平的次数最少。

(P-19116)●问题描述:旅行售货员问题:某售货员要到若干城市去推销商品,已知个城市之间的路线。

她要选择一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或总旅行费)最小(P246-6)●问题描述:54张扑克牌,两个人轮流拿牌,每人每次最少取一张,最多取四张,谁那最后一张谁输。

编写模拟计算机先拿牌取且必胜的算法。

(P189-3)★题目一选课方案设计(P290)★题目二表达式相等判断(P291)★题目三决策系统(P291)★题目四数独游戏(P292)★题目五输油管道问题(P293)★题目六人机棋牌游戏类(P293)★题目七购物单(P293)★题目八数列构造(P293)★题目九另类杀人游戏(P293)★题目十最有存储问题(P294)★题目十一套汇问题(P294)▲经典算法棋盘算法(课本143页有问题详细描述)▲经典算法Hanno塔问题(课本58页有问题详细描述)▲经典算法装载问题(课本235页有问题详细描述)▲经典算法N皇后问题(课本212页有问题详细描述)▲经典算法0-1背包问题(课本270页有问题详细描述)▲经典算法布线问题问题描述:在印刷电路板将布线区域划分为n×n 个方格阵列,精确的电路布线问题要求确定连接方格a中的点到方格b中点的最短距离布线方案,在布线时电路只能沿着直线或直角布线。

▲经典算法圆排练问题问题描述:给定n个大小不等的圆,现要将这n 个圆排进一个矩形框中,且要求各个圆与矩形框的底边相切,圆排练问题要求从n个圆的所有排练中找出最小长度的圆排练。

▲经典算法:最大团问题问题描述:给定一个图G,要求G的最大团(团是指G的一个完全子图,该子图不包含在任何其他的完全子图当中。

最大团指其中包含顶点最多的团).▲经典算法:符号三角形问题问题描述:如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”。

- + + - + + +- + - - + +- - + - ++ - - -- + +- +-在一般情况下,符号三角形的第一行有n个符号, 符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。

▲流水线作业调度问题问题描述:(课本228页有详细描述)2.选题说明●经典算法要求在原来算法的基础上进行改进,使得算法时间或者空间复杂度比经典算法要优。

●如果有同学已选择了不在建议范围之内的题目也可,成绩不受影响。

●最后的总成绩根据小论文质量和题目的难易程度等决定。

3.小论文模版标题(汉诺塔递归与非递归算法研究)作者1,作者2,作者33(宁波工程学院电信学院,浙江宁波315010)摘要: 摘要内容(包括目的、方法、结果和结论四要素) 摘要又称概要,内容提要.摘要是以提供文献内容梗概为目的,不加评论和补充解释,简明,确切地记述文献重要内容的短文.其基本要素包括研究目的,方法,结果和结论.具体地讲就是研究工作的主要对象和范围,采用的手段和方法,得出的结果和重要的结论,有时也包括具有情报价值的其它重要的信息.摘要应具有独立性和自明性,并且拥有与文献同等量的主要信息,即不阅读全文,就能获得必要的信息.关键词:关键词1; 关键词2;关键词3;……(一般可选3~8个关键词,用中文表示,不用英文Title如:XIN Ming-ming , XIN Ming(1.Dept. of ****, University, City Province Zip Code, China;2.Dept. of ****, University, City Province Zip Code, China;3.Dept. of ****, University, City Province Zip Code, China)Abstract: abstract(第三人称叙述,尽量使用简单句;介绍作者工作(目的、方法、结果)用过去时,简述作者结论用一般现在时)Key words: keyword1;keyword2; keyword3;……(与中文关键词对应,字母小写(缩略词除外));正文部分用小5号宋体字,分两栏排,其中图表宽度不超过8cm.。

设置为A4页面引言的作用就是引出为什么要写这篇文章,主要有以下几个方面:(1)如果以采用新方法新理论,就要引出为什么要采用这种方法;(2)如果是为了阐明某个观点,就要引出目前观点和目前对所研究领域的现状;(3)为什么要研究“XXX”算法(为什么要研究它,背景及必要性)如:汉诺塔问题的描述:汉诺塔(Tower of Hanoi)问题又称“世界末日问题”有这样一个故事[1]。

古代有一个焚塔,塔内有3个基座A,B,C,开始时A基座上有64个盘子,盘子大小不等,大的在下,小的在上。

有一个老和尚想把这64个盘子从A座移到B座,但每次只容许移动一个盘子,且在移动过程中,3个基座上的盘子都始终保持大盘在下,f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。

此后不难证明f(n)=2n-1。

n=64时,f(64)= 2^64-1=18446744073709551615假如每秒钟一次,共需多长时间呢?一年大约有 31536926 秒,计算表明移完这些金片需要5800多亿年,比地球寿命还要长,事实上,世界、梵塔、庙宇和众生都早已经灰飞烟灭。

提示:(1)可以定义问题的规模n,如盘子的数量;(2)塔柱的数量(目前有部分理论可以支撑,不妨用计算机实现)分析规模的变化与算法的复杂度比较。

(3)可以对经典的汉诺塔问题条件放松、加宽,如在经典的汉诺塔问题中大盘只能在小盘下面,放松其他条件可以定义相邻两个盘子必须满足大盘只能在小盘下面。

其它盘子不作要求。

1 算法设计1.1 汉诺塔递归算法描述(二级标题小五黑体加粗)用人类的大脑直接去解3,4或5个盘子的汉诺塔问题还可以,但是随着盘子个数的增多,问题的规模变的越来越大。

这样的问题就难以完成,更不用说吧问题抽象成循环的机器操作。

所以类似的问题可用递归算法来求解。

下面n 个盘的汉诺塔问题可用如下递归方法实现。

如果n=1,则将圆盘从A直接移动到B。

如果n=2,则:(1)将A上的n-1(等于1)个圆盘移到C上;(2)再将A上的一个圆盘移到B上;(3)最后将C上的n-1(等于1)个圆盘移到B上。

如果n=3,则:A)将A上的n-1(等于2)个圆盘移到C(借助于B),步骤如下:(1)将A上的n-2(等于1)个圆盘移到B上。

(2)将A上的一个圆盘移到C。

(3)将B上的n-2(等于1)个圆盘移到C。

B)将A上的一个圆盘移到B。

C)将C上的n-1(等于2)个圆盘移到B(借助A),步骤如下:(1)将C上的n-2(等于1)个圆盘移到A。

(2)将C上的一个盘子移到B。

(3)将A上的n-2(等于1)个圆盘移到B。

到此,完成了三个圆盘的移动过程。

从上面分析可以看出,当n大于等于2时,移动的过程可分解为三个步骤:第一步把A上的n-1个圆盘移到C上;第二步把A上的一个圆盘移到B上;第三步把C上的n-1个圆盘移到B上;其中第一步和第三步是类同的。

算法如下:(伪码描述、自然语言描述、流程图)Main1: { int n ;2: Input(n);3: Hanoi(n,”A”,”B”,”C”) ; }4: Hanoi(n,char a,char b,char c)5: { if (n>0)6: { hanoi ( n - 1, a, c, b) ;7: printf “( %d %a - > %c \n”, n , a, c) ;8: hanoi ( n - 1,b, a, c) ;}}递归算法结构清晰,可读性强,而且很容易用数学归纳法证明算法的正确性,然而它的运行效率较低,它的时间复杂度主要在程序嵌套调用所用的时间。

T(N)=2T(N-1)+1,容易计算出T(N)=2N-1.若在程序中消除递归调用,使其转化为非递归调用算法。

通常,消除递归采用一个用户定义的栈来模拟系统的递归调用工作栈,从而达到递归改为非递归算法的目的。

1.2 汉诺塔非递归算法描述1.2.1非递归1:遍历二叉树搜索解空间(三级标题小五楷体)通过定义MAXSTACK栈,可将递归算法转化为非递归调用算法。

相关文档
最新文档