Toplamı iki sayı seçin


9

İşte en yakın komşu sorunu.

Verilen gerçekler a1,,an (çok büyük n!), artı gerçek hedef p, bul ai ve aj SUM'a en yakın olan p. Makul ön işleme / indekslemeye izin veriyoruza1,,an (en fazla O(nlogn)), ancak sorgu zamanında (verilen p), sonuç çok hızlı bir şekilde döndürülmelidir (ör. O(logn) süresi).

(Daha basit örnek: yalnızca TEKLİ isteseydik ai bu en yakın p, sıralardık a1,,an çevrimdışı O(nlogn), ardından sorgu zamanında ikili arama yapın, O(logn)).

Çalışmayan çözümler:

1) Sırala a1,,ançevrimdışı, ardından sorgu zamanında her iki uçtan başlayın ve iki işaretçi içe doğru hareket ettirin ( http://bit.ly/1eKHHDy ). İyi değil, çünküO(n) sorgu süresi.

2) Sırala a1,,an çevrimdışı, ardından sorgu zamanında her birini alın ai ve yakınlardaki bir şeyi toplamasına yardımcı olan bir "arkadaş" için ikili arama gerçekleştirin p. İyi değil, çünküO(nlogn) sorgu süresi.

3) Tüm çiftleri sırala (a1,,an)sonra da ikili arama yapın. İyi değil, çünküO(n2) ön-işlem.

Teşekkürler!

ps. Uygulama için gerekli diğer genellemeler: (1)a1,,an ve p 50 boyutlu vektörler olmak, (2) vektör kosinüs mesafesi olmak "kapatmak" ve (3) k-en iyi yakın çift-bu-toplam, sadece 1-en iyi.


Ön işlem süresinde veya ön işlemden sonra kullanabileceğimiz alan miktarında bir sınır var mı? Eğer sınırlıysakO(n) uzay, çözülebileceğine inanmak için herhangi bir nedeniniz var mı? O(lgn)Zaman? Bu benim için pek olası görünmüyor.
DW

Ön işleme O ile sınırlıdır (n günlük n). Sorun bildirimini güncelledim.
Kevin

Sorgulamanın hızlı olabileceğine inanmak için herhangi bir nedenim yok, ancak en yakın komşular için birçok yararlı sonuç (kd ağaçları, bölgeye duyarlı karma, vb.) Bana karşı sezgisel olarak iyi görünüyor. Bölgeye duyarlı karma kullanarak yaklaşık bir çözüm pratik kullanım için iyi olacaktır.
Kevin

Yanıtlar:


17

Bu neredeyse imkansız.

Önişleme süresi ile sorununuzu çözebileceğinizi varsayalım P(n) ve sorgu süresi Q(n). Sonra 3SUM problemini çözmek için basit bir algoritma var - bir dizin gerçek sayılar, herhangi bir üç eleman sıfıra eşit midir? P(n)+nQ(n)saati. Tüm sayıları önceden işleriz, sonra her sayı içinak, değerini buluyoruz ai+aj bu en yakın ak; eğer eşleşirseak tam olarak, 3SUM problemine bir çözüm bulduk.

Ancak, 3SUM için bilinen en hızlı algoritma O(n2)zaman ve bu algoritma yaygın olarak en iyi şekilde tahmin edilmektedir. Dahası, bir eşleşme varΩ(n2)sınırlı ama doğal bir karar ağacı hesaplama modelinde alt sınır. Tamsayılar kümesi için, "bitlerle oyun oynayan" biraz subadratratik zaman algoritmaları vardır, ancak tamsayı RAM modelinde bile 3SUM,Ω(n2/polylogn) saati.

Dolayısıyla varsayımın doğru olduğunu varsayarsak, probleminiz ya (neredeyse) ikinci dereceden ön işleme süresi ya da (neredeyse) doğrusal sorgu süresi gerektirir.


2

Ön işleme sırasında sınırsız alan ve sınırsız süre kullanabiliyorsanız, aşağıdaki çözüm gereksinimlerinizi karşılar:

  • Ön işleme sırasında seti hesaplayın {ai+aj:1ijn}ve bu seti sıralı olarak saklayın. Bu set oluşturulabilir veO(n2) zaman, ve alır O(n2) saklamak için alan.

  • Şimdi bir sorguyu yanıtlamak için ( ai,aj nerede ai+aj kadar yakın polabildiğince), bu sıralı listede ikili bir arama yapın. AlacakO(lgn) saati.

Bu çözüm kabul edilebilir değilse, gereksinimlerinizi daha dikkatli düşünmeniz ve soruyu buna göre düzenlemeniz gerekir.


Merhaba, teşekkürler! Ancak çözümünüz O (n ^ 2) ön işleme süresi nedeniyle sorunlu olan # 3 numaralı çözümümle aynı. Benim durumumda, n çok büyük (örneğin, 1m) ve O (n ^ 2) işlemlerinden kaçınmalıyım.
Kevin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.