算法導論學習筆記(四) 初稿

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章