-
最小圓覆蓋
鎖定
最小圓覆蓋算法可以在線性時間複雜度內求出覆蓋n個點的最小圓。
- 中文名
- 最小圓覆蓋
- 外文名
- Minimum circle coverage
最小圓覆蓋算法步驟
②按順序把點一個一個的加入(一步一步的求前i個點的最小覆蓋圓),每加入一個點就進入③;
③如果發現當前i號點在當前的最小圓的外面,那麼説明點i一定在前i個點的最小覆蓋圓邊界上,我們轉到④來進一步確定這個圓,否則前i個點的最小覆蓋圓與前i-1個點的最小覆蓋圓是一樣的,則不需要更新,返回②
④此時已經確認點i一定在前i個點的最小覆蓋圓的邊界上了,那麼我們可以把當前圓的圓心設為第i個點,半徑為0,然後重新把前i-1個點加入這個圓中(類似上面的步驟,只不過這次我們提前確定了點i在圓上,目的是一步一步求出包含點i的前j個點的最小覆蓋圓),每加入一個點就進入⑤;
⑤如果發現當前j號點在當前的最小圓的外面,那麼説明點j也一定在前j個點(包括i)的最小覆蓋圓邊界上,我們轉到⑥來再進一步確定這個圓,否則前j個點(包括i)的最小覆蓋圓與前i-1個點(包括i)的最小覆蓋圓是一樣的,則不需要更新,返回④;
⑥此時已經確認點i,j一定在前j個點(包括i)的最小覆蓋圓的邊界上了,那麼我們可以把當前圓的圓心設為第i個點與第j的點連線的中點,半徑為到這兩個點的距離(就是找一個覆蓋這兩個點的最小圓),然後重新把前j-1個點加入這個圓中(還是類似上面的步驟,只不過這次我們提前確定了兩個點在圓上,目的是求出包含點i,j的前k個點的最小覆蓋圓),每加入一個點就進入⑦;
⑦如果發現當前k號點在當前的最小圓的外面,那麼説明點k也一定在前k個點(包括i,j)的最小覆蓋圓邊界上,我們不需要再進一步確定這個圓了(因為三個點能確定一個圓!),直接求出這三點共圓,否則前k個點(包括i,j)的最小覆蓋圓與前k-1個點(包括i,j)的最小覆蓋圓是一樣的,則不需要更新。
最小圓覆蓋複雜度
時間複雜度:O(N)
空間複雜度:O(N)
複雜度證明:空間複雜度顯然,下面來證時間複雜度。
首先,因為我們已經將點打亂順序,所以我們可以認為點是隨機生成的,我們知道,當點完全隨機時,第i個點在前i-1個點的最小覆蓋圓外的幾率是3/i。
- 參考資料
-
- 1. 基於最小圓覆蓋區域劃分的索引過濾算法 .萬方[引用日期2018-07-20]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:4次歷史版本
- 最近更新: 饮水此