mooc数据结构与算法_19期末答案(慕课2023课后作业答案)

编辑出版题库2024-05-19 08:48:3056052抢沙发
mooc数据结构与算法_19期末答案(慕课2023课后作业答案)摘要: 第一章 绪论绪论测验1、下面 )术语与数据的存储结构无关A、顺序表B、链表C、队列D、顺序队列2、算法分析的目的是 )A、找出数据结构的合理性B、研究算法的输入与输出的关系C、分析算法的效率以求改进D ...

mooc数据结构与算法_19期末答案(慕课2023课后作业答案)

第一章 绪论

绪论测验

1、数据算法下面( )术语与数据的结构存储结构无关
A、顺序表
B、期末链表
C、答案答案队列
D、慕课顺序队列

2、课后算法分析的作业目的是( )
A、找出数据结构的数据算法合理性
B、研究算法的结构输入与输出的关系
C、分析算法的期末效率以求改进
D、分析算法的答案答案易懂性和文档性

3、下面程序段的慕课时间复杂度是( ) for(i=0;i<n;i++) for(j=0;j<m;j++) A[i][j]=0;
A、O(n*m)
B、课后O(n)
C、作业O(m)
D、数据算法O(n+m)

4、下面程序段的时间复杂度是( ) i=s=0; while(s<n) { i++; s+=i; }
A、O(n)
B、O(s)
C、O(sqrt(n)) 注释:sqrt(n)表示对n开方
D、O(n^2) 注释:n^2表示求n的平方

5、下面程序段的时间复杂度是( ) i=1; while(i<=n) i=i*3;
A、O(n)
B、O(3*n)
C、O(n^3)
D、O(logn)

6、数据的关系有逻辑关系和存储关系。其中逻辑关系是进行算法分析和设计需要考虑与使用的,而存储关系是编程实现的时候需要考虑的,逻辑关系和存储关系之间并没有关系

7、下面的递归函数时间复杂度是O(1) int fact(int n) { if(n<=1)return 1; else return n*fact(n-1); }

8、算法和程序都不能无穷的,否则会进入死循环

9、数据包含数据对象,数据对象包含数据元素,数据元素包含数据项。

10、算法可以用不同的语言描述,比如C或者java,所以算法实际上就是程序。

第二章2.1 线性表 (本章内容比较多,需要2周的学习时间)

线性表测验

1、双向链表中有2个指针域pre和next,分别指向直接前驱和直接后继,假设有指针p指向链表中的一个结点,指针q指向一个待插入的结点,现在要求在p的前面插入q所指结点,则正确的插入语句为( )
A、p->pre=q;q->next=p;p->pre->next=q;q->pre=p->pre;
B、q->pre=p->pre;p->pre->next=q;q->next=p;p->pre=q->next;
C、q->next=p;p->next=q;p->pre->next=q;q->next=p;
D、p->pre->next=q; q->next=p; q->pre=p->pre;p->pre=q;

2、在一个具有n个链结点的线性链表中,按数据内容查找某一个结点,如果查找成功,需要平均比较( )个结点。
A、n
B、n/2
C、(n+1)/2
D、(n-1)/2

3、假设按照行优先存储整数数组A[9][8],第一个元素a11的首字节地址是100,每个整数占4个字节,则元素a32的存储地址是( ) 提示:数组大小是9行8列,第一个位置是1,不是0
A、164
B、168
C、144
D、172

4、一个栈的入栈序列是a,b,c,d,e,则不可能的出栈输出序列是( )
A、edcba
B、decba
C、dceab
D、abcde

5、当对一个线性表经常进行存取而很少进行插入,删除操作时,采用( )存储结构最节省时间;如果经常进行插入,删除操作时,则采用( )存储结构最节省时间。
A、顺序,顺序
B、顺序,链式
C、链式,链式
D、链式,顺序

6、设顺序表L是一个非递减的有序表,下面的哪个算法,能够将元素x插入L中,并使L仍然有序。
A、//L是顺序存储结构 void insert(list *L,elemtype x) { int i=1; while(i<=L->length) { if(x>L->data[i])i++; else L->data[i]=x; } }
B、//L是顺序存储结构 void insert(list *L,elemtype x) { int i=L->length; while(i>=1) { if(x<L->data[i]){ L->data[i+1]=L->data[i];--i;} else { L->data[i]=x;break;} } L->length+=1; }
C、//L是顺序存储结构 void insert(list *L,elemtype x) { int i=1; while(i<=L->length) { if(x>L->data[i]){ L->data[i+1]=L->data[i];i++;} else { L->data[i]=x;break;} } }
D、//L是顺序存储结构 void insert(list *L,elemtype x) { int i=L->length; while(i>=1) { if(x<L->data[i]){ L->data[i+1]=L->data[i];--i;} L->data[i]=x; } }

7、已知数据3,4,-2,0,8存储在顺序存储结构中,编程实现删除x的操作为( ) 提示:数据从顺序存储结构的第0个位置开始存储
A、void del(SqList L,elemtype x) { int i=0; while(i<L.length) { if(x==L.data[i])L.data[i]=0; i++; } }
B、void del(SqList L,elemtype x) { int i=0; while(i<L.length) { if(x==L.data[i])L.data[i]=-1; i++; } }
C、void del(SqList L,elemtype x) { int i=L.length; while(i>0 ) { if(x!=L.data[i])L.data[i-1]=L.data[i]; i--; } }
D、void del(SqList L,elemtype x) { int i=0,bfind=0; while(i<L.length-1) { if(bfind==0 && x==L.data[i])bfind=1; if(bfind){ L.data[i]=L.data[i+1];} i++; } }

8、已知不带头结点的单链表L,下面用函数实现的在第一个元素前面插入值为x的元素结点的算法错误的是( )
A、void insert(List *L,elemtype x) { ptr p=*L; node d=new node(x); ptr q=&d; q->next=p; L=&q; }
B、List * insert(List *L,elemtype x) { ptr p=*L; node d=new node(x); ptr q=&d; q->next=p; L=&q; return L; }
C、void insert(List *L,elemtype x) { ptr p=*L; node d=new node(x); ptr q=&d; p->next=q; L=&q; }
D、List * insert(List *L,elemtype x) { ptr p=*L; node d=new node(x); ptr q=&d; q->next=p; return &q; }

9、下面程序段的输出结果是( ) void main() { Queue Q; InitQueue(Q); char x='e',y='c'; EnQueue(Q,'h'); EnQueue(Q,'r'); EnQueue(Q,y); DeQueue(Q,x); EnQueue(Q,x); DeQueue(Q,x); EnQueue(Q,'a‘); while(!QueueEmpty(Q)) { DeQueue(Q,y); printf(y); } printf(x);
A、hrcha
B、rchah
C、rcha
D、char

10、当在一个有序的顺序存储表上查找一个数据时,可用折半查找,也可用顺序查找,但前者比后者的查找速度( )
A、一定快
B、不一定快
C、大部分情况下快
D、取决于表递增还是递减

第二章 2.2 查找

查找测验

1、已知在长度为n的线性表中采用顺序查找,查找成功最好的比较次数是( ),查找成功的最坏比较次数是( ),查找失败的比较次数是( )
A、1,n,n
B、0,n,n+1
C、1,n,n+1
D、1,n+1,n+1

2、长度为n的有序顺序表采用折半查找,查找成功的最少次数为( ),查找成功的最大次数为( ),查找失败的最大次数为( ),所以折半查找的最坏时间复杂度为( )
A、1,logn,logn,O(logn)
B、1,n,n,O(n)
C、1,n,logn,O(logn)
D、1,logn,n,O(n)

3、查找表如下分组(3,7,1,8,15),(22,43,18,45),(60,58,82,77,62),(90,88,99,100),则索引表为( ),查找58需要比较( )次
A、(22,1),(60,6),(88,10),(101,15) 7
B、(15,1),(45,6),(82,10),(100,15),(NULL,19) 5
C、(15,1),(45,6),(82,10),(100,15) 5
D、(15,1),(45,6),(82,10),(100,15) 7

4、查找表32,45,18,77,5,23,44,19,7,3,哈希函数为H(key)=key %5,采用链地址法解决冲突的ASL(成功)=( ),采用表长为11的线性探测再散列开放地址法的ASL(成功)=( ),
A、18/10,32/10
B、18/5,31/10
C、18/10,31/10
D、18/5,32/10

5、哈希函数H(k)=k %11,采用开放地址法的平方探测再散列(di=1,4,9,16,......)解决冲突,输入关键字(9,31,26,19,1,13,2,11,27,16,21),表长为13,建立的哈希表为( ),ASL(成功)=( )
A、地址 0 1 2 3 4 5 6 7 8 9 10 11 12 关键字 11 1 13 2 26 27 16 19 9 31 21 查找次数 1 1 1 2 1 1 2 1 1 1 2 ASL(成功)=15/11
B、地址 0 1 2 3 4 5 6 7 8 9 10 11 12 关键字 11 1 13 2 26 27 16 19 9 31 21 查找次数 1 1 1 2 1 1 2 1 1 2 2 ASL(成功)=15/11
C、地址 0 1 2 3 4 5 6 7 8 9 10 11 12 关键字 11 1 13 2 26 27 16 19 9 31 21 查找次数 1 1 1 2 1 1 2 1 1 2 2 ASL(成功)=15/12
D、地址 0 1 2 3 4 5 6 7 8 9 10 11 12 关键字 11 1 13 2 26 27 16 19 9 31 21 查找次数 1 1 1 2 1 1 2 1 1 1 2 ASL(成功)=15/12

第二章 2.3 排序

3-选择排序随堂测验

1、3,1,34,25,51,2,11采用迭代法,第一趟排序后的序列是( )
A、1,3,25,34,2,11,51
B、1,3,25,34,2,51,11
C、1,3,34,2,11,25,51
D、1,3,34,25,51,2,11

2、3,1,34,25,51,2,11采用归并排序的分治方法,第一趟划分的位置是( )
A、(3,1,34),(25,51,2,11)
B、(3,1,34,25),(51,2,11)
C、(3,1),(34,25),(51,2),(11)
D、(3),(1),(34),(25),(51),(2),(11)

4-交换排序随堂测验

1、13,27,9,5,89,72,4的枢纽是( )
A、13
B、4
C、5
D、以上都可以,看选择枢纽的方法

2、13,27,9,5,89,72,4进行快速排序,13为枢纽,第一次快排后的序列为( )
A、5,4,9,13,89,72,27
B、4,5,9,13,89,72,27
C、4,5,9,13,89,72,27
D、以上都对,快速排序将比枢纽小的数据放到枢纽前面,比枢纽大的放到枢纽大的数据放到后面的具体方法不同,可能得到不同的序列。

排序测验

1、请对下列数据13,24,7,1,8,9,11,56,34,51,2,77,5,进行简单插入排序,冒泡排序(每趟大数冒到后面)和选择排序,2趟后的排序结果为:( )
A、2趟后的简单插入排序序列为:7,13,1,24,8,9,11,56,34,51,2,77,5 2趟后的冒泡排序为:1,7,8,9,11,13,24,34,2,51,5,56,77 2趟后的选择排序为:1,2,7,13,8,9,11,56,34,51,24,77,5
B、2趟后的简单插入排序序列为:7,13,1,24,8,9,11,56,34,51,2,77,5 2趟后的冒泡排序为:1,7,8,9,11,13,24,34,2,51,5,56,77 2趟后的选择排序为:1,2,5,7,13,8,9,11,56,34,51,24,77
C、2趟后的简单插入排序序列为:7,13,24,1,8,9,11,56,34,51,2,77,5 2趟后的冒泡排序为:7,1,8,9,11,13,24,34,2,51,5,56,77 2趟后的选择排序为:1,2,7,13,8,9,11,56,34,51,24,77,5
D、2趟后的简单插入排序序列为:7,13,1,24,8,9,11,56,34,51,2,77,5 2趟后的冒泡排序为:1,7,8,9,11,13,24,34,2,5,51,56,77 2趟后的选择排序为:1,2,7,13,8,9,11,56,34,51,24,77,5

2、已知输入数据13,24,7,1,8,9,11,56,34,51,2,77,5,请采用2路归并递归排序算法进行排序,2趟排序后的结果为( )
A、13,7,24,1,8,9,11,56,34,51,2,5,77
B、1,7,13,24,8,9,11,34,51,56,2,5,77
C、7,13,24,1,8,9,11,34,51,56,2,5,77
D、13,24,1,7,8,9,11,34,56,51,2,77,5

3、已知输入数据13,24,7,1,8,9,11,56,34,51,2,77,5,请采用快速归排序算法进行排序,其中枢纽采用3者取中法,2趟排序后的结果为( ) 注意:答案中的括号表示快排中的分组
A、((2,5,1),(7,8),9)),11,((13,34,24),51,(77,56))
B、((1,2),5,(7,8,9,11)),13,((24),34,(56,77,51))
C、((1,2),5,(13,8,9,7)),11,((24),34,(51,77,56))
D、((2,5,1),7,(8,9)),11,((13,34,24),51,(77,56))

4、已知输入数据13,24,7,1,8,9,11,56,34,51,2,77,5,增量序列d=5,3,1,请采用希尔排序算法进行排序,2趟排序后的结果为( )
A、1,7,5,2,8,9,24,11,34,51,13,77,56
B、1,7,8,9,13,24,11,34,51,2,5,56,77
C、2,11,5,1,8,9,24,7,34,51,13,77,56
D、2,5,11,1,8,9,7,24,34,13,51,77,56

5、已知输入数据1,2,8,5,9,11,34,56,51,77,请分析数据,采用( )排序算法效率最低
A、冒泡排序
B、简单插入排序
C、选择排序
D、三者取中法作为枢纽的快速排序

第三章 递归与分治

递归与分治测验

1、已知求一组数据连续若干数和的最大值采用分治方法得到O(nlogn)的时间复杂度,请完成下面分治法求解的代码: /最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

/ /* 分治法 最大和子数组有三种情况: 1)A[1...mid] 2)A[mid+1...N] 3)A[i..mid..j] /最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

/ //find max crossing left and right int Find_Max_Crossing_Subarray(int arr[], int low, int mid, int high) { const int infinite = -9999; int left_sum = infinite; int right_sum = infinite; int max_left = -1, max_right = -1; int sum = 0; //from mid to left; for (int i = mid; i >= low; i --) { sum += arr[i]; if (sum > left_sum) { left_sum = sum; max_left = i; } } sum = 0; //from mid to right for (int j = mid + 1; j <= high; j ++) { sum += arr[j]; if (sum > right_sum) { right_sum = sum; max_right = j; } } return (left_sum + right_sum); } int Find_Maximum_Subarray(int arr[], int low, int high) { if (high == low) //only one element; return arr[low]; else { int mid = (low + high)/2; int leftSum = Find_Maximum_Subarray(arr, low, mid); int rightSum = Find_Maximum_Subarray(arr, mid+1, high); int crossSum = Find_Max_Crossing_Subarray(arr, low, mid, high); ——————————完成这里的代码—————————————————— } }
A、int tmp=(leftSum>rightSum?leftSum:rightSum; return (tmp>crossSum?tmp:crossSum);
B、if(leftSum>rightSum) { if(leftSum>crossSum)return leftSum; } else { if(rightSum>crossSum)return rightSum; }
C、if(leftSum>rightSum) { if(leftSum>crossSum)return leftSum; else return crossSum; } else { if(rightSum>crossSum)return rightSum; else return crossSum; }
D、if(leftSum>rightSum>crossSum) return leftSum; if(rightSum>leftSum>crossSum) return rightSum; if(crossSum>leftSum>rightSum)return crossSum;
E、if(leftSum>rightSum>crossSum) return leftSum; else if(rightSum>leftSum>crossSum) return rightSum; else if(crossSum>leftSum>rightSum)return crossSum;
F、if(leftSum>rightSum && leftSum>crossSum) return leftSum; if(rightSum>leftSum && rightSum>crossSum) return rightSum; if(crossSum>leftSum && crossSum>rightSum)return crossSum;

2、已知某递归算法的复杂度为:T(n)=2T(n/2)+4,则求解该递归式的解为:( )
A、T(n)=O(1)
B、T(n)=O(n)
C、T(n)=O(n^2)
D、T(n)=O(nlogn)

3、分治法所能解决的问题一般具有以下几个特征: 1.该问题的规模缩小到一定的程度就可以容易地解决; 2. ____________ 3. 利用该问题分解出的子问题的解可以合并为该问题的解; 4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
A、最佳答案
B、最优解
C、最优子结构
D、最优值
E、最优方法

4、求一个数据序列的逆序数量不可以通过 ______排序中增加1个计数器实现。 提示: 一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8。
A、归并
B、简单插入
C、冒泡
D、堆排序
E、树形选择排序

5、下面( )说法是正确的
A、所有问题都可以写递归程序
B、大部分递归程序可以转换为非递归程序,非递归程序运行速度更快。
C、所有递归程序都可以转换为非递归程序,且递归程序运行速度更快
D、递归程序可以把递归出口写在递归关系的后面
E、尾递归可以转换为循环

6、已知求一组数据连续若干数和的最大值采用分治方法得到O(nlogn)的时间复杂度,请完成下面分治法求解的代码: /最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

/ /* 分治法 最大和子数组有三种情况: 1)A[1...mid] 2)A[mid+1...N] 3)A[i..mid..j] /最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

最新考试答案

/ //find max crossing left and right int Find_Max_Crossing_Subarray(int arr[], int low, int mid, int high) { const int infinite = -9999; int left_sum = infinite; int right_sum = infinite; int max_left = -1, max_right = -1; int sum = 0; //from mid to left; for (int i = mid; i >= low; i --) { sum += arr[i]; if (sum > left_sum) { left_sum = sum; max_left = i; } } sum = 0; //from mid to right for (int j = mid + 1; j <= high; j ++) { sum += arr[j]; if (sum > right_sum) { right_sum = sum; max_right = j; } } return (left_sum + right_sum); } int Find_Maximum_Subarray(int arr[], int low, int high) { if (high == low) //only one element; return arr[low]; else { int mid = (low + high)/2; int leftSum = Find_Maximum_Subarray(arr, low, mid); int rightSum = Find_Maximum_Subarray(arr, mid+1, high); int crossSum = Find_Max_Crossing_Subarray(arr, low, mid, high); ——————————完成这里的代码—————————————————— } } 注意为了尽量减少答案的多样性,本次编程代码请通过>而不是<符号进行数据的比较。按照leftSum,rightSum,crossSum的顺序进行比较。 运算符和操作数之间需要一个空格(括号除外)。如果造成困惑请见谅!

7、已知某递归算法的复杂度为:T(n)=2T(n/2)+4,则求解该递归式的解为:( )

8、分治法所能解决的问题一般具有以下几个特征: 1.该问题的规模缩小到一定的程度就可以容易地解决; 2. ____________ 3. 利用该问题分解出的子问题的解可以合并为该问题的解; 4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

9、求一个数据序列的逆序数量可以通过 ______排序中增加1个计数器实现。 提示: 一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8。

10、大部分递归程序可以转换为非递归程序,____程序运行速度更快。

第四章 树与二叉树 (本章内容需要2周学习时间)

2-二叉树的定义与复原随堂测验

1、已知一颗二叉树其中序和后序遍历为: 中序:BDCEAFHG, 后序:DECBHGFA 请给出先序遍历结果:( ) 注意:答案要求全部大写,输出的先序遍历结果的各个符号之间没有空格。

2-二叉树的定义与复原随堂测验

1、二叉树只能从左到右遍历,不能从右到左遍历

3-二叉树的变形随堂测验

1、输入一组序列3,6,1,2,7,4,通过下面方法正确建立二叉排序树
A、画一颗二叉树,把输入序列数字填入进去,填的时候注意每颗子树满足二叉排序树的性质:根结点关键字大于所有左子树的结点的关键字;根结点的关键字小于所有右子树的结点的关键字。
B、先建立空树,然后采用二叉排序树插入新结点的方法,按照输入数据顺序依次插入每一个数据到二叉排序树当中,直到所有数据插入完成,则得到一颗有n个结点的二叉排序树。
C、找一颗存在的二叉排序树,然后修改里面的数据为3,6,1,2,7,4
D、先要有一颗包含3,6,1,2,7,4数据的二叉排序树,再进行插入删除,查找等操作

3-二叉树的变形随堂测验

1、倒置小顶堆一定是大顶堆

树与二叉树测验

1、已知由关键字序列17,28,36,54,30,27,94,15,21,83,40得到的二叉排序树的查找成功的平均查找长度ASL为( ) 注意:结果用最简分数形式
A、6
B、39/11
C、39/10
D、40/6

2、已知由关键字序列17,28,36,54,30,27,94,15,21,83,40得到的平衡二叉树AVL的查找成功的平均查找长度ASL为( ) 注意:结果用最简分数形式
A、34/11
B、30/11
C、3
D、30/4

3、已知由关键字序列17,28,36,54,30,27,94,15,21,83,40构造小顶堆,按照层序输出的关键字序列为:( ) 注意:用空格分隔输出序列
A、17 15 27 21 30 36 94 54 28 83 40
B、15 17 21 27 28 30 36 40 54 83 94
C、15 17 27 21 30 36 94 54 28 83 40
D、15 17 27 28 30 36 94 54 21 83 40

4、已知由一组字符组成的字符串,其中各个字符的访问次数分别为17,28,36,54,30,27,94,15,21,83,40,请对该字符串中的字符进行最优编码,其最优编码的带权路径长度为( )
A、1433
B、445
C、1479
D、1447

5、3个不同的结点,可以构成( )颗不同的二叉树
A、1
B、4
C、5
D、7

6、已知由关键字序列17,28,36,54,30,27,94,15,21,83,40得到的二叉排序树,删除关键字36的结点的最佳操作是( )
A、直接删除关键字结点36
B、用左子树的最大关键字结点36替换给关键字为36的结点
C、用右子树的最小关键字40替换关键字结点36
D、直接用不含有关键字36的输入序列重新构造新的二叉排序树

7、如果一颗二叉树具有10个度为2 的结点和5个度为1的结点,则有( )个叶子结点
A、9
B、11
C、15
D、14

8、假设完全二叉树的树根为第1层,树中第10层有5个叶子结点,则完全二叉树最多有( )个结点。
A、2047
B、2048
C、2037
D、2038

9、二叉树的先序和中序遍历序列相同,则此二叉树为( )
A、任一结点无左子树
B、任一结点无右子树
C、根结点无左子树
D、根结点无右子树

10、一棵完全二叉树上有1001个结点,其叶子结点的个数是( )
A、250
B、500
C、254
D、501

11、二叉树的先序序列是EFHIGJK,中序序列为HFIEJKG,该二叉树右子树的根是( )
A、E
B、F
C、G
D、H

12、下列四个序列中,哪一个是堆( )
A、75,65,30,15,25,45,20,10
B、75,65,45,10,30,25,20,15
C、75,45,65,30,15,25,20,10
D、75,45,65,10,25,30,20,15

13、在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( )
A、都不相同
B、完全相同
C、先序和中序相同,而与后序不同
D、中序和后序相同,而与先序不同

14、二叉排序树的( )结果是一个关键字的递增有序序列
A、先序遍历
B、中序遍历
C、后序遍历
D、层次遍历

15、给定权值总数有n个,其哈夫曼树的结点总数是( )
A、不确定
B、2n
C、2n+1
D、2n-1

第五章 图论与贪心算法(本章内容需要2周学习时间)

贪心算法测验

1、要连通具有n个顶点的无向图,至少需要( )条边
A、n-1
B、n
C、n+1
D、n*(n-1)

2、从顶点1开始,用prim算法按次序输出最小生成树的边( )
A、(1,2)(2,3)(3,6)(6,5)(5,4)
B、(1,2)(2,4)(4,5)(5,6)(6,3)
C、(1,2)(2,3)(2,4)(4,5)(5,6)
D、(5,6)(4,5)(2,4)(1,2)(2,3)
E、(1,2)(2,4)(4,5)(5,6)(2,3)

3、用kruscal算法,按顺序输出最小生成树的各边( )
A、(5,6)(4,5)(2,4)(1,2)(2,3)
B、(1,2)(2,4)(4,5)(5,6)(2,3)
C、(5,6)(4,5)(1,2)(2,3)(3,6)
D、(5,6)(4,5)(2,5)(1,2)(2,3)
E、(5,6)(4,5)(2,4)(1,2)(2,3)
F、(5,6)(4,5)(2,4)(1,2)(6,3)

4、利用dijkstra算法计算从节点1到其他节点的最短路径,算法执行到下图状态之后,接下来应该把哪个节点添加到探索集中?( )
A、结点5
B、结点6
C、结点7
D、结点8

5、程序存储问题 问题描述:假设有n个程序(1,2,3....,n)要存放在长度为L的磁带上。程序i存放在磁带上的长度是,. 程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得尽量快地能够在磁带上存储尽可能多的程序。 数据输入:第一行读入2个正整数,分别表示文件个数n和磁带程度L;第二行读入n个正整数,分别表示n个文件存储在磁带上的长度。 输出:输出1个整数数为满足要求的最多存储的文件数 输入示例: 6 50 2 3 13 8 80 20 输出: 5 下面的选项正确的是( )
A、将程序按照在磁带上的存储长度非递减排序,假设排序后,第i个程序的长度为,其中且。则采用贪心算法,将程序长度最小的程序依次存放到磁带上,直到第k个磁带不能存储到磁带,则结束。磁带能够存放的程序个数为k-1(k<n),满足: 且
B、穷举法,枚举所有的存放程序到磁带且不会空间不够的情况,其中最大的程序数量就是答案。
C、递归法,将第n个程序放到磁带和不放到磁带,各是2种不可能同时出现的方法,比较这2种方法看哪一种放到磁带的程序数量更多,就选择哪一种放法。
D、先如果,则将所有程序都可以放入磁带,因此能够存放的最多程序数量为n。 否则,将程序按照在磁带上的存储长度非递减排序,假设排序后,第i个程序的长度为,其中且。则采用贪心算法,将程序长度最小的程序依次存放到磁带上,直到第k个磁带不能存储到磁带,则结束。磁带能够存放的程序个数为k-1(k<n),满足: 且

6、某一工程作业的网络图如图所示,其中箭头表示作业,箭头上的数字表示完成作业所需的天数。箭头前后的圆圈表示事件,圆圈中的数字表示事件的编号。用事件编号的序列(例如0-3-4-8-10-11)表示进行作业的路径。其中0表示工程开始,11表示工程的结束。求(1)完成此工程的关键路径;(2)完成此工程所需的最少天数
A、(1)关键路径上的事件为:0-1-5-6-9-11 (2)18天
B、(1)关键路径上的事件为:0-2-6-9-11 (2)20天
C、(1)关键路径上的事件为:0-2-7-9-11 (2)18天
D、(1)关键路径上的事件为:0-2-7-10-11 (2)16天

7、求城市a到其他城市的最短距离及路线
A、a到其他城市的最短距离及路径分别为: (1)a->b:23 (2)a->c:18 (3)a->c->e:30 (4)a->c->e->d:36 (5)a->c->f:54 (6) a->c->e->g: 55
B、a到其他城市的最短距离及路径分别为: (1)a->b:23 (2)a->c:18 (3)a->c->e:30 (4)a->c->e->d:36 (5)a->c->e->f:39 (6) a->c->e->g: 55
C、a到其他城市的最短距离及路径分别为: (1)a->b:23 (2)a->c:18 (3)a->b->e:32 (4)a->c->e->d:36 (5)a->c->f:54 (6) a->c->e->g: 55
D、a到其他城市的最短距离及路径分别为: (1)a->b:23 (2)a->c:18 (3)a->b->e:32 (4)a->c->e->d:36 (5)a->c->e->f:39 (6) a->c->e->g: 55

8、汽车加油问题 问题描述:一辆汽车加满油可以行驶n 公里(km)。旅途中有若干加油站。设计1个有效算法,指出应该在哪些加油站加油,使得沿途加油次数最少。 数据输入:第一行2个正整数n和k,表示汽车加满油可以行驶n公里,沿途有k个加油站。 第二行有k+1个正整数,表示第i个加油站和第i+1个加油站的距离。第0个加油站是出发地,汽车已经加满油,第k+1个加油站代表目的地。 输出:输出1个正整数表示最少加油次数 输入示例: 7 7 1 2 3 4 5 1 6 6 输出结果: 4 下面说法不正确的是( )
A、采用贪心算法,每一个加油站都去加油,使得油箱出发的时候都是满的,即使加油站隔的很远,比如大于n公里,也能够开到下一个加油站。
B、采用排除法,只要剩余的油不足以行驶到下一个加油站,说明继续行驶做不到,不能把本加油站排除了,因此需要加油
C、采用贪心算法:最远距离优先。也就是满足汽车有油的情况下行驶尽可能远的距离。 首先保证每2个加油站之间的距离<=n,否则汽车没有到下一个加油站就没有油了,不能完成旅游。 然后计算汽车从出发地开始的行驶的累计路程,只要累计路程小于n,则继续开到下一个加油站,一旦行驶里程>n,则在上1个加油站必须加满油,并加油次数加1次。然后以上一个加油站为其实出发地开始用同样的方法进行累计路程,直到到达目的地。
D、采用穷举法,把每一种加油方法都枚举出来,看是否能够行驶到下一个加油站,不能则排除,否则就是一个可行解。

9、最小生成树除了prim和kuscal算法,还有没有其他的算法?
A、没有了
B、还有破圈法,就是把图里面的包含圈的最大边删除,直到没有圈存在。这个算法效率比上面两个算法更好。
C、还有其他算法,包括破圈法在内的其他最小生成树算法,效率没有比prim或者kruscal算法更好。
D、还有其他算法,有的算法比prim算法好,有的算法比kuscal算法好。
E、还有其他算法,包括破圈法在内的其他最小生成树算法,效率没有比prim或者kruscal算法更好。prim算法适合稠密图,kurscal算法适合稀疏图。

10、下图不是合法的拓扑排序有( )
A、ACDBEF
B、ADCBEF
C、ABDCEF
D、ABDECF

第六章 动态规划

动态规划测验

1、动态规划与贪心算法的最大区别( )
A、贪心算法不是递归问题,动态规划是递归问题
B、动态规划采用从下向上的方法求解,贪心算法采用从上向下的方法求解
C、动态规划是子问题有重叠,贪心算法是局部最优能够得到全局最优
D、一个问题能够用动态规划求解,就能够用贪心算法求解

2、动态规划与分治递归的最大区别( )
A、动态规划也是一种分治递归,但是可以采用从底向上的方法求解,效率更高
B、分治递归的子问题如果有重叠,采用动态规划比分治递归求解效率更高
C、动态规划不是递归问题
D、分治递归都能够用动态规划的自底向上的方法求解,而且能够提高时间复杂度

3、找零钱问题用( )算法
A、贪心算法,能够得到全局最优解
B、动态规划,能够得到全局最优解
C、分治递归,能够得到全局最优解
D、贪心算法,不能得到全局最优解

4、关于背包问题,正确的是( )
A、01背包用动态规划求解,部分背包用贪心算法求解
B、01背包用贪心算法求解,部分背包用动态规划求解
C、背包问题都用贪心算法求解
D、背包问题都用动态规划求解

5、用动态规划的前提条件( )
A、能够分解为子问题,且子问题有重叠
B、能够分解为相似子问题,且子问题有重叠
C、能够分解为子问题
D、递归问题都可以用动态规划求解

6、考虑下面的整数线性规划问题: 其中: 是非负整数,且 下面( )是正确求解过程
A、首先给出该问题的子问题描述:且 的最优值为m(j) ,也就是m(j)表示在背包容量是j的时候背包问题的最优值。 由背包问题的最优子结构性质,可以建立计算m(j)的递归关系式如下:
B、首先给出该问题的子问题描述:且 的最优值为m(i,j) ,也就是m(i,j)表示在背包容量是j,可以选择物品1,2,...,i的时候背包问题的最优值。 由背包问题的最优子结构性质,可以建立计算m(i,j)的递归关系式如下: 其中初始值,m(0,j)=m(i,0)=0, m(i,j)=
C、首先给出该问题的子问题描述:且 的最优值为m(i,j) ,也就是m(i,j)表示在背包容量是j,可以选择物品1,2,...,i的时候背包问题的最优值。 由背包问题的最优子结构性质,可以建立计算m(i,j)的递归关系式如下: m(i,j)= 其中初始值,m(0,j)=m(i,0)=0, m(i,j)=
D、可以用贪心算法求解。按照ai递增排序,依次选择第i个物体,只要选择的物体的总值小于b即可

中国大学数据结构与算法_19

数据结构与算法是计算机科学中非常重要的一部分。在中国的大学中,数据结构与算法是计算机专业必修的课程之一。本文将从以下几个方面介绍中国大学数据结构与算法的相关内容。

课程介绍

在中国的大学中,数据结构与算法通常是计算机专业的第二门核心课程,主要内容包括数据结构的基本概念、线性数据结构、树、图、排序算法、查找算法等。

学习数据结构与算法的目的是为了让学生掌握算法设计和数据结构的基础知识,提高他们的算法分析与实现能力,为他们将来从事计算机科学相关工作打下坚实的基础。

教学方法

在中国大学中,数据结构与算法的教学方法一般为理论教学和实验教学相结合。在理论教学中,教师会讲解数据结构与算法的基本概念、特点、运算及其应用等。在实验教学中,学生会通过编程实现相关算法并进行调试与测试,加深对数据结构与算法的理解和掌握。

难点与重点

在学习数据结构与算法的过程中,学生们常常会遇到一些难点。其中最主要的难点包括以下几个方面:

  • 算法思维难度大
  • 部分算法实现难度大
  • 代码调试和测试难度大
  • 算法时间复杂度分析难度大

因此,学生们应该在学习数据结构和算法的过程中,注重以下几个重点:

  • 理解数据结构和算法的基本概念和原理
  • 积极参与编程实验,加深对算法的理解和掌握
  • 熟练掌握基本的排序算法和查找算法
  • 注重算法时间复杂度的分析和优化

教学资源

在中国的大学中,学生们可以通过以下几种途径获取数据结构与算法的相关教学资源:

  • 课堂讲义和PPT
  • 参考书籍和教材
  • 网络资源和博客
  • 编程实践和实验指导书

通过充分利用这些教学资源,学生们可以更好地理解和掌握数据结构与算法的相关知识。

未来发展

数据结构与算法是计算机科学中非常重要的一部分,是计算机专业必须掌握的基础知识。随着计算机技术的不断发展,数据结构与算法的相关知识也将不断更新和完善。因此,学生们应该不断学习和掌握最新的数据结构与算法知识,做好未来从事计算机科学相关工作的准备。

结语

数据结构与算法是计算机科学中最基础的一部分,其重要性不可忽视。在中国大学中,学生们应该注重学习和掌握数据结构与算法的相关知识,不断提高自己的算法分析和实现能力。希望本文能够对大家有所帮助,祝大家在学习数据结构与算法的过程中取得好成绩!

文章版权及转载声明

本文地址:http://www.zzxhsh.org/60c799844.html发布于 2024-05-19 08:48:30
文章转载或复制请以超链接形式并注明出处五煦查题

评论列表 (暂无评论,44人围观)参与讨论