分治法求最近點對問題

 1)算法描述:已知集合S中有n個點,分治法的思想就是將S進行拆分,分爲2部分求最近點對。算法每次選擇一條垂線L,將S拆分左右兩部分爲SL和SR,L一般取點集S中所有點的中間點的x座標來劃分,這樣可以保證SL和SR中的點數目各爲n/2,

(否則以其他方式劃分S,有可能導致SL和SR中點數目一個爲1,一個爲n-1,不利於算法效率,要儘量保持樹的平衡性)

依次找出這兩部分中的最小點對距離:δL和δR,記SL和SR中最小點對距離δ = min(δL,δR),如圖1:

   

     以L爲中心,δ爲半徑劃分一個長帶,最小點對還有可能存在於SL和SR的交界處,如下圖2左圖中的虛線帶,p點和q點分別位於SL和SR的虛線範圍內,在這個範圍內,p點和q點之間的距離纔會小於δ,最小點對計算纔有意義。

    

 

 

 

 

 

Figure 2

 

 

      對於SL虛框範圍內的p點,在SR虛框中與p點距離小於δ的頂多只有六個點,就是圖二右圖中的2個正方形的6的頂點。這個可以反推證明,如果右邊這2個正方形內有7個點與p點距離小於δ,例如q點,則q點與下面正方形的四個頂點距離小於δ,則和δ爲SL和SR中的最小點對距離相矛盾。因此對於SL虛框中的p點,不需求出p點和右邊虛線框內所有點距離,只需計算SR中與p點y座標距離最近的6個點,就可以求出最近點對,節省了比較次數。

(否則的話,最壞情形下,SR虛框中有可能會有n/2個點,對於SL虛框中的p點,每次要比較n/2次,浪費了算法的效率


轉自:http://blog.sina.com.cn/s/blog_5f888ac70100ujnj.html

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