第一范文网 - 专业文章范例文档资料分享平台

算法设计与分析复习题目及答案

来源:用户分享 时间:2025/5/29 6:05:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

m[1][c]=m[2][c]; if(c>=w[1])

m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]); }

(3)回溯法 O(2n)

cw:当前重量 cp:当前价值 bestp:当前最优值 voidbacktrack(inti) 包问题的贪心算法

void Knapsack(int n,float M,float v[],float w[],float x[]) {

Sort(n,v,w); int i;

for (i=1;i<=n;i++) x[i]=0; float c=M;

for (i=1;i<=n;i++) { if (w[i]>c) break; x[i]=1; c - =w[i]; }

if (i<=n) x[i]=c/w[i]; }

2.最大子段和: 动态规划算法 int MaxSum(int n, int a[]) {

int sum=0, b=0; 速排序 template

void QuickSort (Type a[], int p, int r) {

if (p

int q=Partition(a,p,r); QuickSort (a,p,q-1); 列问题 Template

void perm(Type list[], int k, int m )

{ 定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 据此容易设计出二分搜索算法: template

int BinarySearch(Type a[], const Type& x, int l, int r) {

while (l<=r ){ int m = ((l+r)/2); if (x == a[m]) return m;

if (x < a[m]) r = m-1; else l = m+1; } return -1; }

6、合并排序描述如下: template

void Mergesort(Type a[ ], int left, int right) {

if (left

int i=( left+right)/2; Mergesort(a, left, i ); Mergesort(a, i+1, right);

Merge(a,b, left,i,right);计算机求解问题的步骤:

1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制 2. 算法定义:

算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程 3.算法的三要素

1、操作2、控制结构3、数据结构

13. 分治法与动态规划法的相同点是:

将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原

问题的解。

两者的不同点是:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。而用分治法求解的问题,经分解得到的子问题往往是互相独立的。

回溯法中常见的两类典型的解空间树是子集树和排列树。 22.请叙述动态规划算法与贪心算法的异同。

共同点:都需要最优子结构性质,都用来求有优化问题。 不同点:

动态规划:每一步作一个选择—依赖于子问题的解。 贪心方法:每一步作一个选择—不依赖于子问题的解。

动态规划方法的条件:子问题的重叠性质。

可用贪心方法的条件:最优子结构性质;贪心选择性质。

动态规划:自底向上求解;贪心方法: 自顶向下求解。可用贪心法时,动态规划方法可能不适用;可用动态规划方法时,贪心法可能不适用。

23. 请说明动态规划方法为什么需要最优子结构性质。

答:最优子结构性质是指大问题的最优解包含子问题的最优解。

动态规划方法是自底向上计算各个子问题的最优解,即先计算子问题的最优解,然后再利用子问题的最优解构造大问题的最优解,因此需要最优子结构. 24. 请说明:

(1)优先队列可用什么数据结构实现 (2)优先队列插入算法基本思想 (3)优先队列插入算法时间复杂度 答:(1)堆。

(2)在小根堆中,将元素x插入到堆的末尾,

然后将元素x的关键字与其双亲的关键字比较, 若元素x的关键字小于其双亲的关键字,

则将元素x与其双亲交换,然后再将元素x与其新双亲的关键字相比,直到元素x的关键字大于双亲的关键字,或元素x到根为止。

(3)O( log n)

26. 在算法复杂性分析中,O、Ω、Θ这三个记号的意义是什么在忽略常数因子的情况 下,O、Ω、Θ分别提供了算法运行时间的什么界

答:

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

O(g(N))。这时我们说f(N)的阶不高于g(N)的阶。

若存在两个正常数C和自然数N0,使得当N ≥ N0时有|f(N)|≥C|g(N)|,记为

f(N)=(g(N))。这时我们说f(N)的阶不低于g(N)的阶。

如果存在正常数c1,c2和n0,对于所有的n≥n0,有c1|g(N)| ≤|f(N)| ≤ c2|g(N)| 则记作 f(N)= (g,(N)

O、Ω、Θ分别提供了算法运行时间的上界、下界、平均 五、算法设计与分析题

1.用动态规划策略求解最长公共子序列问题: (1)给出计算最优值的递归方程。

(2)给定两个序列X={B,C,D,A},Y={A,B,C,B},请采用动态规划策略求出其最长公

共子序列,要求给出过程。

答:1

(2)

Y A B C B X 0 0 0 0 B 0 0 1 1 1 C 0 0 1 2 2 D 0 0 1 2 2 A 0 1 1 2 2 最长公共子序列:{BC}

2.对下列各组函数f (n) 和g (n),确定f (n) = O (g (n)) 或f (n) =Ω(g (n))或

f(n) =θ(g(n)),并简要说明理由。

(1) f(n)=2; g(n)=n! (2) f(n)=n; g (n)=log n2 (3) f(n)=100; g(n)=log100 (4) f(n)=n3; g(n)= 3n (5) f(n)=3n; g(n)=2n 答:

n

?

搜索更多关于: 算法设计与分析复习题目及答案 的文档
算法设计与分析复习题目及答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4liwa702r26tck19hpxv8jj329nz0t003q2_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top