c語言演算法

來源:互聯網
上載者:User

給定n個點(xi,yi)(1≤i≤n),要求找出其中距離最近的兩個點。

例14-7 假設在一片金屬上鑽n個大小一樣的洞,如果洞太近,金屬可能會斷。若知道任意兩個洞的最小距離,可估計金屬斷裂的機率。這種最小距離問題實際上也就是距離最近的點對問題。

通過檢查所有的n(n- 1 ) / 2對點,並計算每一對點的距離,可以找出距離最近的一對點。這種方法所需要的時間為(n2 )。我們稱這種方法為直接方法。圖1 4 - 1 3中給出了分而治之求解演算法的虛擬碼。該演算法對於小的問題採用直接方法求解,而對於大的問題則首先把它劃分為兩個較小的問題,其中一個問題(稱為A)的大小為「n /2ù,另一個問題(稱為B)的大小為「n /2ù。初始時,最近的點對可能屬於如下三種情形之一: 1) 兩點都在A中(即最近的點對落在A中);2) 兩點都在B中;3) 一點在A,一點在B。假定根據這三種情況來確定最近點對,則最近點對是所有三種情況中距離最小的一對點。在第一種情況下可對A進行遞迴求解,而在第二種情況下可對B進行遞迴求解。

if (n較小) {用直接法尋找最近點對

R e t u r n ; }

// n較大

將點集分成大致相等的兩個部分A和B

確定A和B中的最近點對

確定一點在A中、另一點在B中的最近點對

從上面得到的三對點中,找出距離最小的一對點

圖14-13 尋找最近的點對

為了確定第三種情況下的最近點對,需要採用一種不同的方法。這種方法取決於點集是如何被劃分成A、B的。一個合理的劃分方法是從xi(中間值)處劃一條垂線,線左邊的點屬於A,線右邊的點屬於B。位於垂線上的點可在A和B之間分配,以便滿足A、B的大小。

例2-8 考察圖14-14a 中從a到n的1 4個點。這些點標繪在圖14-14b 中。中點xi = 1,垂線x = 1如圖14-14b 中的虛線所示。虛線左邊的點(如b, c, h, n, i)屬於A,右邊的點(如a, e, f, j, k, l) 屬於B。d, g, m 落在垂線上,可將其中兩個加入A, 另一個加入B,以便A、B中包含相同的點數。假設d ,m加入A,g加入B。

設是i的最近點對和B的最近點對中距離較小的一對點。若第三種情況下的最近點對比小。則每一個點距垂線的距離必小於,這樣,就可以淘汰那些距垂線距離≥的點。圖1 4 - 1 5中的虛線是分割線。陰影部分以分割線為中線,寬為2 。邊界線及其以外的點均被淘汰掉,只有陰影中的點被保留下來,以便確定是否存在第三類點對(對應於第三種情況)其距離小於。用RA、RB 分別表示A和B中剩下的點。如果存在點對(p,q),p?A, q?B且p, q的距離小於,則p?RA,q?RB。可以通過每次檢查RA 中一個點來尋找這樣的點對。假設考察RA 中的p 點,p的y 座標為p.y,那麼只需檢查RB 中滿足p.y- <q.y<p.y+的q 點,看是否存在與p 間距小於的點。在圖14-16a 中給出了包含這種q 點的RB的範圍。因此,只需將RB 中位於×2 陰影內的點逐個與p 配對,以判斷p 是否是距離小於的第三類點。這個×2 地區被稱為是p的比較區(comparing region)。

例2-9 考察例2 - 8中的1 4個點。A中的最近點對為(b,h),其距離約為0 . 3 1 6。B中最近點對為(f, j),其距離為0 . 3,因此= 0 . 3。當考察是否存在第三類點時,除d, g, i, l, m 以外的點均被淘汰,因為它們距分割線x= 1的距離≥ 。RA ={d, i, m},RB= {g, l},由於d 和m的比較區中沒有點,只需考察i即可。i的比較區中僅含點l。計算i 和l的距離,發現它小於,因此(i, l) 是最近的點對。

為了確定一個距離更小的第三類點,RA 中的每個點最多隻需和RB 中的6個點比較,如圖1 4 - 1 6所示。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.