算法导论学习笔记(四) 初稿

来源:互联网 发布:制造业大数据 编辑:程序博客网 时间:2024/04/30 03:54

5.1 雇用问题

  • 平均运行时间:所有可能输入分布取平均值的运行时间
  • 期望时间:随机算法的运行时间
  • 当概率分布是在算法的输入上时,讨论平均运行时间,当算法本身做出随机选择时,讨论期望运行时间

5.2 指示器随机变量

个人感觉与独立重复试验类似

  1. 核心:将问题分解为子问题

  2. 应聘者问题的指示器随机变量解法

    E[X]=x=1nxP{X=x}=i=1nE[xi]=i=1n1/i=lnn+O(1)

  3. 关于例题

    • 帽子核对问题
      对于每个顾客,拿到自己的帽子的概率为1/n,故其数学期望为ni=11/n=1

    • 逆序对问题
      对于每一组数的组合,都有一半的概率为逆序,故其数学期望为C2n12=n(n1)/4

5.3 随机算法

  1. 含义
    让分布固定,而通过特定算法实现随机化。

  2. 随机排列数组

    • PERMUTE-BY-SROTING

      • 即为每一个数组元素随机分配一个rank值,并以rank重新排列这些元素。
      • 通过条件概率可证明每种分配的可能均为1/n!
      • 通过5.3-4可知,对于每个元素A[i],排在任一位置的概率均为1/n,并非是证明均匀随机排列的充分条件
    • RANDOMIZE-IN-PLACE

      • 即对于每个元素,都与它后面(包含自身)的元素相交换。
      • 证明

        • 初始化:初始化赋值i=2(涉及讨论i=1的空数组,故先显式交换一次),即对于每个1排列,长度为1的子数组包含这种排列的概率为 (n1)!/n!=1/n,第一次循环迭代前循环不变式成立。

        • 保持:假设i次迭代前每种(i-1)排列出现概率为(ni+1)!/n!,则第i次迭代后,概率为1ni+1(ni+1)!n!

        • 终止:终止时,i=n+1,子数组任一排列概率为1/n!

5.4 特征序列

  • 问题:抛一枚标准硬币n次,求最长连续正面的数学期望

  • 思路: 类似夹逼准则

  • 证明过程:

    • O(lgn)

      • 设连续掷硬币k次,k=2lgn。

      • 起始于某一位置,长度**大于等于**k的序列至多有n-k+1个,故开始于任一位置的概率总和小于等于

        i=1nk+11/2ki=1nk+11/n2<i=1n1/n2=1/n

      • 由定义知

        E[L]=j=0njP{Lj}=j=0k1jP{Lj}+j=knjP{Lj}

        其中j为长度的具体值。

      • 显然,当j较大时P{Lj}较小,当P{Lj}较大时j较小,故

        E[L]<j=0k1kP{Lj}+j=knnP{Lj}<kj=0k1P{Lj}+1

        又因为k1j=0P{Lj}<1,原式小于O(k)=O(lgn)

    • Ω(lgn)

      • 把n次投掷划分为n/s组,每组掷s次,s取lgn/2。

      • 显然任一一组,结果为同一面(假设为正面)概率为

        1/2s=1/n

      • 故每组都不是同一面概率为

        (11/n)n/s1e(n/s1)/n=O(elgn=O(1/n))

      • 对j值较小的部分,其值忽略不计,因此

        j=0njP{Lj}j=snjP{Lj}sj=snP{Lj}s(1O(n))=Ω(lgn)

  • 结论:特征序列长为lgn。

  • 指示器随机变量的近似结果:nk+12k,且带入k=lgn时值近似符合要求。

5.5 在线雇佣问题

  • 问题:只雇佣一次应聘者,并且每次应聘必须决定是否雇佣这个人。

  • 实现思路:选择一个正整数k,面试并拒绝前k个应聘者,并雇佣后面第一个分数比前k个应聘者中分最高者还高的人,若没有则雇佣最后一个人。问题转化为寻找k的最优值

  • 过程:

    • P{Si}表示应聘者为第i时面试成功的概率,Bi表示最佳面试者为第i人的概率,M(j)表示前1~j人中的最高分,Oi表示从k+1到i-1的应聘者都小于M(k)的概率。

    • 显然

      P{S}=i=k+1nP{Si}

      P{Bi}=1/n

      P{Oi}=k/(i1)

      P{Si}=P{Bi}P{Oi}

    • 解得 P{S}=kn(lnnlnk)

    • 求导,得k=n/e

0 0
原创粉丝点击