給平片上相異點
請計算最近點對的距離的平方
也就是找出,滿足,且為最小
輸入說明:
第一行包含一個正整數,代表平面上的點數。
接下來行,每行包含兩整樹代表第個點的座標
,不存在兩點座標相同
輸出說明:
輸出正整數,代表最近點對的距離的平方
範例輸入
4
1 3
7 5
-4 9
2 -5
範例輸出
40
這題我是用分治的想法來做,我們可以利用排序找出中點,把點分成左右兩邊
分出兩個子問題,而最近點對只有三種可能
1.左邊區域的最近點對
2.右邊區域的最近點對
3.一個點在左區域,一個點在右區域的最近點對
1、2、3之中的最小值就是答案
1和2的值都會在遞迴的過程中被傳上來,所以我們只剩下3要怎麼求
我們先定義
我們可以知道3的點只可能會出現在中點向左右展開的空間中
並且我們可以將空間中所有點都用點的座標來排序
並且從每個點向上枚舉看可不可以形成最近點對
當枚舉到兩點距離時就優化複雜度
但這個方法你可能會想,每次枚舉的區域內有沒有可能存在大量的點導致複雜度大增呢
如果我們仔細想一想會發現對每一次枚舉的點來說,這個空間中的點是常數個
我們是從下向上枚舉(從小的開始)
而有可能和點成為最近點對的範圍就只有點向左、右、上擴張,
形成一個的矩形空間
我們將這個空間分成2等分的正方形,在每一個正方形中長為寬為
根據畢氏定理,對角線為,所以我們可以得知每個正方形內最多只有一個點
根據鴿籠原理,若我們放超過2個點(不包含),必會有一個小矩形有兩個點,且這兩點的距離小於
和前的計算矛盾,故可知最多只有2個點(不包含)
每一層都需要對y進行排序,時機複雜度,每次遞迴都將共層,時間複雜度
總時間複雜度
點擊連結以繼續觀看
https://hackmd.io/@samson-note/ry5i3l4La
點擊連結以繼續觀看
https://hackmd.io/@samson-note/ry5i3l4La