![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论习题
文章平均质量分 70
zhanglei8893
这个作者很懒,什么都没留下…
展开
-
d叉堆
6-2 对d叉堆的分析 d叉堆有与二叉堆很类似,但(一个可能的例外是)其中的每个非叶结点有d个子女,而不是2个。 a)如何在一个数组中表示一个d叉堆? b)含n个元素的的叉堆的高度是多少? c)给出d叉最大堆的EXTRACT-MAX的一个有效实现,并用d和n表示出它的运行时间。 d)给出d叉堆的INSERT的一个有效实现,并用d和n表示出它的运行时间。 e)给出INCREASE-KEY(A, i, k)的一个有效实现,该过程首先执行A[i]分析与解答: 类似于二叉堆原创 2011-03-08 20:57:00 · 5560 阅读 · 6 评论 -
链表在存储器中紧凑地排列
10.3-4 我们常常希望一个双链表中的所有元素在存储器中能够紧凑地排列在一起,例如使用多重数组表示中的前m个下标位置(在一个分页的虚拟计算机环境中情况就是这样)。假设链表以外没有指向链表元素的指针,请说明应如何实现过程ALLOCATE-OBJECT和FREE-OBJECT,才能使这种表示比较紧凑。(提示:使用栈的数组实现。)分析与解答: 假设链表中已有y个元素,并且已经紧凑排列。令top = y +1,表示下一个将要分配的指针位置 在分配空间时很简单: ALLOCAT原创 2011-04-11 17:21:00 · 1921 阅读 · 1 评论 -
调整双链表使之紧凑
10.3-5 设L是一长度为m的双链表,存储在长度为n的数组key、next和prev中。假设这些数组由维护双链自由表F的两个过程ALLOCATE-OBJECT和FREE-OBJECT来操纵。进一步假设在数组的n个元素中,有m个在表L和自由表F,移动L中的元素,使他们占有数组中的1, 2, ..., m位置,同时调节自由表F使之保持正确,并占有数组位置m+1, m+2, ..., n。所给出的运行时间应该是Θ(m),且只能使用固定量的额外空间。请仔细论证你所给出的过程的正确性。分析与解答: 如下图原创 2011-04-12 10:00:00 · 1917 阅读 · 1 评论 -
二排序数组中位数
9.3-8 设X[1..n] 和 Y[1..n]为两个数组,每个都包含n个已排好序的数。给出一个求数组X和Y中所有2n个元素的中位数的O(lgn)时间的算法分析与解答: 若中位数位于X中,不妨设为X[k],即在X中有k个元素小于等于中位数,n-k个元素大于等于中位数。由于X[k]为合并后的2n个元素的中位数,则在Y中有n-k个元素小于等于中位数,k个元素大于等于中位数,即 Y[n-k] ≤ X[K] ≤ Y[n-k+原创 2011-04-10 20:19:00 · 4129 阅读 · 0 评论 -
带权中位数
9-2 带权中位数 对分别具有正的权重w1, w2, ... , wn,所有权重之和为1的n个不同元素x1, x2, ..., xn,带权(下)中位数是满足如下条件的元素xk和 a)论证x1, x2, ..., xn 的中位数即各xi的带权中位数,此处权值 wi=1/n, i=1,2 ..., n b)如何通过排序,在O(nlgn)的最坏情况时间内求出n个元素的带权中位数。 c)说明如何利用一个线性时间的中位数算法,来在最坏情况Θ(n) 时间内求出n个数的带权中位数。 邮局选址问题(原创 2011-03-31 23:36:00 · 8181 阅读 · 5 评论 -
已排序的i个最大数
<br /><br />9-1 已排序的i个最大数<br /> 给定一个含n个元素的集合,我们希望能用一个基于比较的算法来找出按顺序排列的i个最大元素。请找出能实现下列每一种方法的、具有最佳的渐进最坏运行时间的算法,并分析各种方法的运行时间(用n和i表示)。<br /> a)对于输入数排序,并列出i个最大的数。<br /> b)对输入数建立一个优先级队列,并调用EXTRACT-MAX过程i次。<br /> c)利用一个顺序统计量算法来找到第i个最大元素,然后划分输入数组,再对i个最大数排序原创 2011-03-31 16:19:00 · 2402 阅读 · 0 评论 -
水壶
8-4 水壶 假设给定了n个红色的水壶和n个蓝色的水壶,它们的形状和尺寸都不相同。所有红色水壶中所盛水的量都不一样,蓝色水壶也是一样。此外,对于每个红色的水壶,都有一个对应的蓝色水壶,两者所盛的水量是一样的。反之亦然。 你的任务是将所盛水量一样的红色水壶和蓝色水壶找出来。为了达到这一目的,可以执行如下操作:挑选出一对水壶,其中一个是红色的,另一个是蓝色的:将红色水壶中倒满水;再将水倒入到蓝色的水壶中。通过这个操作,可以判断出来这两只水壶的容量哪一个大,或者是一样大。假设这样的比较需要一个时间单位。你原创 2011-03-29 15:14:00 · 2066 阅读 · 0 评论 -
排序不同长度的数据项
8-3 排序不同长度的数据项a)给定一个整数数组,其中不同的整数中包含的数字个数可能不同,但该数组中,所有整数中的总的数字数为n。说明如何在O(n)的时间内对该数组进行排序。b)给定一个字符串数组,其中不同的串包含的字符数可能不同,但所有串中总的字符个数为n。说明如何在O(n)时间内对该数组进行排序。(注意此处的顺序是指标准的字母顺序,例如a 分析与解答:a)如果采用平常的基数排序,从最低位到最高位开始排序,考虑最坏的情况:如果最长的整数的字数为n/2,其他n/2个整数的字数为1,则采用基数排序,时间复杂度原创 2011-03-29 11:57:00 · 2103 阅读 · 2 评论 -
平均排序
8-5 平均排序 假设我们不是要排序一个数组,而只是要求数组中的元素一般情况下都是层递增序的。更准确地说,称一个包含n个元素的数组A为k排序的(k-sorted),如果对所有i=1,2, ..., n-k,有下式成立: a)给出一个数组是1排序的是什么意思? b)给出数字1,2, ..., 10的一个排列,它是2排序的,但不是完全排序的。 c)证明:一个n元素的数组是k排序的,当且仅当对所有i=1,2, .... n-k 有 A[i] ≤ A[i+k]。 d)给出一个算法,它能在原创 2011-03-30 21:19:00 · 1845 阅读 · 0 评论 -
“三数取中“划分
<br />7-3 “三数取中“划分<br /> 有一种改进RANDOM-QUICKSORT的方法,就是根据从子数组更仔细地选择的(而不是随机选择的)元素作为主元来划分。常用的做法是三数取中:从子数组中随机选出三个元素,取其中间数作为主元。针对这个问题,假设数组A[1...n]中的元素都不相同,并且有n≥3,用A'[1...n]表示已排好序的数组。用“三数取中"方法来选择主元元素x,并定义pi=Pr{x=A'[i]}。<br />a)对于i=2,3,...,n-1,给出pi的以原创 2011-03-22 10:00:00 · 4632 阅读 · 2 评论 -
Monge矩阵
<br /> <br />4-7 Monge矩阵<br /> 一个m x n的实数矩阵A,如果对所有i,j,k和l,1≤ i<k ≤ m和1≤ j<l ≤ n,有<br /> A[i,j]+A[k,l] ≤ A[i,l]+A[k,j]<br /> 那么,此矩阵A为Monge矩阵。换句话说,每当我们从Monge矩阵中挑出两行与两列,并且考虑行列交叉处的4个元素,左上角与右下角的和小于或等于左下角与右上角元素的和。<br />a)证明一个矩阵为Monge阵,当且仅当对所有i=1,原创 2011-03-13 12:06:00 · 4482 阅读 · 2 评论 -
对区间的模糊排序
7-6 对区间的模糊排序 考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间。亦即,给定的是n个形如[ai,bi]的闭区间,其中ai≤bi。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生的各区间的一个排列,使得存在一个cj∈[ai, bi],满足c1≤c2≤...≤cn。a)为n个区间的模糊排序设计一个算法。你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时原创 2011-03-13 10:23:00 · 3813 阅读 · 0 评论 -
快速排序中的堆栈深度
7-4 快速排序中的堆栈深度 7.1节中的QUICKSORT算法包含有两个对自身递归调用。在调用PARTITION后,左边的子数组和右边的子数组分别被递归排序。QUICKSORT中第二次递归调用并不是必须的;可以用迭代控制结构来代替它。这种技术称作尾递归,对多数的编译程序都加以了采用。考虑下面合格快速排序的版本,它模拟了尾递归:QUICKSORT'(A, p, r)1 while p 2 do ▸ Partition and sort left subarray.3原创 2011-03-10 11:19:00 · 7298 阅读 · 7 评论 -
Stooge排序
7-3 Stooge排序 Howard、Fine等教授提出了下面的“漂亮的”排序算法:STOOGE-SORT(A, i, j)1 ifA[i] >A[j]2 then exchange A[i] ↔A[j]3 ifi + 1 ≥j4 then return5 k←⌊(j - i + 1)/3⌋ ▹ Round down.6 STOOGE-SORT(A, i, j - k) ▹ First two-thirds.7原创 2011-03-09 21:47:00 · 4035 阅读 · 1 评论 -
Young氏矩阵
6-3 Young氏矩阵 一个m x n的Young氏矩阵(Young tableau)是一个m x n的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。Young氏矩阵中可能会有一些∞数据项,表示不存在的元素。所以,Young氏矩阵可以用来存放r≦mn个有限的数。 a)画一个包含元素{9,6,3,2,4,8,5,14,12}的4 x 4的Young氏矩阵。 b)讨论一个m x n的Young氏矩阵,如果Y[1,1]=∞,则Y为空;如果Y[m,n] c)给出一个在非原创 2011-03-09 16:32:00 · 11423 阅读 · 10 评论 -
逆序对
2-4 逆序对 设A[1...n]是一个包含n个不同数的数组,如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。 a)列出数组的5个逆序对 b)如果数组的元素取自集合{1,2,...,n}, 那么, 怎样的数组含有最多的逆序对?它包含多少个逆序对? c)插入排序的运行时间与输入数组中逆序对的数量之间有怎样的关系?说明你的理由。 d)给出一个算法,它能用O(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的个数。(原创 2011-03-07 22:07:00 · 9018 阅读 · 7 评论 -
顺序统计树
在包含n个元素的无序集合中,寻找第i个顺序统计量的时间复杂度为O(n)。通过建立一种特定的结构,可以使得任意的顺序统计量都可以在O(lgn)的时间内找到。这就是下面会提到的基于红黑树的顺序统计树。 相比于基础的数据结构,顺序统计树增加了一个域size[x]。这个域包含以x为根的子树的节点数(包含x本身)。size域满足等式:原创 2011-06-06 23:24:00 · 6024 阅读 · 3 评论