分治算法实验(用分治法实现快速排序算法)
算法分析与设计实验报告第四次附加实验
while (a[--j]>x); if (i>=j) { break; } Swap(a[i],a[j]); } a[p] = a[j]; //将基准元素放在合适的位置 a[j] = x; return j; } //通过RandomizedPartition函数来产生随机的划分 template vclass Type> int RandomizedPartition(Type a[], int p, int r) { int i = Random(p,r); Swap(a[i],a[p]); return Partition(a,p,r); } 较小个数排序序列的结果: 测试结果 较大个数排序序列的结果:
实验心得 快速排序在之前的数据结构中也是学过的,在几大排序算法中,快速排序和归并排序尤其是 重中之重,之前的快速排序都是给定确定的轴值,所以存在一些极端的情况使得时间复杂度 很高,排序的效果并不是很好,现在学习的一种利用随机化的快速排序算法,通过随机的确 定轴值,从而可以期望划分是较对称 的,减少了出现极端情况的次数,使得排序的效率挺高了很多, 化算法想呼应,而且关键的是对于随机生成函数,通过这一次的 学习终于弄明白是怎么回事了,不错。 与后面的随机实 验和自己的 实验得分助教签名 附录: 完整代码(分治法) //随机后标记元素后的快速排序 #i nclude #in elude #inelude #include using namespacestd; template < class Type> void S &x,Type &y); // 声明swap函数 inline int Random(int x, int y); // 声明内联函数 template < class Type> int Partition(Type a[], int p, int r); // 声明 Partition 函数template int RandomizedPartition(Type a[], int p, int r); // 声明 RandomizedPartition 函数 int a[1000000]; //定义全局变量用来存放要查找的数组 更大个数排序序列的结果:
算法分析实验报告--分治策略
分治策略 姓名:XXX 专业班级:XXX 学号:XXX 指导教师:XXX 完成日期:XXX
一、试验名称:分治策略 (1)写出源程序,并编译运行 (2)详细记录程序调试及运行结果 二、实验目的 (1)了解分治策略算法思想 (2)掌握快速排序、归并排序算法 (3)了解其他分治问题典型算法 三、实验内容 (1)编写一个简单的程序,实现归并排序。 (2)编写一段程序,实现快速排序。 (3)编写程序实现循环赛日程表。设有n=2k个运动员要进行网球循环赛。现 要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其它n-1个选手各赛一次(2)每个选手一天只能赛一场(3)循环赛进行n-1天 四、算法思想分析 (1)编写一个简单的程序,实现归并排序。 将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行 排序,最终将排好序的子集合合并成为所要求的排好序的集合。 (2)编写一段程序,实现快速排序。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数 据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据 变成有序序列。 (3)编写程序实现循环日赛表。 按分治策略,将所有的选手分为两组,n个选手的比赛日程表就可以通 过为n/2个选手设计的比赛日程表来决定。递归地用对选手进行分割, 直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让
这2个选手进行比赛就可以了。 五、算法源代码及用户程序 (1)编写一个简单的程序,实现归并排序。 #include #include<> #define MAX 10 using namespace std; void merge(int array[],int p,int q,int r) { int i,k; int begin1,end1,begin2,end2; int* temp = new int[r-p+1]; begin1 = p; end1 = q; begin2 = q+1; end2 = r; k = 0; while((begin1 <= end1)&&(begin2 <= end2)) { if(array[begin1] < array[begin2]) { temp[k] = array[begin1]; begin1++; } else { temp[k] = array[begin2]; begin2++; } k++; } while(begin1 <= end1) { temp[k++] = array[begin1++]; }
2009.1算法设计与分析课程期末试卷-A卷(自测 )
华南农业大学期末考试试卷(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.2n2D.3nlog3n 3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n 4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨 牌的个数是。 A.(4k– 1)/3 B.2k /3 C.4k D.2k 5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法 对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。A.随机选择一个元素作为划分基准 B.取子序列的第一个元素作为划分基准 C.用中位数的中位数方法寻找划分基准 D.以上皆可行。但不同方法,算法复杂度上界可能不同
6. 现在要盖一所邮局为这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. 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分 别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题 。 A .问题规模相同,问题性质相同 B .问题规模相同,问题性质不同 C .问题规模不同,问题性质相同 D .问题规模不同,问题性质不同 9. 对布线问题,以下 是不正确描述。 A .布线问题的解空间是一个图 B .可以对方格阵列四周设置围墙,即增设标记的附加方格的预处理,使得算法简化对边界的判定 C .采用广度优先的标号法找到从起点到终点的布线方案(这个方案如果存在的话)不一定是最短的 D .采用先入先出的队列作为活结点表,以终点b 为扩展结点或活结点队列为空作为算法结束条件 10. 对于含有n 个元素的子集树问题,最坏情况下其解空间的叶结点数目为 。 A .n! B .2n C .2 n+1 -1 D . ∑=n i i n 1 !/! 答案:DACAD CACCB
分治算法—排列问题
分治算法——排列问题 2011-08-05 15:10:52| 分类:分治算法|字jm号大中小订阅 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 分析:设R={r 1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。,集合X中元素的全排列记为perm(X)。其中(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下: 当n=1时,perm(R)=(r),其中r是集合R中唯一的元素; 当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…,(rn )perm(Rn)构成。 思路是递归产生前缀是list[0:k-1],且后缀是list[k:m]的全排列的所有排列。……算法将list[k:m]中每一个元素分别与list[k]中元素交换。然后递归地计算list[k+1:m]的全排列,并将计算结果作为list[0:k]的后缀。 1)切记Perm(list,k,m)是产生从k开始到m结束的所有全排列,这个很重要。要产生所有全排列,只要调用这个函数就行了,至于这个函数怎么实现,先不要去管。(一开始理解递归函数的时候,由于过多的在意函数的流程,而忘了函数本身的功能。) 2)将有限个元素的全排列分成前缀和后缀两部分。用一个元素作前缀,剩下元素作后缀。显然作前缀的一个元素可以是所有元素的任意一个,对前缀位置的元素作一轮交换即可。先确定了一个前缀,然后对后缀元素们求全排列(不要关心怎么求全排列。对后缀元素求全排列,就是原问题的一个子问题,分治法的一个特征。)这样就得到了一个确定前缀的所有全排列。 贴上自己写的代码: #include #include //包含的头文件 void swap(char &a,char &b)//实现元素的互换 {
分治算法设计
安徽文达信息工程学院学生实验报告(计算机语言编程类适用) 一、【实验目的】 1.熟悉分治算法思想。 2.验证具体问题算法的设计及程序实现。 二、【实验内容】 1、有N枚硬币,其中一枚是假币,假币和真币重量不同,可以用一个没有刻度的天平测,求出假币是哪一枚,现要求采用分治法解决,请写出算法设计思路。(不需要编程) 答:(1)N为偶数时,将N枚硬币分成N/2,N/2的两份将第一份分成N/4,N/4的两份,分别置于天平两端,如果天平倾斜,则假币在第一份N/2中,反之水平,则假币在第二份N/2中; (2)N为奇数时,将N枚硬币分成(N+1)/2,(N-1)/2的两份,将第一份分成(N+1)/4,(N+1)/4的两份,分别置于天平两端,如果天平倾斜,则假币在第一份(N+1)/2中,反之水平,则假币在第二份(N-1)/2中, (3)将含假币的的币数赋值给N,N为偶数执行步骤(1),N为奇数执行步骤(2),如此执行直至找出含假币的2或3枚硬币,如果是2枚硬币则找1枚硬币构成3枚,3枚则直接两两置于天平两端,找到使天平水平的两枚硬币,则假币是剩下的硬币。 2、格雷码问题: 对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。 (2) 序列中无相同的编码。 (3) 序列中位置相邻的两个编码恰有一位不同。 例如:n=1时的格雷码为:{0, 1}。 n=2时的格雷码为:{00, 01, 11, 10}。 n=3时的格雷码为:{000, 001, 011, 010,110,111,101,100}。 gray码问题求解思想: 将一个规模n位gray码序列表示为G(n), G(n)以相反顺序排列的序列表示为G’(n)。则gray 码的构造规则即子问题的划分规则为:G(n+1)= 0G(n) 1G’(n) 或G(n+1)= G(n) 0G’(n)1。 请尝试编写程序,完成格雷码问题的处理。
算法分析与设计部分含计算的复习题及参考答案
二、简答题: 1.备忘录方法和动态规划算法相比有何异同简述之。 2.简述回溯法解题的主要步骤。 3.简述动态规划算法求解的基本要素。 4.简述回溯法的基本思想。 5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。 6.简要分析分支限界法与回溯法的异同。 7.简述算法复杂性的概念,算法复杂性度量主要指哪两个方面 8.贪心算法求解的问题主要具有哪些性质简述之。 9.分治法的基本思想是什么合并排序的基本思想是什么请分别简述之。 10.简述分析贪心算法与动态规划算法的异同。 三、算法编写及算法应用分析题: 1.已知有3个物品:(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10),背包的容积M=20,根据0-1背包动态规划的递推式求出最优解。 2.按要求完成以下关于排序和查找的问题。 ①对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。 ②请描述递减数组进行二分搜索的基本思想,并给出非递归算法。 ③给出上述算法的递归算法。 ④使用上述算法对①所得到的结果搜索如下元素,并给出搜索过程:18,31,135。 3.已知1()*() i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=12,r 5=5,r 6=50,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序(要求给出计算步骤)。 4.根据分枝限界算法基本过程,求解0-1背包问题。 已知n=3,M=20,(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10)。 5.试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n 公里,而旅途中有若干个加油站。试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少,请写出该算法。 6.试用动态规划算法实现下列问题:设A 和B 是两个字符串。我们要用最少的字符操作,将字符串A 转换为字符串B ,这里所说的字符操作包括: ①删除一个字符。 ②插入一个字符。 ③将一个字符改为另一个字符。 请写出该算法。 7.对于下图使用Dijkstra 算法求由顶点a 到顶点h 的最短路径。 8.试写出用分治法对数组A[n]实现快速排序的算法。 9.有n 个活动争用一个活动室。已知活动i 占用的时间区域为[s i ,f i ],活动i,j 相容的条件是:sj ≥f i ,问题的解表示为(x i | x i =1,2…,n,),x i 表示顺序为i 的活动编号活动,求一个相容的活动子集,且安排的活动数目最多。 10.设x 1、x 2、x 3是一个三角形的三条边,而且x 1+x 2+x 3=14。请问有多少种不同的三角形给出解答过程。 11.设数组A 有n 个元素,需要找出其中的最大最小值。 ①请给出一个解决方法,并分析其复杂性。 ②把n 个元素等分为两组A1和A2,分别求这两组的最大值和最小值,然后分别将这两组的最大值和
分治算法举例
分治算法举例 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-
1设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排序好的数。试设计一个O(logn)时间的分治算法,找出X和Y的2n个数的中位数,并证明算法的时间复杂性为O(l o g n)。注:个数为奇数,则处于最中间位置的数; 个数为偶数,则中间两个数据的平均数。 解: 利用二分查找思想: 对于两个等长的数组, 如果数组长度为奇数,令mid为数组的最中间元素的位置,则有 X[mid],Y[mid]分别为两个数组的中位数,则存在以下情况: (1)如果X[mid]Y[mid],则两个数组合并后的中位数应该在X[0:mid]和Y[mid:n-1]中查找; (3)如果X[mid]=Y[mid],则两个数组合并后的中位数就是X[mid]或者Y[mid] 另外考虑特殊情况:如果两个数组的长度为1,则无需比较大小,合并后数组的中位数即为两个数组元素的平均值。 如果数组的长度为偶数,令mid为数组的中间两个元素的较小元素的位置,此时数组X的中位数为x=(X[mid]+X[mid+1])/2.0,数组Y的中位数
为y=(Y[mid]+Y[mid+1])/2.0(这里考虑到中位数不一定为整数)。则存在以下情况: (1)如果xy,则两个数组合并后的中位数应该在X[0:mid]和 Y[mid+1:n-1]中查找; (3)如果x=y,则两个数组合并后的中位数就是x或者y. 考虑特殊情况:如果两个数组的长度为2,则如果其中一个数组A的元素刚好处于合并后的数组的中间位置,则最终的中位数为这个数组A的数组元素的平均数。否则,则回到数组长度为偶数的一般情况。 具体如下: double Search_Median(int*A,int l1,int r1,int*B,int l2,int r2,int n){ /*如果两个数组的长度为,则中位数为所有元素的平均数,其中 A,B为要查中位数的数组, l1,r1,l2,r2分别为两个数组每次查询的起始位置和终点位置 n为两个数组每次查询时的范围(重新查询的数组长度) */ if(n==1){ //数组长度为1的情况 return(A[l1]+B[l2])/2.0; } if(n==2){
计算机算法设计与分析期末考试复习题
1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是(D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 14.哈弗曼编码的贪心算法所需的计算时间为( B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 15.分支限界法解最大团问题时,活结点表的组织形式是( B )。 A、最小堆 B、最大堆 C、栈 D、数组
算法分析习题详细答案五
1.最大子段和问题:给定整数序列 n a a a ,,,21 ,求该序列形如 j i k k a 的子段和 的最大值: j i k k n j i a 1max ,0max 1) 已知一个简单算法如下: int Maxsum(int n,int a,int& best i,int& bestj){ int sum = 0; for (int i=1;i<=n;i++){ int suma = 0; for (int j=i;j<=n;j++){ suma + = a[j]; if (suma > sum){ sum = suma; besti = i; bestj = j; } } } return sum; }试分析该算法的时间复杂性。 2) 试用分治算法解最大子段和问题,并分析算法的时间复杂性。 3) 试说明最大子段和问题具有最优子结构性质,并设计一个动态规划算法解最大子段和问题。分析算法的时间复杂度。 (提示:令1()max ,1,2,,j k i j n k i b j a j n L ) 解:1)分析按照第一章,列出步数统计表,计算可得)(2 n O 2)分治算法:将所给的序列a[1:n]分为两段a [1:n/2]、a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有三种可能: ①a[1:n]的最大子段和与a[1:n/2]的最大子段和相同; ②a[1:n]的最大子段和与a[n/2+1:n]的最大子段和相同; ③a[1:n]的最大子段和为两部分的字段和组成,即 j n j i l n i j a a a a a 122;
intMaxSubSum ( int *a, int left , int right){ int sum =0; if( left==right) sum = a[left] > 0? a[ left]:0 ; else {int center = ( left + right) /2; int leftsum =MaxSubSum ( a, left , center) ; int rightsum =MaxSubSum ( a, center +1, right) ; int s_1 =0; int left_sum =0; for ( int i = center ; i >= left; i--){ left_sum + = a [ i ]; if( left_sum > s1) s1 = left_sum; } int s2 =0; int right_sum =0; for ( int i = center +1; i <= right ; i++){ right_sum + = a[ i]; if( right_sum > s2) s2 = right_sum; } sum = s1 + s2; if ( sum < leftsum) sum = leftsum; if ( sum < rightsum) sum = rightsum; } return sum; } int MaxSum2 (int n){ int a; returnMaxSubSum ( a, 1, n) ; } 该算法所需的计算时间T(n)满足典型的分治算法递归分式T(n)=2T(n/2)+O(n),分治算法的时间复杂度为O(nlogn)
算法分析复习题(含答案)
一、选择题 1、衡量一个算法好坏的标准是( C )。 (A)运行速度快(B)占用空间少(C)时间复杂度低(D)代码短 2、记号O的定义正确的是(A)。 (A)O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ f(n) ≤ cg(n) };(B)O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ cg(n) ≤ f(n) };(C)O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0 有:0 ≤f(n)0,存在正数和n0 >0使得对所有n≥n0 有:0 ≤cg(n) < f(n) }; 3、二分搜索算法是利用( A )实现的算法。 (A)分治策略(B)动态规划法(C)贪心法(D)回溯法 4、使用分治法求解不需要满足的条件是(A )。 (A)子问题必须是一样的(B)子问题不能够重复 (C)子问题的解可以合并(D)原问题和子问题使用相同的方法解 5、合并排序算法是利用( A )实现的算法。 (A)分治策略(B)动态规划法(C)贪心法(D)回溯法 6、实现大整数的乘法是利用(C )的算法。 (A)贪心法(B)动态规划法(C)分治策略(D)回溯法 7、以下不可以使用分治法求解的是( D )。 (A)棋盘覆盖问题(B)选择问题(C)归并排序(D) 0/1背包问题 8、实现循环赛日程表利用的算法是( A )。 (A)分治策略(B)动态规划法(C)贪心法(D)回溯法 9、实现棋盘覆盖算法利用的算法是( A )。 (A)分治法(B)动态规划法(C)贪心法(D)回溯法 10、矩阵连乘问题的算法可由( B)设计实现。 (A)分支界限算法(B)动态规划算法(C)贪心算法(D)回溯算法 11、实现大整数的乘法是利用的算法( C )。 (A)贪心法(B)动态规划法(C)分治策略(D)回溯法 12、最长公共子序列算法利用的算法是( B )。 (A)分支界限法(B)动态规划法(C )贪心法(D)回溯法 13、下列算法中通常以自底向上的方式求解最优解的是( B )。 (A)备忘录法(B)动态规划法(C)贪心法(D)回溯法 14、下列是动态规划算法基本要素的是( D )。 (A)定义最优解(B)构造最优解(C)算出最优解(D)子问题重叠性质15、下列不是动态规划算法基本步骤的是( A )。 (A)找出最优解的解空间(B)构造最优解(C)算出最优解(D)定义最优解 16、能采用贪心算法求最优解的问题,一般具有的重要性质为:( A ) (A)最优子结构性质与贪心选择性质(B)重叠子问题性质与贪心选择性质 (C)最优子结构性质与重叠子问题性质(D)预排序与递归调用 17、下面问题(B )不能使用贪心法解决。 (A)单源最短路径问题(B)N皇后问题 (C)最小花费生成树问题(D)背包问题 18、以下不可以使用分治法求解的是(D )。 (A)棋盘覆盖问题(B)选择问题(C)归并排序(D)0/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.20log 2n C.2n2 D.3nlog 3 n 3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog 2 n 4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨 牌的个数是。 A.(4k– 1)/3 B.2k /3 C.4k D.2k 5.在寻找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.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题, 分别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题。