最小圓覆蓋問題_演算法

來源:互聯網
上載者:User

最小圓覆蓋問題-一個很經典的問題。
題目大概是,平面上n個點,求一個半徑最小的圓,能夠覆蓋所有的點。
首先,我們可以從一個空集R開始,不斷把平面上的點加入到R中,同時維護R的外接圓最小,就可以得到一個簡單的解法。
另外一種想法是,先任意選取兩個點,以這兩個點的連線為直徑作圓。再以此判斷剩餘的點,看它們是否都在圓內(或圓上),如果都在,說明這個圓已經找到。如果沒有都在:假設我們用的最開始的兩個點為p[1],p[2],並且找到的第一個不在圓內(或圓上)的點為p[i],於是我們用這個點p[i]去尋找覆蓋p[1]到p[i-1]的最小覆蓋圓。
要想求過確定點p[i]的從p[1]到p[i-1]的最小覆蓋圓,我們可以先用p[1]和p[i]做圓,再從2到i-1判斷是否有點不在這個圓上,如果都在,則說明已經找到覆蓋1到i-1的圓。如果沒有都在:假設我們找到第一個不在這個圓上的點為p[j],於是我們用兩個已知點p[j]與p[i]去找覆蓋1到j-1的最小覆蓋圓。

而對於兩個已知點p[j]與p[i]求最小覆蓋圓,只要從1到j-1中,第k個點求過p[k],p[j],p[i]三個點的圓,再判斷k+1到j-1是否都在圓上,若都在,說明找到圓;若有不在的,則再用新的點p[k]更新圓即可。

於是,這個問題就被轉化為若干個子問題來求解了。

由於三個點確定一個圓,我們的過程大致上做的是從沒有確定點,到有一個確定點,再到有兩個確定點,再到有三個確定點來求圓的工作。

關於正確性的證明以及複雜度的計算這裡就不介紹了,可以去看完整的演算法介紹:http://wenku.baidu.com/view/162699d63186bceb19e8bbe6.html

相關問題1:
海面上有一些船需要與陸地進行通訊,需要在海岸線上布置一些基站。現將問題抽象為,在x周上方,給出N條船的座標p1,p2,…,pn,pi=(xi,yi),xi>=0,yi<=d, 1<=i<=N,在x軸安防的基站可以覆蓋半徑為d的地區內所有點,問在x軸上至少要安放幾個點才可以將x軸上方的點都覆蓋起來。試設計一個演算法求解該問題

設計思路:
首先將所有的點按橫座標從小到大進行排序。當點集不空的時候,每次取出最左邊的點,將該點視做圓周上的點,以該點到x軸上距離為d的點作為圓心,以d作為半徑,畫出一個圓,然後去除掉包含在該圓內的點。然後繼續選出一個最左的點,重複以上操作,直至點集為空白,表示所有點都被覆蓋,此時得出的圓的個數就是所求答案.

相關問題2:
給定平面上n個點的座標,求能夠覆蓋所有這些點的最小矩形面積。
首先我們思考這樣一個問題,給定平面上的n個矩形(座標為整數,矩形與矩形之間可能有重疊的部分),求其覆蓋的總面積。平常的想法就是開一個與二維座標規模相當的二維Boolean數組類比矩形的“覆蓋”(把矩形所在的位置填上True)。可惜這個想法在這裡有些問題,因為這個題目中座標範圍相當大(座標範圍為-10^8到10^8之間的整數)。但我們發現,矩形的數量n<=100遠遠小於座標範圍。每個矩形會在橫縱座標上各“使用”兩個值(矩形的上下、左右邊界), 100個矩形的座標也不過用了橫(縱)座標中-10^8到10^8之間的200個值。也就是說,實際有用的值其實只有這麼幾個。這些值將作為新的座標值重新劃分整個平面,省去中間的若干座標值沒有影響。我們可以將座標範圍“離散化”到1到200之間的數,於是一個200*200的二維數組就足夠了。實現方法正如本文開頭所說的“排序後處理”。對橫座標(或縱座標)進行一次排序並映射為1到2n的整數,同時記錄新座標的每兩個相鄰座標之間在離散化前實際的距離是多少(在離散化以後,實際上整個圖形空間變小了,這樣便於計算,但是對於每條線一定要有對應於原圖的映射,這樣才能計算出正確的面積,如下圖離散後的圖形中每個格對應的實際長寬都不同,實際面積也有不同)。

上述思想是離散化的一個執行個體,可以看出離散化大大降低了空間開銷,在某些難以處理的問題上可以有效降低演算法時間複雜度,值得學習與借鑒。
最後,這些演算法和思想參考了很多的技術部落格,在此感謝原作者。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.