❶ 《算法设计与分析》。求大神帮帮忙。选择题
这个看上去就是普通的数学题吧,因为x(1)=0,根据条件可知x(2)=5,所以只有选项D符合题意。另外感觉这个题和算法没有太大关系。。。
❷ 算法分析与设计题目
第一题用贪心思想 找出用时最短的m个作业交给机器同时开始加工 然后再依次将剩下的作业中最短完成作业取出放入已完成的机器加工 当最后一台机器完工时间就是所用最短时间 思路是这样子 具体算法实现的话。。由于我也是学生=、=写代码还不是很熟练。。可能等我写好了你考试来不及。。。你还是自己来吧
第二题
1.背包问题是什么=、=我们教材不一样 不了解具体问题。。
2.4皇后
#include<iostream.h>
const int n = 4 ;
const int n_sub = n - 1 ;
int queen[n] ;
bool row[n] ;
bool passive[2*n-1];
bool negative[2*n-1];
int main()
{
int cur = 0 ;
bool flag = false ;
queen[0] = -1 ;
int count = 0 ;
while(cur>=0)
{
while(cur>=0 && queen[cur]<n && !flag)
{
queen[cur]++ ;
if(queen[cur] >= n)
{
queen[cur] = -1 ;
cur-- ;
if(cur>=0)
{
row[queen[cur]] = false ;
passive[queen[cur] + cur] = false ;
negative[n_sub + cur - queen[cur]] = false ;
}
false ;
}
else
{
if(row[queen[cur]] == false)
{
flag = true ;
if( passive[queen[cur] + cur] == true || negative[n_sub + cur - queen[cur]] == true) {
flag = false ;
}
else
flag = true ;
if(flag) {
if(cur == n-1)
{
count++ ;
}
row[queen[cur]] = true ;
passive[queen[cur] + cur] = true ;
negative[n_sub + cur - queen[cur]] = true ;
cur++ ;
if(cur >= n) {
cur-- ;
row[queen[cur]] = false ;
passive[queen[cur] + cur] = false ;
negative[n_sub + cur - queen[cur]] = false ;
}
flag = false ;
}
}
}
}
}
cout<<n<<"皇后问题一共有"<<count<<"种解法"<<endl ;
return 0 ;
}
这个是代码。。。状态空间树这里画不出来。。。
第三题
你网络下基本都有的=、=。。。我网络出来不好意思贴了你自己去看下吧
比如1.的答案:
最坏情况给出了算法执行时间的上界,我们可以确信,无论给什么输入,算法的执行时间都不会超过这个上界,这样为比较和分析提供了便利。
❸ 请高手进来解答一下这道算法设计与分析的题目,谢谢了!!
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区间[si,fi)内占用资源。若区间[si,fi)与区间[sj,fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
在下面所给出的解活动安排问题的贪心算法greedySelector:
publicstaticintgreedySelector(int[]s,int[]f,booleana[])
{
intn=s.length-1;
a[1]=true;
intj=1;
intcount=1;
for(inti=2;i<=n;i++){
if(s[i]>=f[j]){
a[i]=true;
j=i;
count++;
}
elsea[i]=false;
}
returncount;
}
由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。
例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下:
i 1 2 3 4 5 6 7 8 9 10 11
S[i] 1 3 0 5 3 5 6 8 8 2 12
f[i] 4 5 6 7 8 9 10 11 12 13 14
❹ 算法设计与分析的题目,求高手啊
如何选择排序、矩阵相乘、树和图算法的时间复杂性计量单位?
排序:排序的循环次数(或递归次数)。
矩阵相乘:做实数乘法的次数。
树:搜索的次数。
图:同树。
算法有几种基本结构?各种结构的时间复杂度的计算规则?
3种
顺序结构:T(n)=O(c)
选择结构:T(n)=O(c)
循环结构:T(n)=O(n)
最坏情况下的时间复杂性和平均情况下的时间复杂性的定义?
在规模n的全部输入中,可以找寻执行一个算法所需的最大时间资源的量,这个量称为对规模n的输入,算法的最坏情况时间复杂性。
对规模都为n的一些有限输入集,执行算法所需的平均时间资源的量称为平均情况下的时间复杂性。
为什么选择时间复杂度的渐进性态评价算法?
因为在规模较小的时候无法客观体现一个算法的效率。
解释f(n)=O(g(n))的意义。
若f(n)和g(n)是定义在正整数集合上的 两个函数,则f(n)=O(g(n))表示存在正的常数C和n0 ,使得当n≥n0时满足0≤f(n)≤C*g(n)。
简述之就是这两个函数当整型自变量n趋向于无穷大时,两者的比值是一个不等于0的常数。
有效算法和无效算法的划分原则?
区分在于问题是否能够精确求解。
用分治法设计算法有什么好处?为什么描述分治算法需要使用递归技术?
分治法可以将问题分为许规模更小的子问题,这些子问题相互独立且与原问题相同。使用递归技术,虽然一些简单的循环结构替代之,但是复杂的问题,比如二阶递归是无法替代的。
归并排序算法和快速排序算法划分子问题和合并子问题的解的方法各是是怎样的?
归并排序算法:
划分子问题:每次分成2个大小大致相同的子集和
合并子问题:将2个排好序的子数组合并为一个数组
快速排序算法:对输入的子数组a[p:r]
划分子问题:划分为a[p:q-1],a[q]和a[q+1:r]使a[p:q-1]任意元素小于a[q],a[q+1:r] 任意元素大于a[q]
合并子问题:不需要(因为划分过程就已经排序完成了)
简述二分检索(折半查找)算法为什么比顺序查找的效率高?
对于二分搜索 最坏情况为O(logn)时间完成
而顺序查找 需要O(n)次比较
显然二分搜索效率高
贪心法的核心是什么?
贪心算法是通过一系列选择得到问题的解,它所作出的选择都是当前状态下的最佳选择。
背包问题的目标函数是什么?背包问题贪心算法的最优量度是什么?算法是否获得最优解? 用贪心算法解0/1背包问题是否可获得最优解?
Max=∑Vi*Xi (V是价值X取1,0表示装入或不装)
每次选取单位重量价值最高的
不一定是最优解
情况不妙啊 LZ还要继续否。。。
早知发邮件了。。。