SORU
14 Kasım 2010, Pazar


En çok puanı giden düz bir çizgi bulmak için en etkili algoritma nedir?

Sorun:

N puan 2 boyutlu bir uçak verildi. Ne aynı puan sayısıdüzhat?

Sorun var O(N2) çözüm: her noktadan geçip bulunduğunuz nokta ile ilgili olarak 0 ** aynı olan noktaların sayısını bulmak Verimlilik için karma bir haritada 1* *ilişkiler deposu.

Orada O(N . daha bu sorun için iyi bir çözümdür ^sup>2)?

CEVAP
15 Kasım 2010, PAZARTESİ


Büyük olasılıkla önemli ölçüde hesaplama standart bir model O daha iyi(n^2) Bu sorunun çözümü yok.

Sorun bulma üç doğrultuda noktaları azaltır, sorun bulma hattı geçer en çok puan ve bulma üç doğrultuda puan 3SUM-sabit, yani çözme az daha O(n^2) zaman bir büyük teorik sonuç.

Üç doğrultuda noktaları bulma previous question bakın.

Referans (bilinen kanıtları kullanarak), x bulma gibi 3SUM bir sorun, cevap ver olsun bitsin,, z listesinde X x z = 0 y gibi y. Eğer aynı doğrultuda nokta sorunu için hızlı bir algoritma olsaydı, aşağıdaki gibi algoritma 3SUM sorunu çözmek için kullanabiliriz.

X içindeki her x için, nokta (x, x^3) (X elemanları farklı olduğunu kabul ediyoruz) oluşturun. Ardından, oluşturulan puan arasından üç doğrultuda noktaları var olup olmadığını kontrol edin.

Bu işleri görmek için, x y z = 0 ise o zaman y için x çizgisinin eğimini olduğunu unutmayın

(y^3 - x^3) (y - x) x^2 yx = ^2 y/

ve z x vardır ve sıfırdır

(z^3 - x^3) / (z - x) = z^2 zx x^2 = (-(x-y))^2 - (x y)x, x^2 = x^2 2xy y^2 - x^2 - xy x^2 = y^2 yx x^2

Eğer y için x yamaç eğimi eşitse tersine, x z o zaman

y^2 x^2 = z^2 yx zx x^2,

anlamına gelir

(y - z) (x y z) = 0,

yani ya y = z ya da z = -x - y azaltma geçerli olduğunu kanıtlamak için yeterlidir.

Varsa çoğaltır X, önce kontrol edip x 2y = 0 için x ve yinelenen öğe y (doğrusal zaman kullanarak karma veya O(n lg n) zaman kullanarak sıralama) ve sonra kaldırmak çoğaltır önce azaltmak için aynı doğrultuda nokta bulma sorunu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LearnKey

    LearnKey

    19 AĞUSTOS 2008
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008
  • taliajoy18

    taliajoy18

    12 Temmuz 2011