算法
文章平均质量分 53
newdye
30erlisp
展开
-
算法导论 2.1-4
题目有两个各存放在数组A和B中的n位二进制整数,考虑他们的相加问题。(翻译的够烂)两个整数的和存放在有n+1个元素的数组C中,请给出这个问题的形式化描述,并给出伪代码。分析考虑两个1位二进制数a和b,假设它们的和c是个2位二进制数,c[1]=ab,c[2]=(a+b)/2=(a+b)>>2。在考虑两个2位二进制数和,它们的和是个3位二进制数;当第一位相加时,先计算进位位原创 2013-05-03 16:28:44 · 1656 阅读 · 0 评论 -
算法导论 4.4-2
1 题目证明:若f(n)=Θ(nlogb a lgk n),其中k>=0,则主定理递归式的解为T(n)=Θ(nlogb a lgk+1 n)。为简单起见,可以只对b的整数幂分析。2 分析与解答证明:对于n为b的整数幂,主定理的递归式的解为:T(n)=Θ(nlogb a) + ∑j=0 logb n -1 aj f(n/bj )将f(n)=Θ(nlogb a原创 2013-09-03 16:07:52 · 1892 阅读 · 2 评论 -
算法导论 4.4-3
1 题目在主定理的情况3)中,条件af(n/b) 0使f(n)=Ω(nlogb a+ε )。据此请证明定理中的陈述过强了。2 分析与解答证明:由af(n/b) = (a/c)f(n/b);递归地连续使用此式得,f(n) >= (a/c)j f(n/bj );假设f(1)为常数,那么当j=logb n 时,f(n/bj ) = f(1),由此可得:f(n原创 2013-09-04 09:51:18 · 2384 阅读 · 2 评论 -
算法导论 4.1-6
问题通过改变变量求解递归式。得到的解应当是渐近紧确的。不必担心值是否为整数。分析证明:令则递归式变换为令,则,则递归式等价于S(m)=2S(m/2)+1可得S(m)=O(lgm),可得T(n)=O(lglgn)原创 2013-07-15 08:43:09 · 1202 阅读 · 0 评论 -
算法导论 3-6
问题在lg*函数中用到的重复操作符"*"可用在实数域内任何单调递增的函数f(n)上。对一个给此那个的实常数c,定义叠函数(我认为翻译成迭函数更合适)为该函数不必针对所有情况定义。换言之,是使其自变量小于或等于c而重复应用f的次数。对下列每一个函数f(n)和c,给出的尽可能紧缺的界分析迭函数的值实际就是递归程序的运行时间的解。e)2lglgn f(n)原创 2013-07-08 11:59:58 · 1906 阅读 · 0 评论 -
算法导论 4-4
1 题目更多递归式的例子给出下列递归式的渐近上下界,给出的界尽量紧确。2 分析与解答T(n)=3T(n/2)+nlgn,根据主定理T(n)=Θ(nlog2 3)T(n)=5T(n/5)+n/lgn,简单画出递归树,可得T(n)=∑i=0log5 n -1n/lg(n/5i ) + nT(1)=n∑i=0log5 n -1(1/lg(n/5i )) + Θ原创 2013-09-11 11:28:48 · 5059 阅读 · 2 评论 -
算法导论 4.1-4
问题证明合并排序算法的“准确”递归式的解为Θ(nlgn)分析证明:因为并且由4.1-2可知T'(n)=Ω(nlgn)所以T(n)=Ω(nlgn)因为所以依照假设,可以得到T(n)不能证明假设,我们改变假设,设T(n)=O(nlg(n-2)),可得T(n)因为多项式函数比指数函数增长的快,所以只要c>=1/2,必然存在n1,当n>=n1时,原创 2013-07-15 08:24:08 · 1791 阅读 · 0 评论 -
算法导论 4.4-1
1 题目在方程(4.12)中,若b是个正整数而不是任意实数时,请给出nj 的一个简单而准确的表达式。2 分析与解答若b是整数,因为n也是整数,所以n可以表示为:n=bx+c,其中c所以,⌈ n/b ⌉ = ⌈ bx-1 + c/b ⌉ = bx-1 + 1;那么⌈ ⌈ n/b ⌉ / b ⌉ = ⌈ bx-2 + 1/b ⌉ =bx-2 + 1 = ⌈ n/原创 2013-09-03 15:01:55 · 2323 阅读 · 0 评论 -
算法导论 4-2
1 题目找出所缺的整数某数组A[1..n]含有所有从0到n的整数,但其中有一个整数不再数组中。通过利用一个辅助数组B[0..n]来记录A中出现的整数,很容易在O(n)时间内找出所缺的整数。但是在这个问题中,我们却不能由一个单一的操作来访问A中的一个完整整数,因为A中的元素是以二进制表示的。我们所能用的唯一操作就是“取A[i]的第j位”,这个操作所花的时间为常数。证明:如果仅用此操作原创 2013-09-10 12:24:00 · 1701 阅读 · 1 评论 -
算法导论 4-1
1 题目给出下列递归式的渐近上下界。假设T(n)是个常数,n2 分析与解答a) T(n)=2T(n/2)+n3b) T(n)=T(9/10n)+nc) T(n)=16T(n/4)+n2d) T(n)=7T(n/3)+n2e) T(n)=7T(n/2)+n2f) T(n)=2T(n/4)+n1/2g) T(n)=T(n-1)+nh) T(n原创 2013-09-10 11:57:59 · 3656 阅读 · 0 评论 -
算法导论 4.3-5
1 题目考虑在某个常数c = 1,b > 1以及一个函数f(n),满足主定理第三种情况中的除了规则性条件之外的所有条件的例子。2 分析与解答首先f(n)要比nlogb a大,若nlogb a是多项式函数,那么f(n)至少是多项式函数;同时要满足f(n)是多项式大,如果满足了多项式大,那么如果f(n)是多项式函数的话,很容易证明,由于f(n)的最高次比nlogb原创 2013-09-02 15:39:44 · 1514 阅读 · 0 评论 -
算法导论 4.3-4
1 题目主方法能否应用于递归式T(n)=4T(n/2)+n2 lgn?为什么?给出此递归式的渐近上界。2 分析与解答nlogb a=n2,所以f(n)比较大,但是f(n)/n2=lgn渐近小于nε ,所以f(n)不是多项式大,所以不能用主定理。使用替换法找T(n)的渐近上界,尽管f(n)不是T(n)的渐近确界,但是由于它比较大,我们猜测T(n)的渐近上界由他决定原创 2013-09-02 15:36:08 · 3789 阅读 · 0 评论 -
算法导论 4.3-3
1 题目用主方法证明二分查找的递归式T(n)=T(n/2)+Θ(1)的解是T(n)=Θ(lg n)。2 分析与解答nlogb a=1,f(n)=Θ(1),所以f(n)=Θ(nlogb a),所以T(n)=Θ(lgn)。原创 2013-08-28 17:00:13 · 2103 阅读 · 0 评论 -
算法导论 4.3-2
1 题目某个算法A的运行时间由递归式T(n)=7T(n/2)+n2表示;另一个算法A'的运行时间为T'(n)=aT'(n/4)+n2。若要A'比A更快,那么a的最大整数值是多少?2 分析与解答T(n)的a=7,b=2,n2=O(nlg 7 - ε),所以T(n)=Θ(nlg 7);T(n)和T'(n)的f(n)部分相同,T'(n)的nlogb a=nlog4 a原创 2013-08-28 16:48:39 · 3840 阅读 · 0 评论 -
算法导论 4.3-1
1 题目用主方法来给出下列递归式的紧确的渐近界:a) T(n)=4T(n/2)+nb) T(n)=4T(n/2)+n2c) T(n)=4T(n/2)+n32 分析与解答a) a=4,b=2,f(n)=n,nlogb a=n2;f(n)=O(n2- ε ),T(n)=Θ(n2);b) a=4,b=2,f(n)=n2,nlogb a=n2;f(n)=Θ(n2原创 2013-08-28 15:54:54 · 3262 阅读 · 0 评论 -
算法导论 4.2-5
1 题目利用递归树来找出递归式T(n)=T(α n)+T((1-α)n)+cn的渐近紧确解,其中α是02 分析与解答通过观察递归式,可知T(n)的递归树是二叉树,当α取不同值时,根节点的的两棵子树的高度是不同的。首先考虑1/2画出T(n)的递归树:从递归树可以得出:深度最浅的叶子的深度为logα(1/n);深度最深的叶子的深度为log1-α(原创 2013-08-28 12:43:00 · 2372 阅读 · 2 评论 -
算法导论 4.2-4
1 题目利用递归树来找出递归式T(n)=T(n-a)+T(a)+cn的渐近紧确解,其中a>=1且c>0是常数。2 分析与解答画出递归树:从递归树可以得到:递归树的高度为⌊ n/a ⌋ ;深度为i的结点的代价总和为T(a)+c(n-ia)忽略上下取整,可得T(n)=∑i=0n/a(T(a)+c(n-ia))=(n/a+1)T(a)+(cn2+a原创 2013-08-27 17:17:34 · 2220 阅读 · 0 评论 -
算法导论 4-7
1 题目一个m×n的实数矩阵A,如果对所有i,j,k和l,1 A[i,j]+A[k,l]那么,此矩阵A为Monge矩阵。换句话说,每当我们从Monge矩阵中跳出两行和两列,并且考虑行列交叉处的4个元素,左上角与右下角元素的和小于等于左下角与右上角的和。a)证明一个矩阵为Monge阵,当且仅当对所有i=1,2,…,m-1和j=1,2,…,n-1,有A[i,j]+A[i+1,j+1原创 2013-10-12 09:15:38 · 1480 阅读 · 2 评论 -
算法导论 5.1-1
1 题目证明:假设在程序HIRE-ASSISTANT的第4行中,我们总是能够决定哪一个应聘者最佳,这就蕴含着我们知道应聘者排名的总次序。2 分析与解答证明:由于应聘者出现的顺序是随机的,所以所有应聘者的全序序列的任意一个都有可能出现。如果程序HIRE-ASSISTANT总是能决定哪一个应聘者最佳,就意味着无论应聘者全序序列中的那个序列出现,程序都可以比较出两个应聘者原创 2013-10-14 08:31:07 · 2168 阅读 · 0 评论 -
算法导论 4-6
4-6Table of Contents1 题目2 分析与解答1 题目VLSI测试Diogenes教授有n个被认为是完全相同的VLSI芯片,原则上他们是可以互相测试的。教授的测试装置一次可测二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结原创 2013-09-13 16:38:04 · 1826 阅读 · 1 评论 -
算法导论 4-3
1 题目参数传递的代价整个这本书中,我们都假定过程调用中的参数传递所花时间是常数,即使所传递的参数是N个元素的数组也是一样。这个假设对大多数系统都是有效的,因为当参数为数组时,所传递的只是指向该数组的指针,而不是该数组本身。本题讨论三种参数传递策略:数组是由一个指针来传递。时间=Θ(1)。参数数组通过复制而传递。时间Θ(N),N是该数组的大小。一个数组在被传递时,仅拷贝调用过程原创 2013-09-10 14:57:57 · 3089 阅读 · 9 评论 -
算法导论 2.3-6(更正)
题目观察一下2.1节给出INSERTION-SORT过程,在第5~7行的while循环中,采用了一种线性查找策略,在已排序的子数组A[1...j-1]中(反向)扫描。是否可以用二分查找策略,来将插入排序的总体最坏情况运行时间改善至分析INSERTION_SORT(A)1 for j 2 do key 3 #将A[j]插入到原创 2013-05-08 16:53:35 · 2353 阅读 · 5 评论 -
算法导论 5.4-1
1 问题一个房间里必须要有多少人,才能让某人和你生日相同的概率至少为1/2?必须要有多少人,才能让至少两个人为7月4日的概率大于1/2?2 分析与解答P{n个人中有人与你生日相同} = 1-P{n个人中没有人与你生日相同} = 1-(364/365)n >=1/2所以(364/365)n n >= -1/log2 (364/365)n >= -lg2/l原创 2014-01-29 10:48:50 · 1740 阅读 · 1 评论 -
算法导论 5.3-5
1 问题证明程序PERMUTE-BY-SORTING的数组P中,所有元素都唯一的概率至少为1-1/n。2 分析与解答证明:P{所有元素都唯一} = n3(n3 -1)(n3 -2)…(n3 - n+1) / (n3)n= 1 * (n3 -1)/n3 * (n3 -2)/n3 …(n3 -n+1)/n3= 1*(1- 1/n3 )(1- 2/n3 )原创 2014-01-29 08:40:30 · 2055 阅读 · 0 评论 -
算法导论 5.3-6
1 问题解释如何实现算法PERMUTE-BY-SORTING,来处理两个或多个优先级相同的情况。亦即,即使有两个或多个的优先级相同,你的算法也必须产生一个均匀随机排列。2 分析与解答感觉就是遇到重复的就反复执行,但是不会证明它能产生均匀随机排列PERMUTE-BY-SORTING(A) n <- length[a] P[1] <- RANDOEM原创 2014-01-29 08:47:20 · 1642 阅读 · 0 评论 -
算法导论 5.1-3
1 题目假设你希望以各1/2的概率输出0和1。你可以自由使用一个输出0或1的过程BIASED-RANDOM。它以概率p输出1,以概率1-p输出0,其中02 分析与解答画出BIASED-RANDOM真值表输出值01概率1-pp基于BIASE-RANDOM真值表,画出独立的两次BIASED-RAND原创 2013-10-14 12:01:22 · 1995 阅读 · 0 评论 -
算法导论 5.3-4
5-3-4Table of Contents1 问题2 分析与解答1 问题Armstrong教授建议使用下列过程来产生均匀随机排列:PERMUTE-BY-CYCLIC(A)1 n n6 then dest 2 分析与解答这段代码得到的数组B实际是将A随机循环右移n位,显然是不能得到A的所有排列的,所以不是均匀随机排列。由于P原创 2014-01-22 14:08:08 · 1862 阅读 · 0 评论 -
算法导论 4.1-1
问题证明的解为O(lgn)分析证明:假设递归式的解为O(lgn),则所以存在n0和c,使(当n>=n1,{n1:clg(n1+2) >= clg(n0+1) + (1-c)})上式不能证明T(n) = O(lg),所以需要调整猜测,从上式中看出就差一个常数2,所以在猜 测中减去一个常数b,即T(n)=O(lg(n-b))。则有,存在n0和c,使T(n)原创 2013-07-11 10:20:51 · 1902 阅读 · 2 评论 -
算法导论 5.2-3
1 题目利用指示器随机变量来计算掷n次骰子总和的期望值。2 分析与解决令X为一个随机变量,其值等于掷n次骰子点数的综合。令X_ ij 对应于第i次掷骰子得到的点数是j这个时间的指示器随机变量。所以Xij = I{第i次掷骰子得到的点数是j},并且X=∑i=1n ∑j=16 jXij 。E(X)=E(∑i=1n ∑j=16 jXij )= E(∑j=16 jX原创 2013-11-11 18:04:21 · 1783 阅读 · 0 评论 -
算法导论 5.2-1 5.2-2
1 题目在HIRE-ASSISTANT中,假设应聘者以随机顺序出现,正好雇用一次的概率是多少?正好雇用n次的概率是多少?正好雇用两次的概率是多少?2 分析与解答正好雇用一次只有最有资格的面试者第一个出现的情况下成立,所以概率为(n-1)!/n!=1/n。正好雇用n次的情况是面试人的资格正好从低到高排列,所以概率为1/n!。正好雇用两次的情况是第二有资格的面试原创 2013-11-11 17:35:04 · 1881 阅读 · 3 评论 -
算法导论 5.1-2
1 题目描述RANDOM(a,b)过程的一种实现,它只调用RANDOM(0,1)。作为a和b的函数,你的程序的期望运行时间是多少?2 分析与解答RANDOM(0,1)以等概率生成0或1,将区间[a,b]中的整数以2进制表示就可以只用0和1来表示区间中的任意数,再设[a,b]中的整数有n位,那么使用RANDOM(0,1)就可以生成n位二进制整数的全集,而区间[a,b]原创 2013-10-14 10:32:55 · 1666 阅读 · 0 评论 -
算法导论 5.3-3
1 问题假设不是将元素A[i]与子数组A[i…n]中的随机一个元素相交换,而是将它与数组任何位置上的随机元素相交换:PERMUTE-WITH-ALL(A)1 n <- length[A]2 for i <- 1 to n3 do swap A[i] A[RANDOM(1, n)]这段代码会产生均匀随机排列吗?为什么会?或为什么不会?原创 2013-11-19 16:50:56 · 2358 阅读 · 0 评论 -
算法导论 5.3-2
1 题目Kelp教授决定写一个过程来随机产生一个非同一排列的任意排列。他提出了如下的过程:PERMUTE-WITHOUT-IDENTITY(A)1 n <- length[A]2 for i <- 1 to n-13 do swap A[i] A[RANDOM(i+1, n)]这段代码实现了Kelp教授的意图了吗?2 分析与解答原创 2013-11-19 12:21:06 · 1907 阅读 · 1 评论 -
算法导论 5.3-1
1 问题Marceau教授对引理5.5证明过程中使用的循环不变式表示异议。他对在第一次迭代之前循环不变式是否为真提出质疑。他的理由是人们可以容易地宣称空数组不包含0排列。因此空数组包含0排列的概率应该是0。所以第一次迭代之前循环不变式无效。请改写过程RANDOMIZE-IN-PLACE,使其相关的循环不变式在第一次迭代之前对非空数组仍使用,并为你的过程修改引理5.5的证明。原创 2013-11-19 10:59:39 · 1571 阅读 · 1 评论 -
算法导论 5.2-4
1 题目利用指示器随机变量来解决帽子保管问题(hat-check problem):有n为顾客,他们每个人给餐厅负责保管帽子的服务生一顶帽子。服务生以随机的顺序将帽子归还给顾客。请问拿到自己帽子的客户的期望数目是多少?2 分析与解答设X是拿到自己帽子的客户的数目的随机变量。Xij 是第i位客人拿到第j位客人帽子这个事件的指示器随机变量,即Xij = I{第i位客人拿原创 2013-11-18 11:17:09 · 1915 阅读 · 0 评论 -
算法导论 5.2-5
1 题目假设A[1..n]是有n个不同的数构成的的数组。假设A的元素选自上的一个均匀随机排列。利用指示器随机变量来计算A中逆序对的期望数目。2 分析与解答设X为A中逆序对的数目的随机变量,指示器随机变量Xij = I{(i,j)是A的逆序对}。那么X=∑i=1n ∑jXij,所以E(X)=∑i=1n ∑jE(Xij)=∑i=1n ∑jPr{(i,j)是A原创 2013-11-18 11:44:17 · 1536 阅读 · 0 评论 -
算法导论 4.2-3
1 题目画出T(n)=4T(⌊ n/2 ⌋)+cn的递归树,并给出其解的渐近确界,其中c是一个常数。然后,用代换法证明你给出的界。2 分析与解答证明:忽略上下取整,给出T(n)=4T(n/2)+cn的递归树:从递归树中可以得出以下结论:递归树的高度为lg n;深度为i(i i cn;深度为i的结点数为4i;深度为lg n的所有叶子的代价和为Θ(4原创 2013-08-27 15:30:55 · 3976 阅读 · 0 评论 -
算法导论 4.2-2
1 题目利用递归树来证明递归式T(n)=T(n/3)+T(2n/3)+cn的解是Ω(nlg n),其中c是一个常数。2 分析与解答证明:因为要证明T(n)的渐近下界,并且递归树叶子的深度是不同的;所以需要画出T(n)的递归树的深度最浅的叶子(称为leaf1 )作为参考。从递归树中可以得到以下结论:leaf1 的深度为log3 n;深度从0到log原创 2013-08-27 12:37:20 · 3823 阅读 · 0 评论 -
算法导论 4.2-1
1 题目利用递归树来猜测递归式T(n)=3T(⌊ n/2 ⌋)+n的一个好的渐近上界,并利用 代换法来证明你的猜测。2 分析与解答证明:忽略上下界,假设当n=1时,T(1)=1。建立递归式T(n)=3T(n/2)+n的递归树:根据递归树可以得到如下结论:递归树的深度为\logn;第i层的结点数为3i;除最后一层,第i层的代价(3/2)in;最原创 2013-08-26 08:39:08 · 3179 阅读 · 0 评论 -
算法导论 3-5
问题某些作者定义的方式和我们的略有不同,可以用来表示这种定义。若存在正常数c使f(n)>=cg(n)>=0对无穷多的整数n成立,则说。a)说明渐近非负的两个函数f(n)和g(n),要么f(n)=O(g(n)),要么f(n)=(g(n)),要么二者都成立,然而用代替时并不成立。b)请描述用代替以刻画程序运行时间的潜在有点和缺点。某些作者定义的O也略有不同,设为O'。称f(n)=O'(原创 2013-07-08 10:43:22 · 1426 阅读 · 0 评论