Biraz kıvrık görünebilir, ancak naif kaba kuvvet arama daha verimli olmalıdır bir çözüm var :O(n2)
- , ve kütle merkezleri arasındaki eksen olsun .vAB
- Sıralama noktaları ve azalan ve sıralara yol açan, sırasıyla, artan düzende bu eksen boyunca , , ..., ve , , ..., .ABa0a1anb0b1bn
Gerisi daha açık hale getirmek için sözde koddadır:
d = infinity.
for j from 1 to n
if (b_1 - a_j) along v > d then break endif
for k from 1 to n
if (b_k - a_j) along v > d then
break
else
d = min( d , ||b_k - a_j|| )
endif
enddo
enddo
Yani tarafından, ilerlediğini noktaları öncesi-sıralama , sen içinde asla çiftleri filtreleyebilirsiniz beri birbirinden boyunca hep olacak.vdbk−ajv≤∥bk−aj∥
Kötü durumda bu hala eğer, ancak ve de ayrılır, çok daha hızlı daha değil daha iyi olmalıdır , gerekli olan sıralama için.O(n2)ABO(nlogn)
Güncelleme
Bu çözüm hiçbir şekilde şapkadan çıkarılmaz. Uzamsal binning ile etkileşen tüm parçacık çiftlerini bulmak için parçacık simülasyonlarında kullandığım özel bir durum. Daha genel sorunu açıklayan kendi çalışmam burada .
Değiştirilmiş bir hat süpürme algoritması kullanma önerisine gelince, sezgisel olarak basit olsa da, ayrık kümeler dikkate alındığında bunun olduğuna ikna olmadım . Aynı şey Rabin'in rastgele algoritması için de geçerli.O(nlogn)
Orada ayrık setlerde yakın çifti sorunla ilgilenen çok literatür olmak görünmüyor, ama buldum bu altında olmanın iddiası yok ki, ve bu , görünmüyor hangi herhangi bir şey hakkında iddiada bulunmak.O(n2)
Yukarıdaki algoritma, ilk makalede (Shan, Zhang ve Salzberg) önerilen düzlem taramasının bir varyantı olarak görülebilir, ancak ekseni kullanmak ve sıralama yapmak yerine, kümeler arasındaki eksen kullanılır ve kümeler çaprazlanır azalan / artan sırada.x