算法分析与设计课设题目

合集下载

算法分析与设计教案

算法分析与设计教案

算法分析与设计课程教案课程编号:50c24037-01总学时:51 周学时:4适用年级专业(学科类):2007级计科专业开课时间:2010-2011 学年第1 学期使用教材:王晓东编著计算机算法设计与分析第3版章节第1章1.1~ 1.2 第2 章2.1 课时 2教学目的理解程序与算法的概念、区别与联系;掌握算法在最坏情况、最好情况和平均情况下的计算复杂性概念;掌握算法复杂性的渐近性态的数学表述;理解递归的概念。

教学重点及突出方法重点:程序与算法的概念、算法的时间复杂性、算法复杂性的渐近性态的数学表述以及递归的概念。

通过讲解、举例方法。

教学难点及突破方法难点:算法复杂性与递归通过讲解、举例、提问与引导方法。

相关内容此部分内容基础知识可参考清华大学出版社出版严蔚敏编著的《数据结构》教学过程(教师授课思路、设问及讲解要点)回顾数据结构课程中的算法概念、排序算法等知识,从而引出本课程内容。

提问算法与程序的区别、联系以及算法具有的特性。

讲解算法的复杂性,主要包括时间复杂性与空间复杂性。

讲解最坏情况、最好情况与平均情况的时间复杂性。

讲解算法复杂性在渐近意义下的阶,主要包括O、Ω、θ与o,并通过具体例子说明。

通过具体例子说明递归技术。

主要包括阶乘函数、Fibonacci数列、Ackerman函数、排列问题、整数划分问题、Hanoi塔问题等。

第页章节第2 章2.2~2.5 课时 2 教学目的掌握设计有效算法的分治策略,并掌握范例的设计技巧,掌握计算算法复杂性方法。

教学重点及突出方法重点:分治法的基本思想及分治法的一般设计模式。

通过讲解、举例方法。

教学难点及突破方法难点:计算算法复杂性。

通过讲解、举例、提问与引导方法。

相关内容素材教(教师授课思路、设问及讲解要点)学过程通过生活中解决复杂问题的分解方法,引出分治方法。

讲解分治法的基本思想及其一般算法的设计模式,介绍分治法的计算效率。

通过具体例子采用分治思想来设计有效算法。

算法分析与设计重点课后习题答案

算法分析与设计重点课后习题答案

习题13.设计算法求数组中相差最小的两个元素(称为最接近数)的差。

要求分别给出伪代码和C++描述。

//采用分治法//对数组先进行快速排序//在依次比较相邻的差#include <iostream>using namespace std;int partions(int b[],int low,int high){int prvotkey=b[low];b[0]=b[low];while (low<high){while (low<high&&b[high]>=prvotkey)--high;b[low]=b[high];while (low<high&&b[low]<=prvotkey)++low;b[high]=b[low];}b[low]=b[0];return low;}void qsort(int l[],int low,int high){int prvotloc;if(low<high){prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴qsort(l,low,prvotloc-1); //递归调用排序由low 到prvotloc-1qsort(l,prvotloc+1,high); //递归调用排序由 prvotloc+1到 high}}void quicksort(int l[],int n){qsort(l,1,n); //第一个作为枢轴,从第一个排到第n个}int main(){int a[11]={0,2,32,43,23,45,36,57,14,27,39};int value=0;//将最小差的值赋值给valuefor (int b=1;b<11;b++)cout<<a[b]<<' ';cout<<endl;quicksort(a,11);for(int i=0;i!=9;++i){if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) )value=a[i+1]-a[i];elsevalue=a[i+2]-a[i+1];}cout<<value<<endl;return 0;}4.设数组a[n]中的元素均不相等,设计算法找出a[n]中一个既不是最大也不是最小的元素,并说明最坏情况下的比较次数。

北京大学算法设计方案与分析课期末试题

北京大学算法设计方案与分析课期末试题

北京大学信息科学技术学院考试试卷考试科目:算法设计与分析姓名: 学号: 考试时间:2009年6月9日任课教师:以下为试卷和答题纸,共 9页。

一、填空题(选做5道,10分>1. 用矩阵幂的方法求斐波那契数,其运行时间为<)。

2.对于一个可以用动态规划法求解的问题,要求问题既要满足<)的特性,又要具有大量的< )。

3.对于一个可以用贪心法求解的问题,不仅要求问题满足<)的特性,还应证明其贪心策略的< )。

4.设有n个栈操作<PUSH、POP、MULTIPOP )的序列,作用于初始为空的栈S。

不区分三种操作,则每个操作的最坏运行时间为<),平摊运行时间为<)。

5.三种平摊分析的方法分别为<)、<)、<)。

6.四后问题的搜索空间为<)树;0-1背包问题的搜索空间为<)树;巡回售货员问题的搜索空间为<)树。

7.<)法的求解目标是找出解空间树中满足约束条件的所有解,而<)法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

8.回溯法一般以<)优先的方式搜索解空间树,而分支限界法则一般以<)优先或以最小耗费优先的方式搜索解空间树。

二、单项选择题 (10分> Array1.下列关于排序算法的叙述,不正确的是?<)A> 堆排序的最差情形运行时间为Θ(n lg n>B> 快速排序平均情形运行时间为Θ(n lg n>C> 任何排序算法的最差情形运行时间都不可能比Ω(n lg n>更小D> 插入排序在最好情形下的运行时间为Θ(n>2.对于课堂讲解的线性时间内找第i小的元素的算法,<)下列叙述中不正确的是?A> 算法第一步中可以按每五个元素一组找中位数;B> 算法第一步中可以按每七个元素一组找中位数;B> 算法第一步中不能按每三个元素一组找中位数;D> 如果要求的n个元素的中位数,则中位数一定是第一步中找到的中位数中的某一个。

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法及其分析》课后选择题答案及详解第1 章——概论1.下列关于算法的说法中正确的有()。

Ⅰ.求解某一类问题的算法是唯一的Ⅱ.算法必须在有限步操作之后停止Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产生确定的结果A.1个B.2个C.3个D.4个2.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是()。

A.T(n)=T(n-1)+1,T(1)=1B.T(n)=2nC.T(n)= T(n/2)+1,T(1)=1D.T(n)=3nlog2n答案解析:1.答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是唯一的。

答案为C。

2.答:选项A的时间复杂度为O(n)。

选项B的时间复杂度为O(n)。

选项C 的时间复杂度为O(log2n)。

选项D的时间复杂度为O(nlog2n)。

答案为C。

第3 章─分治法1.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

这要求原问题和子问题()。

A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同2.在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。

A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同3.对于下列二分查找算法,以下正确的是()。

A.intbinarySearch(inta[],intn,int x){intlow=0,high=n-1;while(low<=high){intmid=(low+high)/2;if(x==a[mid])returnmid;if(x>a[mid])low=mid;elsehigh=mid;}return –1;}B.intbinarySearch(inta[],intn,int x) { intlow=0,high=n-1;while(low+1!=high){intmid=(low+high)/2;if(x>=a[mid])low=mid;elsehigh=mid;}if(x==a[low])returnlow;elsereturn –1;}C.intbinarySearch(inta[],intn,intx) { intlow=0,high=n-1;while(low<high-1){intmid=(low+high)/2;if(x<a[mid])high=mid;elselow=mid;}if(x==a[low])returnlow;elsereturn –1;}D.intbinarySearch(inta[],intn,int x) {if(n>0&&x>=a[0]){intlow= 0,high=n-1;while(low<high){intmid=(low+high+1)/2;if(x<a[mid])high=mid-1;elselow=mid;}if(x==a[low])returnlow;}return –1;}答案解析:1.答:C。

《计算机算法设计与分析》课程设计

《计算机算法设计与分析》课程设计

《计算机算法设计与分析》课程设计用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题一、课程设计目的:《计算机算法设计与分析》这门课程是一门实践性非常强的课程,要求我们能够将所学的算法应用到实际中,灵活解决实际问题。

通过这次课程设计,能够培养我们独立思考、综合分析与动手的能力,并能加深对课堂所学理论和概念的理解,可以训练我们算法设计的思维和培养算法的分析能力。

二、课程设计内容:1、分治法:(2)快速排序;2、动态规划:(4)最优二叉搜索树;3、回溯法:(2)图的着色。

三、概要设计:分治法—快速排序:分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。

递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。

分治法的条件:(1) 该问题的规模缩小到一定的程度就可以容易地解决;(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3) 利用该问题分解出的子问题的解可以合并为该问题的解;(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

抽象的讲,分治法有两个重要步骤:(1)将问题拆开;(2)将答案合并;动态规划—最优二叉搜索树:动态规划的基本思想是将问题分解为若干个小问题,解子问题,然后从子问题得到原问题的解。

设计动态规划法的步骤:(1)找出最优解的性质,并刻画其结构特征;(2)递归地定义最优值(写出动态规划方程);(3)以自底向上的方式计算出最优值;(4)根据计算最优值时得到的信息,构造一个最优解。

●回溯法—图的着色回溯法的基本思想是确定了解空间的组织结构后,回溯法就是从开始节点(根结点)出发,以深度优先的方式搜索整个解空间。

这个开始节点就成为一个活结点,同时也成为当前的扩展结点。

在当前的扩展结点处,搜索向纵深方向移至一个新结点。

这个新结点就成为一个新的或节点,并成为当前扩展结点。

29.1算法设计与分析课程期末试卷-a卷(自测 ) (2)(1)

29.1算法设计与分析课程期末试卷-a卷(自测 ) (2)(1)

华南农业大学期末考试试卷(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.20log2n C.2n2 D.3nlog3n3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。

A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨牌的个数是。

A.(4k– 1)/3 B.2k /3 C.4k D.2k5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。

A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同6.有9个村庄,其坐标位置如下表所示:现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。

A.(4.5,0)B.(4.5,4.5)C.(5,5)D.(5,0)7.n个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水,水流恒定。

如下说法不正确?A.让水桶大的人先打水,可以使得每个人排队时间之和最小B.让水桶小的人先打水,可以使得每个人排队时间之和最小C.让水桶小的人先打水,在某个确定的时间t内,可以让尽可能多的人打上水D.若要在尽可能短的时间内,n个人都打完水,按照什么顺序其实都一样8.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

北航计算机研究生课程-算法设计与分析-HomeWork-1

北航计算机研究生课程-算法设计与分析-HomeWork-1

北航计算机研究生课程-算法设计与分析-HomeWork-1一、已知下列递推式:C(n) = 1 若n =1= 2C (n/2) + n – 1 若n ≥ 2请由定理1 导出C(n)的非递归表达式并指出其渐进复杂性。

定理1:设a,c 为非负整数,b,d,x 为非负常数,并对于某个非负整数k, 令n=c k , 则以下递推式f(n) =d 若 n=1=af(n/c)+bn x 若 n>=2的解是f(n)= bn x log c n + dn x 若 a=c x f(n)= x x xa x xn c a bc n c a bc d c ???? ??--???? ??-+log若a ≠c x解:令F(n) = C(n) – 1则 F(n) = 0 n=1F(n) = 2C(n/2) + n – 2 n>=2= 2[F(n/2) + 1] + n – 2= 2F(n/2) + n利用定理1,其中:d=0,a=2,c=2,b=1,x=1,并且a=c x所以 F(n) = nlog 2n所以 C(n) = F(n) + 1 = nlog 2n + 1C(n)的渐进复杂性是O(nlog 2n)二、由于Prim 算法和Kruskal 算法设计思路的不同,导致了其对不同问题实例的效率对比关系的不同。

请简要论述:1、如何将两种算法集成,以适应问题的不同实例输入;2、你如何评价这一集成的意义?答:1、Prim 算法基于顶点进行搜索,所以适合顶点少边多的情况。

Kruskal 从边集合中进行搜索,所以适合边少的情况。

根据输入的图中的顶点和边的情况,边少的选用kruskal 算法,顶点少的选用prim 算法2、没有一个算法是万能的,没有一个算法是对所有情况都适合的。

这一集成体现了针对具体问题选用最适合的方法,即具体问题具体分析的哲学思想。

三、分析以下生成排列算法的正确性和时间效率:HeapPermute (n )//实现生成排列的Heap 算法//输入:一个正正整数n和一个全局数组A[1..n]//输出:A中元素的全排列if n = 1write Aelsefor i ←1 to n doHeapPermute(n-1)if n is oddswap A[1]and A[n]else swap A[i]and A[n]解:n=1时,输出a1n=2时,输出a1a2,a2a1n=3时,(1)第一次循环i=1时,HeapPermute(2)将a1a2做完全排列输出,记为[a1a2]a3,并将A变为a2a1a3,并交换1,3位,得a3a1a2(2)第二次循环i=2时,HeapPermute(2)输出[a3a1]a2,并将A 变为a1a3a2,交换1,3位,得a2a3a1(3)第三次循环i=3时,HeapPermute(2)输出[a2a3]a1,并将A 变为a3a2a1,交换1,3位,得a1a2a3,即全部输出完毕后数组A回到初始顺序。

算法设计与分析-课后习题集答案

算法设计与分析-课后习题集答案
10.(1)当 时, ,所以,可选 , 。对于 , ,所以, 。
(2)当 时, ,所以,可选 , 。对于 , ,所以, 。
(3)由(1)、(2)可知,取 , , ,当 时,有 ,所以 。
11. (1)当 时, ,所以 , 。可选 , 。对于 , ,即 。
(2)当 时, ,所以 , 。可选 , 。对于 , ,即 。
(3)因为 , 。当 时, , 。所以,可选 , ,对于 , ,即 。
第二章
2-17.证明:设 ,则 。
当 时, 。所以, 。
第五章
5-4.SolutionType DandC1(int left,int right)
{while(!Small(left,right)&&left<right)
{int m=Divide(left,right);
所以n-1<=m<=n (n-1)/2;
O(n)<=m<=O(n2);
克鲁斯卡尔对边数较少的带权图有较高的效率,而 ,此图边数较多,接近完全图,故选用普里姆算法。
10.
T仍是新图的最小代价生成树。
证明:假设T不是新图的最小代价生成树,T’是新图的最小代价生成树,那么cost(T’)<cost(T)。有cost(T’)-c(n-1)<cost(t)-c(n-1),即在原图中存在一颗生成树,其代价小于T的代价,这与题设中T是原图的最小代价生成树矛盾。所以假设不成立。证毕。
13.template <class T>
select (T&x,int k)
{
if(m>n) swap(m,n);
if(m+n<k||k<=0) {cout<<"Out Of Bounds"; return false;}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析课程设计题目
以下任选一题,另请谨慎选择第六题。

12月27日需告知选题。

一、使用C、C++、C#或JAVA语言设计相关算法并编写一个完整的程
序,计算任意两个整数a,b的最大公因数,其中0≤a,b≤10100。

(禁止网上下载大数类实现!)
二、使用C、C++、C#或JAVA语言设计相关算法并编写一个简单的模
拟象棋程序。

三、宝石游戏:宝石游戏比较有趣,它在13X6的格子里进行。

游戏给
出红色、蓝色、黄色、橘黄色、绿色、和柴色的宝石。

当任何三
个以上宝石具有相同颜色并且在一条直线(横竖斜)时,这些宝石可以消去。

游戏如图所示。

现在给定当前游戏状态和一组新的石头,请编程计算当所有石头落下时游戏的状态。

提示:
输入:
第一行n表示n 组测试数据。

下面每一个测试数据包含一个13X6的字符表,其中B表示蓝色,R表示红色,O表示橘黄色、Y表示黄色,G表示绿色,P表示紫色,W表示此处没有宝石。

接下来三行,每行包含一个字符,表示新来的宝石下落的位置。

输出:
每一个测试样例,输出当所有宝石落下后游戏的状态。

样例输入:
1
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
BBWWWW
BBWWWW
OOWWWW
B
B
Y
3
样例输出:
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
WWWWWW
OOYWWW
四、现有一公式:X a mod b = c. 对于给出a,b,c,编写算法求出所有满
足条件的X。

提示:
输入:
输入包括多组数据,每组数据三个正整数1<=a,b,c<=109,b总是质数。

输出:
每组数据输出若干行,每一行代表了满足方程的一个X的解,解的顺序按照从小到大输出,最后输出一个空行。

没有解输出“No Solution!”
样例输入:
样例输出:
2
5
6
No Solution!
五、海军演习(提示:动态规划算法)
哪怕在和平的年代,许多国家也会举行演习来保持军队的警惕性。

某个国家也发动了一次虚拟的海军战役。

在演习阶段,海军上将打算评估两个战舰的战斗力,“胜利号”和“荣誉号”,所以他让两个战舰进行打击练习。

两艘战舰的指挥官都是年轻有前途的青年,都以出色的成绩毕业于海军学院。

他们不仅有丰富的导航经验,也掌握了很深的科学知识,特别是数学方面的。

这位海军上将指定了一个有许多星罗棋布的小岛的区域。

假设这些小岛都被敌方占领,而且敌方的火力点存在优势。

虚拟情景和比赛的要求如下:
(1) 所有被占领的小岛都是互相连接的。

岛屿之间有若干路线,但这些路线都是单向的。

换句话说,如果我们把每个小岛看作结点,每条路线当作边,则可以得到一个有向无环图。

(2)图中有且仅有一个一号岛屿。

就是说我们从这个岛屿出发就能抵达任何其他小岛。

(当然,一号岛屿并不一定是序号为一的岛屿)。

(3)演习开始时,两艘战舰同时到达一号岛屿然后一同消灭所有的敌方火力点。

(4)这两艘战舰轮流导航并且每到达一个岛屿就交换导航权再一起航行。

每次它们只能沿着一条单向路线驶向下一个岛屿,然后消灭岛屿上的所有敌对火力点。

注意,“胜利号”首先从一号岛屿开始导航。

(5)因为每条路线都是单向的,而且这是一个有向无环图,因此总有战舰无法继续导航的时候,此时演习终止。

(6)演习终止后,计算沿途消灭的火力点数目,如果这个数目大于某个上将指定的数目f则“胜利号”获胜,否则“荣誉号”获胜。

战舰的指挥官都是优秀的数学家。

接到任务后,他们把其视为图论问题。

在一张图上画出结点和边,每个结点有一个正数,两人轮流沿着一定的路线移动,直到无法移动为止。

计算这条路线上所有数字的和并和上将指定的f比较,决定最后的输赢。

在此,我们认为两人总是做出对自己最有利的选择。

输入:
输入多组测试样例,每个样例第一行有三个数字n,m,f。

n表示图中有
n(1<n<10000)个结点。

分别编号1到n。

m表示图中有m条边。

接下来一行有n个正数,依次表示每个结点中的火力点数目。

最后m行,每行两个整数a,b表示在a
和b结点中有一条路线。

输入以EOF终结。

输出:
对于每个测试样例,如果“胜利号”获胜则输出"Victory",如果“荣誉号”获胜则输出"Glory"。

每个输出占一行。

样例输入:
4 2
2 1
4 3
3 1
4 5 6
1 2 3 4
1 2
1 3
1 4
2 3
4 3
样例输出:
Glory
Victory
六、若部分同学做以上五题均有难度,经指导老师同意可实现教材上任
意三个经典算法。

以上题目总体要求及说明:
1、建议数据输入输出采用文件方式;
2、程序中要有注释;
3、程序中所有算法均要给出算法分析,特别是时间复杂性;
4、提交程序源代码及算法设计分析测试文档;
5、按参考格式撰写程序算法报告及测试报告;
6、30号起接受检查;
7、提交格式(程序及文档打包):学号姓名.rar。

相关文档
最新文档