一、选择题
1、衡量一个算法好坏的标准是(  )。
(A)运行速度快    (B)占用空间少    (C)时间复杂度低 (D)代码短
2、函数的渐进表达式是(  )。
(A)O()        (B)O()      (C)O()      (D)O(
3、以下不可以使用分治法求解的是(  )。
(A)棋盘覆盖问题  (B)选择问题    (C)归并排序      (D) 0/1背包问题
4、二分搜索算法是利用(    )实现的算法。
(A)分治策略  (B)动态规划法  (C)贪心法    (D)回溯法
5、二分搜索算法的时间复杂性为(  )。
(A)O()        (B)O()      (C)O()      (D)O(
6、快速排序算法的时间复杂性为    )。
(A)O()        (B)O()      (C)O()      (D)O(
7、实现大整数的乘法是利用(    )的算法.
(A)分治策略            (B)动态规划法        (C)贪心法      (D)回溯法
8、矩阵连乘问题的算法可由(    )设计实现。
(A)分支界限算法    (B)动态规划算法  (C)贪心算法  (D)回溯算法
9实现循环赛日程表利用的算法是(    )。
(A)分治策略      (B)动态规划法    (C)贪心法        (D)回溯法
10、下列是动态规划算法基本要素的是(    ).
(A)定义最优解    (B)构造最优解      (C)算出最优解  (D)子问题重叠性质
11、最长公共子序列算法利用的算法是(    )。
(A)分治法        (B)动态规划法    (C)贪心法        (D)回溯法 
12下列算法中通常以自底向上的方式求解最优解的是(    )。
(A)备忘录法      (B)动态规划法        (C)贪心法          (D)回溯法
13、以下不可以使用分治法求解的是(    ).
(A)棋盘覆盖问题    (B)选择问题      (C)归并排序    (D)0/1背包问题
14、下列算法中不能解决0/1背包问题的是( 
(A)贪心法    (B)动态规划        (C)回溯法          (D)分支限界法
15、算法是由若干条指令组成的有穷序列,而且满足以下性质(    )
(A)输入:有0个或多个输入    (B)输出:至少有一个输出
(C)确定性:指令清晰,无歧义  (D)有限性:指令执行次数有限,而且执行时间有限
  A (1)(2)(3)    B(1)(2)(4)    C(1)(3)(4)    D (1) (2)(3)(4)
16、函数32n+10nlogn的渐进表达式是(     ).
A. 2n    B。 32n    C. nlogn   D. 10nlogn
17、能采用贪心算法求最优解的问题,一般具有的重要性质为:(    )
(A)最优子结构性质与贪心选择性质        (B)重叠子问题性质与贪心选择性质
(C)最优子结构性质与重叠子问题性质      (D)预排序与递归调用
18、回溯法在问题的解空间树中,按(    )策略,从根结点出发搜索解空间树。
(A)广度优先  (B)活结点优先    (C)扩展结点优先    (D)深度优先
19下面哪种函数是回溯法中为避免无效搜索采取的策略(    )
(A)递归函数        (B)剪枝函数          (C)随机数函数    (D)搜索函数
(A)运行速度快    (B)占用空间少    (C)时间复杂度低 (D)代码短
20、备忘录方法是那种算法的变形(    )。
21下列算法中通常以深度优先方式系统搜索问题解的是(    )。
(A)备忘录法        (B)动态规划法        (C)贪心法        (D)回溯法
22、回溯法解旅行售货员问题时的解空间树是(    )。
(A)子集树        (B)排列树        (C)深度优先生成树    (D)广度优先生成树 
23、Strassen矩阵乘法是利用(    )实现的算法。
(A)分治策略    (B)动态规划法    (C)贪心法        (D)回溯法
24.采用广度优先策略搜索的算法是(    )。
(A)分支界限法  (B)动态规划法    (C)贪心法        (D)回溯法
25、背包问题的贪心算法所需的计算时间为(   
(A) O(n2n)    (B)O(nlogn)    (C)O(2n      (D)O(n)
二、 填空题
1、程序是    算法  用某种程序设计语言的具体实现。
2、算法的“确定性”指的是组成算法的每条  指令  是清晰的,无歧义的。
3.算法是由若干条指令组成的有穷序列,且要满足输入、 输出、确定性和 有限性四条性质。merge函数
4、计算一个算法时间复杂度通常可以计算  循环次数 基本操作的频率或计算步.
5.算法的复杂性有  时间    复杂性和    空间      复杂性之分。
6从分治法的一般设计模式可以看出,用它设计出的程序一般是  递归算法  .
7。动态规划算法的两个基本要素是  最优子结构  重叠子问题 
8、问题的    最优子结构性质  是该问题可用动态规划算法或贪心算法求解的关键特征。
9  贪心选择性质  是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
10. 动态规划算法的基本思想是将待求解问题分解成若干 子问题 ,先求解 子问题 ,然后从这些  问题  得到原问题的解。
11。快速排序算法是基于  分治策略    的一种排序算法。
12.任何可用计算机求解的问题所需的时间都与其  规模  有关。
13.快速排序算法的性能取决于  划分的对称性 
14.回溯法搜索解空间树时,常用的两种剪枝函数为  约束函数   限界函数    .
15、以深度优先方式系统搜索问题解的算法称为  回溯法 
16、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是    0/1背包问题  ,只使用约束条件进行裁剪的是  N皇后问题 
三、算法填空
1、以下是计算xm的值的过程
int power ( x, m )
{//计算xm的值并返回。
y=( 1  );i=m;
while(i- - 〉0)
      y=y*x;
    return y
2、给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中出一特定元素x的二分搜索算法
template〈class Type〉
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;
3、速排序
template<class <Type>
void QuickSort (Type a[], int p, int r)
{  if (p〈r) {
        int q=Partition(a,p,r);
        QuickSort (a,p,q—1); //对左半段排序
      QuickSort (a,q+1,r); //对右半段排序
    }
}
4、快速排序中的划分函数Partition确定以基准元素a[p]对子数组a[p:r]进行划分
template〈classType〉
void Partition(Type a[],int p, int r)   
{  int i = p, j = r + 1;  Type x=a[p];
    while (true) {
        while (a[++i] <x && i<r );
        while (a[--j] >x);
        if (i 〉= j) break
        Swap(a[ i ], a[ j ]);
    }
    a[ p ] = a[ j ] ;
    a[ j ] = x
    return j;
5、合并排序描述如下:
template<class Type>
void Mergesort(Type a[ ], int left, int right)
{    if (left〈right){
int i=( left+right)/2;
Mergesort(a, left, i );  //对左半段排序
Mergesort(a, i+1, right); //对右半段排序
Merge(a,b, left,i,right);//合并到数组b
Copy(a,b, left,right ); //复制到数组a
}
}
6、函数Merge合并两个排好序的数组段到一个新的数组b中.
void Merge(Type c[],Type d[], int l, int m, int r)   
{  int i=l, j=m+1, k=l;
    while (( i<=m )&& (j<=r)
        if (c[i]<=c[j]) d[k++]=c[i++]
        else d[k++]=c[j++]
    if (i〉m) for(int q=j; q〈=r; q++) d[k++]=c[q];
    else    for(int q=i; q<=m; q++) d[k++]=c[q];
}
7、计算最长公共子序列的算法如下:
void LCSLength (int m, int n, char *x,char *y,int c,int **b)
{    int i,j;
  for (i = 1; i 〈= m; i++) c[i][0];

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。