Solution to CLRS Chapter 5

5.1-1
一开始没有看懂题意,原来这里面有一个术语total order是全序的意思。
题意是:如果我们总能判断哪一个candidate是best的,那就意味着这些rank满足着全序关系
全序关系有几点:
自反性:自己能和自己比较
对称性:A不如B,B一定比A更“best”
传递性:A比B“best”,B比C“best”,那么A一定比C“best”
这题中,前两点是显而易见的,关于第三点,如果A比B厉害,且在B之后,那么就会录用B,如果B后有C比B厉害,那么就录取C,这就意味着C一定比A厉害,因为这个原则就是录用更加厉害的人。

5.1-2
这题超级有意思的!
现在有一个方法,调用它可以等概率地得到0或1,求如何实现一个等概率得到区间[a.b]所有整数的方法
咋看之下没什么思路。这种情况下,可以这么思考:
已知什么? 等概率的0,1发生器
想要什么? 等概率的[a,b]发生器
两者是否存在什么联系? 暂时没想到
0,1发生器能让你联想到什么? 1,硬币 2,连续抛硬币的实验 3,记录实验结果能够得到一个01串
4,01串其实可以转换成二进制数 5,二进制数可以转换成十进制数!!!!
6,十进制数可以移动到区间[a,b]!!!!!!!
这样问题就解决了!
我们可以先得到一个[a,b]的区间长度 N = b - a,这个然后取长度为lgN + 1的二进制串对于二进制串的每一个位,都用Random(0,1)来得到,这样子,就能够组成后得到一个在0-N范围内的等概率的数。但是有些数超出了N,这个时候就要重新进行构造(但是这并不影响得到0-N的数的概率是相等的,只是0-N的数出现概率总和并不是1)所以,对于这个算法来说,其时间复杂度在于这个循环会进行几次?
我们可以这样来刻画这个问题,首先,记长度为b,那么再一次构造的所有情况中,能够终止的概率是N/(2^b),剩下的都是不能终止,记这个“能够终止”的概率为p=N/(2^b)。循环终止的时候,得到一个0-N之间的数,在此之前,都得到N+1-2^b-1的数,那个模型,就是那个几何分布的模型!!(前k-1次都失败,第k次成功)所以这个期望次数是1/p,那么这个时间复杂度就是
这个是这个算法的期望复杂度

这题目真的很有意思,也让我对随机算法有了一定的概念。在我看来,随机算法应该是一种终止条件的出现是用概率的刻画的一种算法,这样一来,往往就符合几何分布的模型。这种复杂度是一种期望复杂度,而刻画随机现象,期望值是一个比较合理的角度,而不是像传统的那样计算worst-case和best-case。

5.1-3
这也是一个非常有意思的题目!
给定一个不均匀的0-1随机发生器,问如何转换成均匀的0-1随机发生器。
产生1的概率是p,0的概率是1-p,受到上面一道题目的启发,我让他产生两次那么就有如下的分布

0
1
0
(1-p)(1-p)
p(1-p)
1
p(1-p)
p*p
注意到其中01和10是两个概率相等的事件,那么就可以用01来表示0,10来表示1,这样,0和1出现的概率就相等了(但是它们的概率和并不是1)
那么这个算法的时间复杂度是多少呢?
其实根据上面一题,可以抽象出一个模型,一个算法出现终止条件的概率设为p,则不出现终止的概率为(1-p),由于这个模型符合的是几何分布,所以他的期望循环次数是1/p,每一次循环,设其代价为c,那么整体的期望复杂度就是

那么具体到这道题而言,终止的条件是出现01或者10,其概率是0.5,每次循环的花费是2c,都是常数,所以整体的时间复杂度也是一个常数O(1)

5.2-1
只选一个的概率必然是第一个就选了rank最高的人,这个概率是1/n
雇佣n次,说明是以input是递增的形式,这样的概率是1/n!

5.2-2
这题如果是用排列组合来算的话,化简起来比较麻烦,但是如果用这里random indicator variable的话,就十分简洁!当然了,概率论的题目都比较烧脑子,这题用符号来表示的话,也需要有一个很好的角度,可以这么来理解:
第一个如果是rank 为i的人,雇佣了之后,由于 rank为n的人一定是要雇佣的,那么这样就有两个人了,为了不雇佣更多人,rank 大于i的人,必须在n的后面,那么n这个元素,排列在n-i个人的最前面的概率,是1/(n-i),而第一个人是i的概率就是1/n,那么整个事件{第i个人在第一位,且雇佣两个人}的概率,就是1/n*(1/(n-i)),只要把这个概率从1–n-1累加就可以了

5.2-3
单个骰子的期望时3.5,n个骰子的期望就是3.5n,挺简单的,但是没看出来要怎么去用indicator random variable

5.2-4
一个很经典的配对问题,n个帽子分给n个人,每个人问期望有多少个人拿到自己的帽子?
第i个人拿到自己帽子的概率是1/n,所以对所有n个i而言,总的期望就是1….
感觉这个答案有点反直觉,因为无论这个n有多大,或者多小,期望总是1……应该怎么理解呢?
我觉得是因为,随着n变大,每个人拿到自己帽子的概率也随之变小了。

5.2-5
先有序放好,则第i个数,可能有的逆序数对是1,2,…,i-1,那么分别对应的概率是1/i,因为要让出现k个逆序对,只要把i往k+1的位置一放就可以了,这样可以求得i的期望逆序对是(i-1)/2,那么总的n个这样的i,就有n(n-1)/4
这题的思想其实和上面的题目非常的类似,indicator random variable确实很简洁,和这个一起的,是一种怎么去放i的思想,比较奇妙,但是有难以说的清清楚楚。

NO PARTICULAR INPUT ELICITS ITS WORST-CASE BEHAVIOUR!!!

5.3-1
这道题目有点长,我理解的意思是:
Lemma5.5有一个逻辑上不明确的地方,它假定empty subarray包含0-permutaiton的概率是1,然而这只是一个“说法”,我完全也可以说empty subarray包含0-permutation的概率是0,这样Lemma5.5的loop invariant的基础就不再成立。接着,题目让你改进一下RANDOMIZE-IN-PLACE的pseudocode,使得loop invariant能够成立。
为了避免出现empty subarray的情况,其实只要处理一下第一个元素,然后再进入循环。为什么这样的Initialization是对的呢?因为长度为1的subarray必然包含1-permutation.之后的证明就完全同原来的证明。
按照我的理解,其实规定empty array一定包含0-permutation就是设置了一个sentinel,简化了代码。

5.3-2
按照我目前的理解,一个随机算法设计的是否合理,取决于其结果在理论上是否得到一个uniform random permutation
然而这道题并不能做到!相比较正确的算法,这个算法每次都将i元素和之后的n-i个元素做交换,“不和自己本身交换”。这样它的loop invariant就不能够维持了。到第i个元素,假设前面维持了一个(i-1)-permutation,到了i,其概率是
1/(n-i),两者的乘积不能够得到一个i-permutation,所以这是错误的。

5.3-3
这连续的3题其实是一个系列的,他们的目的就是为了加深对于RANDOM(i,n)的选取的理解。
这题问,将RANDOM(i,n)改成RANDOM(1,n),是否还能够生成uniform random permutation?
直觉上来说,这应该是错的,应为延续上面的思路,这个算法似乎并不存在loop invariant,因为第i次操作可以把之前的i-1的状态改变。但是如何真正的说明这个算法是错误的呢?我想到的一个角度是:证明某些序列生成的概率大于另外一些序列。
但是数学上的证明我没有做出来,我构造了一个特例,n=3,原来是123,我发现这个序列经过三次循环之后,出现的频率是不一样的,比如123出现了4次,132出现了5次。事实上,从中可以得出一定的规律,做了n次Random,总的可能性有n^n种,但是排列一共只有n!种,所以大部分情况下,不能够均匀的分配!

5.3-4
这个算法是一个超级巧妙的反例!!!!
之前,我有一种错觉,如果每一个元素在任何位置上出现的概率都是1/n,那么这样的算法应该满足uniform random permutation,但这是unsufficient的,这个算法就是反例!
算法的思想就是,在开始循环前,先得到一个随机的偏移量,然后将每一个元素,都按着这个相同的偏移量进行移动,不难证明,由于偏移量是在0-n-1随机分布的,所以每一个元素偏移到任何位置的概率都是1/n的,但是这样只能够得到有限的排列,即元素相对位置不变的n种序列,但是剩下的n!-n中排列产生的概率是0!!!!
这得太巧妙啦!!!!!!!

5.3-5
这道题对数学功底要求比较高,尤其是不等式的功底,涉及了伯努利不等式。
就理解层面而言,这个unique的概率还是比较高的,n=10的时候,就可以是90%的概率生成全不相同的序列

5.3-6
这个问题似乎很高深的样子,我想的比较直接,但同时很傻的方法,就是先用那些得到的已经不同的priority进行排序,然后对于那些相同priority的元素,重新给他们分配一个priority……这样子的时间复杂度也不会很高,因为上一题证明了元素不同的概率是很高的,所以这样应该也是可行的。如果说用其他的角度(不借助随机数)来排序这些相同key的元素的话,势必会造成一种确定性顺序。所以这样子的做法即使不是“完美解法”,应该也接近了!

5.3-7
从n个数字里面随机找一个m排列,可以这么做,从n个里面随机找1个元素,然后问题就转化成从n-1个元素里随机找一个m-1排列。但什么这样做是对的呢?
要证明这个产生uniform random m-permutation,就是要证明每一个排列产生的概率都是1/A(n m),首先,第一个数产生的概率是1/n,然后第二个数产生的概率就是1/(n-1),直到第m个数,为1/(n-m+1),将这些概率累乘,得到的即是1/A(n m),故这个算法是正确的。
这个算法的意义就在于,减少了对ramdom函数的调用。对于n远大于m的情况,是有价值的。

5.4打星章节,等这学期结束了再看。

这里Mark一下,现在的数学水平不到家,这学期正好概率论的课,等学期结束把这里看完

Problem

5-1 Probabilistic counting
这题的求解方法用的是indicator random variable。比较巧妙,但是更有意思的是这个题目本身!!
这题介绍了一种新的计数方法,或者说,这题更像是对传统计数方法的一个扩展。在损失了一定的精度的代价下,可以将计数的范围扩大到非常非常大!

5-2 Searching an unsorted array
未排序的数组找元素问题,看运气算法。。。。
(a)
RANDOM-SEARCH(A, key)
N = A.length
while N > 0
i = RANDOM(1, N)
if A[i] == key
return i
swap(A[i], A[N])
N = N - 1
return NIL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目前最全的算法导论第三版的答案 清晰度极好 另每章都有章节重点总结 在第二版基础上新增习题的解答详尽清楚 很适合 用这本经典教材的同学! Contents Revision History R-1 Preface P-1 Chapter 2: Getting Started Lecture Notes 2-1 Solutions 2-17 Chapter 3: Growth of Functions Lecture Notes 3-1 Solutions 3-7 Chapter 4: Divide-and-Conquer Lecture Notes 4-1 Solutions 4-17 Chapter 5: Probabilistic Analysis and Randomized Algorithms Lecture Notes 5-1 Solutions 5-9 Chapter 6: Heapsort Lecture Notes 6-1 Solutions 6-10 Chapter 7: Quicksort Lecture Notes 7-1 Solutions 7-9 Chapter 8: Sorting in Linear Time Lecture Notes 8-1 Solutions 8-10 Chapter 9: Medians and Order Statistics Lecture Notes 9-1 Solutions 9-10 Chapter 11: Hash Tables Lecture Notes 11-1 Solutions 11-16 Chapter 12: Binary Search Trees Lecture Notes 12-1 Solutions 12-15 Chapter 13: Red-Black Trees Lecture Notes 13-1 Solutions 13-13 Chapter 14: Augmenting Data Structures Lecture Notes 14-1 Solutions 14-9 iv Contents Chapter 15: Dynamic Programming Lecture Notes 15-1 Solutions 15-21 Chapter 16: Greedy Algorithms Lecture Notes 16-1 Solutions 16-9 Chapter 17: Amortized Analysis Lecture Notes 17-1 Solutions 17-14 Chapter 21: Data Structures for Disjoint Sets Lecture Notes 21-1 Solutions 21-6 Chapter 22: Elementary Graph Algorithms Lecture Notes 22-1 Solutions 22-13 Chapter 23: Minimum Spanning Trees Lecture Notes 23-1 Solutions 23-8 Chapter 24: Single-Source Shortest Paths Lecture Notes 24-1 Solutions 24-13 Chapter 25: All-Pairs Shortest Paths Lecture Notes 25-1 Solutions 25-9 Chapter 26: Maximum Flow Lecture Notes 26-1 Solutions 26-12 Chapter 27: Multithreaded Algorithms Solutions 27-1 Index I-1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值