![f056e5213a5cd9441c7e90af77756368.png](https://i-blog.csdnimg.cn/blog_migrate/490be70fbbf8decb577d771363e47686.jpeg)
1 [单项选择题]在寻找n个元素中第k小元素问题中,如使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面()答案解释最合理。
A.随机选择一个元素作为划分基准
B.取子序列的第一个元素作为划分基准
C.用中位数的中位数方法寻找划分基准
D.以上皆可行。但不同方法,算法复杂度上界可能不同
参考答案:D
2 [单项选择题]回溯法解旅行售货员问题时的解空间树是()。
A.子集树
B.排列树
C.深度优先生成树
D.广度优先生成树
参考答案:B
3 [单项选择题]解决一个问题通常有多种方法。若说一个算法“有效”是指()
A.这个算法能在一定的时间和空间资源限制内将问题解决
B.这个算法能在人的反应时间内将问题解决
C.这个算法比其他已知算法都更快地将问题解决
D.A和C
参考答案:D
4 [问答题]给定一个由n个数组成的序列,要求该序列的最长单调上升子序列,请设计对应的算法并分析其时间复杂度,如果时间复杂度劣于O(nlogn)的,将其优化为O(nlogn)时间复杂度的算法。
参考答案:
假设当前已求出m[1..i-1],当前保留的状态集合为S,下面计算m[i]。
1、若存在状态k∈S,使得x[k]=x[i],则状态m[i]必定不需保留,不必计算。因为,不妨设m[i]=m[j]+1,则x[j] 2、否则,m[i]=1+max{m[j]|x[j] 3、若2成立,则我们往S中增加了一个状态,为了保持S的性质,我们要对S进行维护,若存在状态k∈S,使得m[i]=m[k],则我们有x[i]x[i],j∈S}。于是状态k应从S中删去。
从性质D和算法描述可以发现,S实际上是以x值为关键字(也是以m值为关键字)的有序集合。若使用平衡树实现有序集合S,则该算法的时间复杂度为O(n*logn)。(每个状态转移的状态数仅为O(1),而每次状态转移的时间变为O(logn))。
5 [填空题]使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是(),只使用约束条件进行裁剪的是()。
参考答案:0/1背包问题;N皇后问题
点击下方“阅读原文”查看更多