zoukankan      html  css  js  c++  java
  • 算法导论第五章习题答案(第三版) Introduction to Algorithm

    Exercises

    5.1-1

    应聘者是随机出现的,如果总是可以决定哪一个应聘者最佳,那么就意味着对任何一种应聘序列,总能知道哪一个最好的,这也就意味着我们能过比较任意的两个元素,必然也就知道了应聘者的全部次序。

    5.1-2

    Randome(0,1)只能产生0或者1,恰好二进制只有0或者1,故可以利用Random(0,1)产生Random(a,b)的每一位,计算b的位数,如果生成的数不在[a,b]范围内,就重新生成。

    5.1-3

    调用两次BASED-RANDOM,调用两次后,都产生1的概率是p2,都产生0的概率是(1-p)2,而产生一个0,一个1的概率是2p(1-p)

    [E[x] = sumlimits_{i = 1}^n {2p(1 - p){{(1 - 2p(1 - p))}^{i - 1}}} = frac{1}{{2p(1 - p)}}](几何概率公式)

    5.2-1

    第一个就是最佳候选人的时候只需要雇佣一次,所以是1/n。只有按照最佳递增的次序出现的时候,才需要雇佣n次,而共有n!中序列,所以应是1/n!

    5.2-2

    第一次雇佣的一定是第一个应聘者,第一个应聘者为的rank值为i的概率是1/n,那么最优的应聘者应该是比第一个rank值大的应聘者中第一个出现,概率为1/(n-i)。所以正好雇佣两次的概率应该为:[p = sumlimits_{i = 1}^n {frac{1}{n} cdot frac{1}{{n - i}}}  = frac{1}{n} cdot ln (n - 1)]

    5.2-3

    [E[X] = E[sumlimits_{i = 1}^n {{x_i}]}  = sumlimits_{i = 1}^n {E[{x_i}]}  = sumlimits_{i = 1}^n {(frac{1}{6} cdot (1 + 2 + 3 + 4 + 5 + 6))}  = frac{{7n}}{2}]

    5.2-4

    帽子核对问题

    Xi=1的情况下,表示这个人拿到帽子,每个人拿到帽子的可能性斗士1/n,而E[X]=1/n,共有n个人,所以拿到自己顾客帽子的期望数是1。

    5.2-5

    定义指示器随机变量Xij,若其为1,则表示(i,j)为A的逆序对,因为A的构成是均匀分布,那么E[Xij]=1/2。所以数学期望为:

    [E[X] = sumlimits_{i = 1}^{n - 1} {sumlimits_{j = i + 1}^n {{X_{ij}}} }  = sumlimits_{i = 1}^{n - 1} {sumlimits_{j = i + 1}^n {frac{1}{2} = frac{{n(n - 1)}}{4}} } ]

    5.3-1

    将循环不变式里的第一次循环拿出来即可,循环不变式变为:

    在for循环的第i次迭代之前,对于i=2...n,对每个可能的(i-1)排列,字数组A[1...i-1]包含这个这n个元素中的k个元素的序列,并且不重复。一共有n!/(n-k)!中可能的k排列。

    初始化条件改为:对每个可能的1排列,字数组A[1..1]包含这个1排列的概率是1/n。

    5.3-2

    不能实现。

    Kelp教授的算法也不能产生一些其他的排列,例如:当n=3的时候,可以产生与原先不同排列的5中排列,而第一遍循环的时候第一个元素可以与第二或第三交换,第二次循环,第二个元素只可以与第三个元素交换。总共只有2种排列。

    5.3-3

    不能产生均匀排列,因为产生每个排列的概率是不同的,当n=3时,会有27中排列,但是实际上只会有6中排列,因为每个排列概率不同,所以不会产生均匀随机排列。

    5.3-4

    B[(i+offset) mod n]=A[i],这是一个循环,显然可以每个元素A[i]出现在B中任何特定位置的概率是1/n。但是却不是均匀随机排列,因为你并不能保证每个位置都被赋值了,会有重复。

    5.3-5

    [P = frac{{{ m A}_{{n^3}}^n}}{{{{({n^3})}^n}}} = frac{{{n^3}!}}{{({n^3} - n)!{{({n^3})}^n}}}]

    5.3-6

    增加判断过程,如果生成的优先级与前面有重复,就重新生成一个优先级rank。

    5.3-7

    RANDOM-SAMPLE(m,n)

    if m= =0

      return Ø

    else S = RANDOM-SAMPLE( m-1 , n-1 )

      i=RANDOM( 1 , n )

      if i∈ S

        S=S ∪ { n }

      else S=S ∪ { i }

      return S

    Thinking Problems

    5-1

    a.令Xi表示第i次操作后计数器的增量

    [P{ {X_i} = 0}  = 1 - frac{1}{{{n_{i + 1}} - {n_i}}}]

    [P{ {X_i} = {n_{i + 1}} - {n_i}} = frac{1}{{{n_{i + 1}} - {n_i}}}]

    E[Xi]=1

    执行n次后,计数器所表示的期望值是:(sumlimits_{i = 1}^n 1 = n)

    b.

    [D[X] = E[{X^2}] - E{[X]^2}]

     所以(D[{X_i}] = {n_{i + 1}} - {n_i} - 1),所以当ni=100i时,计数器所表示的数的方差是99n。

    5-2

    a.定义一个标志数组,若某元素已经被查看过,则被标记为1,否则为0,另定义count变量,记录标记数组中1的个数,当数目等于n的时候,终止。

    b.定义X需要查找的次数,则(E[A] = sumlimits_{i = 1}^infty {i cdot frac{1}{i}} cdot frac{1}{n} cdot {(1 - frac{1}{n})^{i - 1}} = n)(根据几何分布概率公式)。

    c.因为有k≥1个下标使得A[i]=x,那么查找到相应元素的概率是k/n,所以显然必须挑选A的下标数目是n/k。

    d.设Xi表示第i次检查是个新元素

    [E[{X_i}] = sumlimits_{j = 1}^infty {j cdot } {(frac{{i - 1}}{n})^{j - 1}}(frac{{n - i + 1}}{n})]

    X=X1+X2+X3+...+Xn-1+Xn=∑E[Xi]

    e.平均情况:(E = sumlimits_{i = 1}^n {i cdot frac{1}{n}} = frac{{n + 1}}{2})

     最坏情况为:n。

    f.平均情况:(E = sumlimits_{i = 1}^{n - k} {i cdot frac{k}{n}{{(frac{{n - k}}{n})}^{i - 1}}} )

    最坏情况:n-k。

    g.运行时间都是n。

    h.k=0时,最坏和期望都是n。

       k=1时,最坏是n,期望是(n+1)/2。

     k>1时,最坏是n-k,期望是O(n/k)。

    i.第二种方法较好,时间复杂度最小,与第三种时间复杂度一样,还不用随机化数组。

     (若有错误和不足,欢迎大家积极指正!)

  • 相关阅读:
    推荐系统 蒋凡译 第一章 引言 读书笔记
    神经网络与深度学习 邱锡鹏 第5章 卷积神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第4章 前馈神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第3章 线性模型 读书笔记
    神经网络与深度学习 邱锡鹏 第2章 机器学习概述 读书笔记
    神经网络与深度学习 邱锡鹏 第1章 绪论 作业
    神经网络与深度学习 邱锡鹏 第1章 绪论 读书笔记
    算法笔记 上机训练实战指南 第13章 专题扩展 学习笔记
    算法笔记 第13章 专题扩展 学习笔记
    算法笔记 上机训练实战指南 第11章 提高篇(5)--动态规划专题 学习笔记
  • 原文地址:https://www.cnblogs.com/hlj-ljz/p/3387081.html
Copyright © 2011-2022 走看看