《算法导论》习题5.3-1 ~ 5.3-7

《算法导论》习题 5.3.1 - 5.3.7

 5.3-5 带星号我抄了一下题目, 5.3-6 比较有意思我抄了一下题目, 其他的题可以自己对照书(原书第三版).

5.3-1

  直接考虑第2次循环前, 第1次循环后第1个位置的元素是原集合1 ~ n中任意一个元素的概率总是 1 / n 1/n 1/n, 所以可以以此为循环不变式的起点而不必使用空集合和0排列。

5.3-2

  容易证明该算法一定不会产生恒等排列, 因为第一次循环后第一个元素一定是原排列中2 ~ n中的某个元素。现在证明Kelp教授没有实现均匀随机排列。
  其实最简单的证明方法是给出一个n = 3的特例, 即当输入为1,2,3时, 输出为2,3,1(p = 0.5)或3,1,2(p = 0.5), 2, 1,3出现的概率为0,显然无法产生一个均匀随机排列。但是这里为了锻炼使用循环不变式,还是用它来进行以下代数上的证明。
  Kelp教授的意图为, 经过随机排列之后, 任意一个非恒等排列出现的概率均为 1 / ( n ! − 1 ) 1 / (n! -1 ) 1/(n!1)
  还是尝试使用循环不变式证明。假设第i次循环之后, 对于任意非恒等子排列出现在前 i 位的概率为 1 / ( A n i − 1 ) 1 / (A_n^i -1 ) 1/(Ani1)。如果假设成立, 当迭代到 i = n − 1 i = n - 1 i=n1时,Kelp教授的目的实现。相反的, 如果存在某一个i导致该假设不成立, 那么即可另n = i + 1, 即至少对于该n, Kelp教授无法实现其目的, 反证得证
  容易观察到, 当第一次循环结束后, 第1个位置是任意非恒等1元素排列概率为 1 / ( n − 1 ) 1 / (n -1) 1/(n1), 满足假设。现在证明下一次循环后该假设不成立。
  设事件 E 1 E_1 E1表示i次循环后, 对于任意的特定非恒等子排列,该排列的前 i - 1位出现在数列的前 i - 1 位;事件 E 2 E_2 E2表示该特定非恒定子排列的第 i 位出现在数列的第i位置。当当且仅当 E 1 , E 2 E_1, E_2 E1,E2同时发生的时候该特定顺序的前i位出现在数列的前i位。该事件的概率为 P ( E 1 ⋂ E 2 ) = P ( E 2 ∣ E 1 ) ∗ P ( E 1 ) P(E_1 \bigcap E_2) = P(E_2 | E_1) * P(E_1) P(E1E2)=P(E2E1)P(E1)。事件 E 1 E_1 E1发生 => 特定顺序的第 i 位在数列的 i ~ n位中。 事件 E 2 ∣ E 1 E_2 | E_1 E2E1发生的概率是 ( n − i ) / ( n − i + 1 ) ∗ 1 / ( n − i ) = 1 / ( n − i + 1 ) (n - i) / (n - i + 1) * 1 / (n - i) = 1 / (n - i + 1) (ni)/(ni+1)1/(ni)=1/(ni+1), 显然 1 / ( n − i + 1 ) ∗ 1 / ( A n i − 1 − 1 ) ≠ 1 / ( A n i − 1 ) 1 / (n - i + 1) * 1 / (A_n^{i - 1} - 1) \ne 1 / (A_n^i - 1) 1/(ni+1)1/(Ani11)=1/(Ani1)。所以假设无法递推,反证得证。

5.3-3

  该代码显然不会产生均匀随机排列, 证明思路和之前的非常类似, 使用循环不变式即可证明, 这里略。

5.3-4

  这个题的意思我没有特别明确。容易证明 A [ i ] A[i] A[i]出现在 B B B上任何特定位置的概率都是 1 / n 1/n 1/n, 因为 d e s t dest dest取1 ~ n中任何一个数的概率是相同的, 但是该算法的有一个问题是无法保证每次循环不会修改B上已经被赋值的位置, 该算法甚至无法正常工作,亦没有讨论的必要了。

*5.3-5

  题目:证明对于元素为1 ~ n的数列,随机给每一个元素生成 1 ~ n 3 n^3 n3整数标号, n个元素每个标号都不同的概率至少是 1 − 1 / n 1 - 1/n 11/n.
  设事件 E i E_i Ei为第i个生成的标号与之前所有标号都不同, 那么每个标号都不同的概率就是
P ( E ) = P ( E 1 ⋂ E 2 ⋂ E 3 . . . . . ⋂ E n )   即 P ( E ) = P ( E 1 ) ∗ P ( E 2 ∣ E 1 ) ∗ P ( E 3 ∣ E 2 ⋂ E 3 ) . . . . ∗ P ( E n ∣ E n − 1 ⋂ . . . ⋂ E 1 ) ;   即 P ( E ) = ∏ i = 1 n n 3 − i + 1 n 3 = ∏ i = 1 n − 1 n 3 − i n 3 P(E) = P(E_1 \bigcap E_2 \bigcap E_3 ..... \bigcap E_n) \ 即 \\ P(E) = P(E_1) * P(E_2 | E_1) * P(E_3| E_2 \bigcap E_3) .... * P(E_n | E_{n-1} \bigcap ...\bigcap E_1); \ 即\\ P(E) = \prod_{i = 1}^{n}\frac{n^3 - i + 1}{n^3} = \prod_{i=1}^{n-1}\frac{n^3-i}{n^3} P(E)=P(E1E2E3.....En) P(E)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值