Düzlemdeki n nokta kümesinin o (nlogn) sürede dışbükey bir n çokgen oluşturup oluşturmadığını test etme


13

Düzlemde bir dizi n noktası verildiğini ve dışbükey bir çokgen oluşturup oluşturmadığını, yani hepsi dışbükey gövdenin üzerinde olup olmadığını kontrol etmek istediğinizi varsayalım. Herkes o (nlogn) zamanında, yani, CH hesaplamadan nasıl yapılacağını bilmek merak ediyordum.


Dışbükey gövdeyi O (n log n) zamanda hesaplayabilirsiniz. Bunu daha kısa sürede yapabilmek mümkün mü demek istiyorsun ?
Vognsen Per

evet, bu sorun için doğrusal bir zaman algoritması olması gerektiğine inanıyorum. ama nasıl bilmiyorum
Babis Tsourakakis

4
O (nlogn) yazdı O (nlogn), bu yüzden sorusu doğru.
Shiva Kintali

1
Küçük o notasyonu kullanıyorum, bu yüzden soru hala olduğu gibi
Babis Tsourakakis

4
Kullandığınız hesaplama modelinin açık bir ifadesi olmadan Θ (n log n) süresi olarak ifade edilen sayıların (veya Kartezyen noktaların eşdeğer dışbükey gövdelerinin) sıralanmasını görmem biraz kaşlarını çattı. Karşılaştırma sıralaması Θ (n log n) zaman alır, ancak karşılaştırma modeli gövdelerin hesaplanmasına bile izin vermez. Her ikisi de cebirsel karar ağaçları için Θ (n log n) zamanıdır (kabul edilen cevabın gösterdiği gibi), ancak gerçek bilgisayarlara daha yakından benzeyen hesaplama modellerinde daha hızlıdır.
David Eppstein

Yanıtlar:


17

Bu, en azından karşılaştırma / cebirsel ağaç modellerinde, olası görünmüyor. Önce tanım:

Bir nokta grubu ve herhangi bir nokta ise konveks bir pozisyonda olup kalan noktaları konveks kombinasyonu olarak yazılabilir .PPPP

Şimdi, bir sayı kümesinin farklı olup olmadığına karar vermek zaman alır (bu BENZERSİZ olarak bilinir). Böyle bir sayı kümesi verildiğinde , bunları nokta kümesiyle eşleştirin Tekrarlanan bir sayı yoksa, noktalar dışbükey konumdadır.Ω ( n günlüğü n ) n X P = { ( x , x 2 ) | x X } .nΩ(nlogn)nX

P={(x,x2)|xX}.

Tekrarlanan bir sayı varsa, bu tekrarlanan sayı, kalan noktaların dışbükey kombinasyonu olarak yazılabilen bir noktaya karşılık gelir. Yani, noktalar dışbükey konumda değildir.

Yani, bir nokta kümesinin dışbükey konumda olup olmadığına karar vermek EŞSİZLİK kadar serttir.


12
Bu azalmanın, yinelenen noktalar üretmeyen bir varyantı vardır. X [1..n] bir tamsayı kümesi olsun; X'in tüm elemanlarının farklı olup olmadığını test etmek, cebirsel karar ağacı modelinde hala Ω (n log n) zamanı gerektirir. Şimdi her bir tamsayısını nokta . Orijinal X dizisinde kopyalar varsa, ortaya çıkan noktaların dışbükey gövdenin iç kısmında en az bir nokta olacaktır; aksi takdirde noktalar dışbükey konumdadır. ( X [ i ] , X [ i ] 2 + i / n 2 )X[i](X[i],X[i]2+i/n2)
Jeffε

1
@Babis: Yinelenen noktalara izin verilmediğinde Jeff'in azaltması işe yarar. İndirgeme tarafından oluşturulan noktalar, ilk dizi ne olursa olsun benzersizdir.
Vinayak Pathak

Böylece, dışbükey gövdenin köşelerinin sayısının, yalnızca iki nokta aynı x-koordinatına sahip değilse ve n'ye eşit olduğunu elde ederiz. Çok teşekkürler, başlangıçta sıralamaktan daha kolay olması gerektiğini düşündüm.
Babis Tsourakakis

Teşekkürler Vinayak, Jeff'in indirgemesini görmedim, çünkü yukarıdaki ile değiştirdiğim önceki yorumu yazarken aynı zamanda yayınlandı
Babis Tsourakakis

2
Suresh, "standart model" ifadesine katılmıyorum. Word RAM tam olarak budur :) Gerçek bir bilgisayarla en çok eşleşen modeldir ve TCS'nin çoğunda algoritmayı analiz etmek için kullandığımız modeldir. Geometri, Gerçek RAM'i kullanmak için bir istisna savundu, böylece hassas sorunlarla uğraşmamız gerekmiyor. Ama bu "standart model" değil.
Mihai

-1

O(nlogn)

Noktaların sırasını öğrendikten sonra, dizideki her noktadan bir sonraki noktaya olan açı monotonik olmalıdır. Bu gerekli bir koşul ve bence yeterli bir koşul oluşturur.

İç noktayı elde etmek okuyucu için bir egzersiz olarak bırakılmıştır.


O(nlogn)


Muhtemelen o (n log n) 'ı benim gibi O (n log n) olarak yanlış okudunuz. Her neyse, özetlediğiniz algoritma embriyonik formda hediye ambalajıdır. Aslında bir iç nokta kullanmanıza gerek yoktur; sınırdaki bir noktayı kullanabilirsiniz, örneğin minimum x koordinatına sahip bir nokta.
Per Vognsen

O(nlogn)o()

Mesele şu ki, O (n log n) içinde çalışan çok sayıda dışbükey gövde algoritması var. Algoritmanız temel olarak eski hediye paketlemesidir. Daha hızlı bir şey istiyordu, örneğin doğrusal zaman. Diğer yanıtlara bakın.
Per Vognsen

1
Düzenlemenizle ilgili olarak, kabul edilen cevaba sizinkinin üstünden bakabiliyorsanız, sorunun O (n log n) alt sınırı olan öğe benzersizliğine eşdeğer olduğunu göreceksiniz.
Per Vognsen

2
@BCS: Sariel Har-Peled'in cevabı hakkında yanlış anlaşılmanız olduğundan korkuyorum. İndirgeme tek yönden dışbükey konum testine, diğer yöne değil. Yani, Sariel (ve JeffE), size bir dizi sayı verildiyse ve benzersizliği test etmek istiyorsanız, bunu bir dizi noktaya dönüştürebileceğinizi ve dışbükey konum testi için herhangi bir algoritmayı kullanabileceğinizi belirtti.
Tsuyoshi Ito
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.