定義:m個頂點的圖,任意兩點的距離儲存在矩陣d中,求兩點之間的最遠距離。
演算法:隨機選擇一行k,在這一行中找出最大的值作為直徑。
演算法分析:該演算法的近似比為2
d ij
≤dik
+dkj
≤dkl
+dkl
≤2dk
ld_ \leq d_ +d_ \leq d_ +d_ \leq 2d_
dij≤d
ik+
dkj
≤dkl
+dk
l≤2
dkl
定義:排序雙向有序鍊錶r,給定元素x,判斷x是否在r中。
這個r的資料結構,可以通過索引訪問元素意味著可以隨機抽取,並且每個元素都有指標可以訪問相鄰的有序元素。
演算法:1隨機在r中抽取θ(r
)\theta(\sqrt r)
θ(r
)個元素。構成集合s
2在s中找出p,q使得p≤x
≤p
p \leq x \leq p
p≤x≤
p且在s中p,q間沒有其他元素。
3在p元素開始搜尋x,搜尋到返回是。
演算法分析:
時間複雜度為o(n
)o(\sqrt n)
o(n
),演算法執行的時間為o(n
)o(\sqrt n)
o(n
)+(p,q間的元素個數)。s中的元素是隨機選取,pq以|s|/n的概率選取且是相鄰的,所以在r中pq間元素個數的期望為n/|s|
定義:判斷兩個簡單多邊形a,b是否相交
演算法:1 在a,b中等概率的選擇θ(n
)\theta (\sqrt n)
θ(n
)個頂點構成集合ca,
cb
c_a,c_b
ca,cb
2 在o(n
)o(\sqrt n)
o(n
)的時間內檢查ca,
cb
c_a,c_b
ca,cb
是否相交,如果不相交則生成一條分隔ca,
cb
c_a,c_b
ca,cb
的直線l
3 根據l判斷a,b是否相交
我們使用l來定義pa,
pb
p_a,p_b
pa,pb
a 是在l上a的點,a1,a2是a相鄰的兩個點如果這兩個點在於c
ac_a
ca在同側,則p
ap_a
pa為空。由於是簡單多邊形所以這兩個點只有乙個可能在c
ac_a
ca的另一側,我們這樣這個點的方向遍歷知道點再次通過l,我們將遍歷的點構成p
ap_a
pa。其大小為o(n
)o(\sqrt n)
o(n
)所以a,b 相交可以轉化為a與pb相交或者b與pa相交,現在將說明輸入判斷b與pa相交,首先判定cb和
pa
c_b和p_a
cb和pa
是否相交,再按照一開始的方法確定分隔線lb,通過lb生成qb,那麼b與pa相交等價於qb與pa相交,而兩者的期望規模都是o(n
)o(\sqrt n)
o(n)
所以我們可以在o(n
)o(\sqrt n)
o(n
)的時間內解決該問題。
演算法思想:
我們可以通過bfs精確的求出連同分量的個數,這樣每個點都要訪問一次,時間複雜度為o(n
d)
o(nd)
o(nd
),d為節點的最大度數。
我們可以通過隨機化的方法進行估算,節點u所在的連同分量的結點數即為n
un_u
nu,那這個點的權重為1/n
u1/n_u
1/nu
。這樣精確的連同分量的個數是所有點的權重相加,但是我們考慮到如果n
un_u
nu過大則對最後的貢獻很少,所以我們可以設定乙個閾值(2/ϵ
2/\epsilon
2/ϵ),當超過該值時我們停止bfs對該連同分量的搜尋。
演算法:隨機取s(θ(1
/ϵ2)
\theta(1/\epsilon^2)
θ(1/ϵ2
))個點進行bfs的搜尋,根據閾值與確定該點的權重,將這s個點的權重相加的到n,則連同分量的估計為nn/
snn/s
nn/s
演算法分析
時間複雜度:o(d
ϵ3lo
g(1/
ϵ)
)o(\fraclog(1/\epsilon))
o(ϵ3d
log(
1/ϵ)
)迴圈的輪數為1/ϵ
21/\epsilon^2
1/ϵ2
,每一輪訪問2/ϵ
2/\epsilon
2/ϵ個結點,在bfs的過程中代價為d/ϵ
d/\epsilon
d/ϵ.因為在bfs的過程中需要確定點是否被訪問所以要建立訪問節點的平衡二叉樹這樣插入、訪問的代價為log
(2/ϵ
)log(2/\epsilon)
log(2/
ϵ),最終證明出時間複雜度。
質量分析
p r[
∣c『−
c∣
>ϵn
]≤1/
3pr[|c`-c|>\epsilon n]\leq1/3
pr[∣c『
−c∣>ϵn
]≤1/
3
大資料演算法 亞線性演算法概述
中國大學生mooc 王巨集志老師大資料演算法 聽課筆記 亞線性水庫抽樣是一種經典的亞線性空間演算法。問題背景 有時候我們需要在海量資料中進行均勻的抽樣,但是由於海量資料無法進行儲存,所以我們只能讓它從我們面前流過一次。問題描述 輸入 一組資料,其大小未知 輸出 這組資料的k個均勻抽樣 要求 僅掃瞄資...
js載入時間線
建立document物件,開始解析web頁面。解析html元素和他們的文字內容後新增element物件和text節點到文件中。這個階段 document.readystate loading 遇到link外部css,建立執行緒載入,並繼續解析文件。遇到script外部js,並且沒有設定async d...
PostgreSQL 時間線解析
時間線 timeline 是pg乙個很有特色的概念,在備份恢復方面的文件裡面時有出現。但針對這個概念的詳細解釋卻很少,也讓人不太好理解。我們在此仔細解析一下。為了理解引入時間線的背景,我們來分析一下,如果沒有時間線,會有什麼問題?先舉個將資料庫恢復到以前時間點的例子。假設在乙個資料庫的執行過程中,d...