大數據算法: 亞線性算法概述

–中國大學生MOOC 王宏志老師大數據算法 聽課筆記–

什麼是亞線性算法?

亞線性算法與線性算法相比,顧名思義區別就在“亞”字上。表示時間/空間複雜度低於線性算法的一種算法的統稱。

具體定義:時間/空間/IO/通訊/能量等消耗o(輸入規模)。
【注】:消耗爲o(輸入規模)而非O(輸入規模)。

亞線性

水庫抽樣算法

水庫抽樣是一種經典的亞線性空間算法。

問題背景:
有時候我們需要在海量數據中進行均勻的抽樣,但是由於海量數據無法進行存儲,所以我們只能讓它從我們面前流過一次。

問題描述:
輸入:一組數據,其大小未知
輸出:這組數據的k個均勻抽樣
要求:

  1. 僅掃描數據一次
  2. 空間複雜性爲O(k) 和抽樣大小有關,和整個數據無關
  3. 掃描到數據的前n個數字時(n>k),保存當前已掃描數據的k個均勻抽樣

算法步驟:

  1. 申請一個長度爲k的數組保存抽樣。
  2. 保存首先接收到的k個元素
  3. 當接收到第i個新元素t時,以k/i的概率隨機替換A中的元素(即生成[1,i]間隨機數j,若j<=k,則以t替換A[j])

算法原理:
當接收到第i個新元素t時,以k/i的概率保存在水庫中,所以在接收第i+1個數時,第i個數還能保存在水庫當中的概率是1-1/(i+1),因爲在接收到第i+1個數時要以k/(i+1)的概率隨機替換,而第i個數被選中的概率是1/k,它們相乘即爲1/(i+1)。1/(i+1)爲第i個元素被換出水庫的概率,所以1-1/(i+1)就是在接收第i+1個元素時第i個元素在數組中的概率。同理,在接收第i+2個元素時,第i個元素讓然保留在水庫中的概率爲1-1/(i+2)。以此類推,當接收第n個元素時,第i個元素保存在水庫中的概率爲1-1/n。只有這些事件都放生了,最終第i個元素才能保留在水庫當中。因此第i個元素最終被保留在水庫抽樣當中的概率,就是這些事件的概率的乘積,即
在這裏插入圖片描述
算法僞代碼:

Init : a reservoir with the size: k
 
for i= k+1 to N
 
    M=random(1, i);
 
    if( M < k)
 
     SWAP the Mth value and ith value
 
end for 

平面圖的直徑近似算法

平面圖的直徑近似算法是一種經典的亞線性時間算法。
【註釋】:在圖論中,平面圖是可以畫在平面上並且使得不同的邊可以互不交疊的圖。
【註釋】:近似算法是計算機科學中算法研究的一個重要方向。所謂“近似”,就是指結果不一定是最優的,但是也在可以承受的範圍內,而且可以比精確求解消耗更少的資源。

問題背景:
當輸入的距離矩陣過大時,我們無法通過正常的算法對其進行求解。所以我們希望通過近似算法對其求得一個儘量相似的解。

問題描述:
輸入:m個頂點的平面圖,任意兩點之間的距離存儲在矩陣D中,即點i到點j的距離爲Dij

  1. 輸入大小是n=m的平方
  2. 最大的Dij是圖的直徑
  3. 點之間的距離對稱且滿足三角不等式

輸出:該圖的直徑和距離最大的Dij
要求:運行時間爲o(n)

算法步驟:

  1. 任意選擇k<=m
  2. 選擇使得Dkl最大的l
  3. 輸出Dkl和(k, l)

算法原理:
根據三角不等式,我們可以得到Dij <= Dik + Dkj,又因爲Dkl是我們所求最大值,所以有Dik <= Dkl,Dkj <= Dkl.可以得到Dij <= Dkl+Dkl <= 2Dkl。得到近似比2。
在這裏插入圖片描述

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