算法(3)概率分析与随机算法

要点:

  • 指示器随机变量
  • 随机算法 2个
  • 雇佣问题与在线雇佣问题(待完善)

指示器随机变量

基本定义

  • 给定一个样本空间--集合S(样本空间中包含了所有可能的基本事件, 基本事件是互斥的且不能再分割的最小事件, 所有事件都是1~n个基本事件的和), 给定一个事件A, 事件A对应的指示器随机变量I{A} = {1: 如果A发生; 0: 如果A不发生;}; (I{A}有时候写成Ind{A})
  • 例子: 对于抛掷一枚硬币, 正面朝上的期望次数. 样本空间S = {H, T}; Pr{H}=1/2, Pr{T}=1/2; 那么正面朝上的期望次数是 E[I{H}] = Pr{H} = 1/2; (最常用定理: 指示器随机变量I{A}的数学期望=Pr{A})
  • 在抛掷了n次硬币中, 求正面向上的次数的数学期望.
    • 传统解法, 定义随机变量X表示向上的次数(抛掷n次时), X是一个集合, X={0, 1, 2...,n} E(X) = Σ[x=0~n] x*Pr{X=x} //本质上是加权求和;
    • 指示器解法, 同样的X, 我们认为X=X[1]+X[2]+...+X[n]个独立事件组成, 每个独立事件产生1/n的结果量, 总体=个体结果的和 → 总体的期望=个体结果的和的期望;
    • E(X) = E[ Σ[x=1~n] Ind{X[1]} ] = Σ[x=1~n] E[ Ind{Xi} ] = Σ[x=1~n] (1/2) = n/2;

两个随机算法

  • 我们已经听过的算法设计思路: 分而治之(递归), 今天学习的是随机算法, 只有两个, 很容易掌握; 随机算法主要可以帮助解决算法输入的差异太大问题, 从而把时间复杂度的方差控制得比较小;

  • Permute-by-Sorting(A)
    length = A.length
    P[length] is a new empty array
    for i=1 to length,
    P[i] = RANDOM(1, length^3) //P[i] gets a random value from [1, length^3]
    sort A, using P as sort keys

  • Randomize-in-Place(A)
    length = A.length
    for i=1 to length,
    swap A[i] and A[RANDOM(i,length)

你可能感兴趣的:(算法(3)概率分析与随机算法)