İki çeşit neredeyse basit poligonu tespit etmek


22

Belirli bir basit olmayan poligonun, iki farklı biçimsel duyumdan herhangi birinde neredeyse basit olup olmadığına karar vermenin karmaşıklığıyla ilgileniyorum : Zayıf basit veya kendinden geçişli . Bu terimler yaygın olarak bilinmediğinden, bazı tanımlarla başlayayım.

  • Bir çokgen sonlu bir dizi bağlantı hattı bölümlerinin kapalı döngüdür düzlemde noktaları. Noktaları denir köşe poligon ve segmentleri onun adlandırılır kenarları . Herhangi bir poligonu, sadece sıralarını sıralayarak listeleyebiliriz.Pp0,p1,p2,,pn1pipipi+1modn

  • Bir poligon olan basit tüm eğer n köşe farklıdır ve kenarları uç noktaları sadece kesişir. Aynı şekilde, bir poligon daire şeklinde homeomorfik ise ve her kenar pozitif uzunluğa sahipse bir poligon basittir. Bununla birlikte, genel olarak, bir poligonun köşeleri ve kenarları keyfi olarak kesişebilir veya hatta çakışabilir. 1

  • Kesişimi her ikisinin de ortak alt yolu olan iki ve çokgen yolu A ve B'yi düşünün B(muhtemelen tek bir nokta). Biz söylüyorlar A ve B çapraz eğer kendi uç noktaları A(0),B(0),A(1),B(1) ortak alt yol bir mahalle sınırında alternatif AB . Bir çokgen iki geçiş alt yoluna sahipse kendinden geçişlidir, aksi halde kendinden geçişsizdir . 2

  • Bir poligon basit poligon dizisinin limiti ise zayıf veya çok poligonu basitleştiren tepe noktalarının keyfi olarak küçük bir sapması varsa eşdeğerde, basit bir şekilde basittir. Her zayıf basit poligon, kendinden geçmeyen bir şeydir; Bununla birlikte, bazı kendinden geçişli çokgenler çok basit değildir .

Örneğin, aşağıda gösterilen a, b, p, q, x, y gibi altı noktayı göz önünde bulundurun a,b,p,q,x,y.

görüntü tanımını buraya girin

  • Poligon abpqyz basittir; Soldaki şekle bakınız.

  • Poligon papbpqyqzq zayıf basittir; Ortadaki şekil yakındaki basit bir çokgeni gösterir. Bununla birlikte, bu çokgen basit değildir, çünkü p üç kez ziyaret eder .

  • Poligon kendiliğinden geçer, çünkü alt ve çaprazlanır. Bazı sezgi için doğru şekle bakın.b p q z y q p apapbpqzqyqbpqzyqpa

  • Son olarak, (orta çokgen etrafına iki kez olan) çokgen , ancak zayıf değildir . Sezgisel olarak, bu çokgenin dönüş sayısı , herhangi bir basit çokgenin dönüş sayısı olmalıdır . (Resmi bir ispat, bazı vaka analizleri gerektirir, çünkü kısmen, dönüş numarası açılarına sahip çokgenler için iyi tanımlanmamış !)papbpqyqzqpapbpqyqzq±2±10

Güncelleme (Eylül 13): Aşağıdaki şekilde, poligon kendinden geçişli değildir ve 1 numaralı sahiptir , ancak çok basit değildir. Çokgen, basit bir şekilde geçiş yapan basit olmayan alt yollara sahiptir , ancak geçişli basit alt yollara sahip değildir . ("Tartışmalı" diyorum çünkü iki basit olmayan yürüyüşün ne zaman geçeceğini nasıl tanımlayacağımız belli değil!)abcabcxyzxpqrxzyx

görüntü tanımını buraya girin

Sonunda, işte asıl sorum şu:

  • Belirli bir poligonun kendinden geçişsiz olup olmadığını ne kadar çabuk belirleyebiliriz?

  • Bir poligonun zayıf bir şekilde basit olup olmadığını ne kadar çabuk belirleyebiliriz?

İlk problem, zaman içerisinde aşağıdaki gibi çözülebilir . Olduğu için köşe bulunmaktadır tepe-için-tepe alt yol; Herhangi bir alt yolun zamanda (kaba kuvvetle) basit olup olmadığını test edebiliriz . Her bir basit köşe-köşe alt yolu çifti için, zamanında geçip geçmediklerini test edebiliriz . Ancak bu mümkün olan en iyi algoritma olamaz .O(n5)nO(n2)O(n2)O(n)

İkinci sorunun polinom zamanda çözülüp çözülmeyeceğini bilmiyorum. Sanırım basit olmayan çokgenler için iyi tanımlanmış bir dönüm numarasını hızlıca hesaplayabilirim (çokgen kenarların birleşimi sadece bir yol değilse, bu durumda çokgen çok basit olmalıdır); cevabımı aşağıya bakınız. Bununla birlikte, yukarıdaki yeni poligon örneği, kendinden geçmeyen ve 1 numaralı dönüşün zayıf şekilde basit olmadığı anlamına gelir.

Verilen bir çokgen olup olmadığını belirleyebilir basit olarak , ya da kesişme için kenarların her çiftini ile zaman , ya da standart sweepline algoritması kullanılarak zaman zaman Chazelle'in üçgenleme algoritmasını kullanarak. (Girilen çokgen basit değilse, herhangi bir üçgenleme algoritması bir istisna, sonsuz döngü ya da geçerli bir üçgenleme olmayan çıktı üretecektir.) Ancak bu algoritmaların hiçbiri sormadığım sorunları çözmez. O ( n log n ) O ( n )O(n2)O(nlogn)O(n)


1 Branko Grünbaum. Çokgenler: Meister haklıydı ve Poinsot yanlıştı ama üstün geldi . Beiträge zur Cebir ve Geometrie 53 (1): 57–71, 2012.

2 Bkz. Örneğin: Erik D. Demaine ve Joseph O'Rourke. Geometrik Katlama Algoritmaları: Bağlantılar, Origami, Polyhedra . Cambridge Üniversitesi Yayınları, 2007.


Neden birisinin bu soruyu aşağı oy kullandığını anlamıyorum ?!
Kaveh

Soruyu tamamen yanlış anlıyor olabilirim, ve bu yüzden belki de bu yoldan çekilmiştir, ancak bana öyle geliyor ki, köşeleri sayma şekliniz, ikinci sorunun mutlaka üssel olarak zaman alacağı anlamına geliyor. Açıklayayım: Son örneğinizde aynı köşeleri birden çok kez kullanıyorsunuz. Üstel bir benzersiz döngü sayısı olan grafikler oluşturmak kolay görünüyor.
Joe Fitzsimons

Girişiniz, örneklerinizdeki gibi çokgen ise, girişin bir döngü tekrar etmeden, köşe sayısında üstel olması mümkündür. Grafik, alt grafik olarak örnek grafiğinizi (2 ve 3) içeriyorsa, geçişi olmayan çevrimleri ve geçişi olan çevrimleri vardır. Sonuç olarak, herhangi bir geçiş döngüsünün olmadığından (dahil edilmiş veya edilmemiş olabilir) emin olmak için dizenin tamamını okumalısınız. Bu, en kötü durumda üstel olur . n
Joe Fitzsimons

1
@JoeFitzsimons: Girdi, farklı olması gerekmeyen nokta dizileridir (yani gerçek sayı çiftleri). Girdi boyutu , bu dizinin uzunluğudur , benzersiz noktaların sayısı değildir . n
Jeffε

2
@Kaveh: Belki de çok soyut / uzman? Çok fazla kelime? Noktaları Ga, Ka, Naa, Taa, Kalay, Khat olarak mı adlandırmalıydım?
Jeffε

Yanıtlar:


2

İlk soru bir varmış gibi görünüyor (bu olasılıkla da optimum olmasa da) algoritması. Bir geçiş bulunduğunu varsayarsak, bulmanın anahtarı, bulunması gereken kenarların ortak alt yolun hemen her iki tarafında olduğu gibi görünüyor. Bu nedenle, tüm ardışık kenar çiftlerine bakarız. Bunların ikinci dereceden bir sayısı var. Biz köşe kenarlarına çiftlerinin bir çift olursa bir b , c ve d , e f bu kenarların b , c ve e f sonra sona ortak alt yolunu takip eder ve bırak kenarları kontrol aynıdır. Birlikte bir geçit oluştururlarsaO(n3)abcdefbcef ve d e sonra bittik, aksi takdirde bir sonraki çifte geçiyoruz. Bütün algoritma çok yaygın alt yolunu sonra en fazla doğrusal zamanlı operasyon olan O ( n, 3 ) .abdeO(n3)

Doğrusal uzunluktaki ortak bir alt yolun izlenme sayısı çiftlerin çiftlerinde doğrusal olmadığından bu analiz muhtemelen sıkı değildir. Bunların sadece sabit bir sayısı olmalıdır. Benzer şekilde, en uzun ortak alt yolun uzunluğu sabitse, o zaman ortak alt yollardan sonraki zaman miktarında sorun yok demektir. En kötü durumun, O uzunluğu tek bir alt yol olduğunda ortaya çıkmasını beklerdim ( için ortak olduğu, O(O(n)alt yollar. Daha sonra oradaO(n)etkileşimleri ve her etkileşim içindeO(O(n)O(n)kenarlar takip ediliyor. Bu nedenle, yine de, takip edilen kenarların sayısıo(n2), sınır ise çiftlerin sayısı ile sağlanır. Böylece, bu algoritma için gerçek sınırınO(n2)olduğunu tahmin ediyorum.O(n)o(n2)O(n2)


1
“Ortak alt yoldan sonra en fazla lineer zamanlı bir işlem var ...” Bu doğru mu? Alt yolların aynı olmadığını unutmayın. Biri diğerinin görüntüsü boyunca ileri geri katlanabilir. Aslında, bittiğini bildiğinde (bana) bile net değil.
Pat Morin

İyi bir nokta. Poligonu bir tür standart forma sokmak için ön işleme adımı olarak mümkün mü? Kendilerine hemen geri dönen yolları ve yakın komşularıyla aynı olan köşeleri seçerdik. O zaman alıntı yaptığınız cümle daha iyi tanımlanacaktı - ortak alt yol aynı köşelere sahip kenarlardan oluşuyor ve farklı köşelere çarptığınız için bittiğinizi biliyorsunuz. Cevabın poligonda standart biçimde aynı kaldığını kanıtlamak çok zor olmamalıdır.
Chris Gray

@ChrisGray: Belki, ama önerdiğin kadar kolay değil. görüntüsü bir ağaç ise, tüm geçişlerin tekrar tekrar yapılması en sonunda P'yi tek bir noktaya indirger . PP
Jeffε

Evet haklısınız, bu fikir işe yaramaz. Yukarıda verdiğiniz en sağdaki rakam tek bir noktaya indirgenecek.
Chris Gray

Ödülün süresinin dolmasına izin vermeyi planlıyorum; puanların yarısı otomatik olarak bu cevaba verilecektir.
Jeffε

2

Pat Morin'in önerisinde, dönüm sayısını hesaplamak için benim fikrim. Bu biraz özensiz ise üzgünüm; Hala notasyon şeytanlarıyla savaşıyorum. Dahası, Pat'nin Chris'in cevabına yaptığı yorum bazı önemli dejenere vakaları göz ardı ettiğimi ortaya koyuyor. Ama başkalarının yararlı bulması ihtimaline karşı, bunu yine de buraya göndereceğim.

Herhangi bir indeksi için , θ ( p i ) = θ ( p i - 1 , p i , p i + 1 ) p i köşesinde işaretli dış açıyı gösterelim ; bu, p i - 1 p i ve p i p i + 1 arasındaki , saat aralığına göre normalize edilmiş ışınlar arasındaki açıdır - ra θ iiθ(pi)=θ(pi1,pi,pi+1)pipi1pipipi+1 . (Tüm göstergesi aritmetik dolaylı mod N ). Tornalama ve P olarak tanımlanır T u r n ( p ) = 1πθiπnP Bana bir köşe diyelimpıbirmahmuzeğeraçıpieşittir0. Birmahmuzdakidış açıθiiyi tanımlanmamış; o da olabilirttveya-π. Daha genel olarak,Pdönüş sayısısadeceP'ninmahmuz olmamasıdurumunda(ve tekrarlanan tepe noktaları olmadığındapi=

Turn(P)=12πi=0n1θ(pi).
pipi0θiππPP ). Bu ispat etmek zor değil t u r N ( P ) bu iyi tanımlanmış ise bir tam sayı olduğu; Özellikle, T u r n ( p ) = ± 1 ise p basit bir çokgendir.pi=pi+1Turn(P)Turn(P)=±1P

Şimdi p r s r q biçiminde bir yürüyüş içerdiğini varsayalım ki burada p q ve r s yolu s s r yolunun tersidir . O zaman s bir mahmuzdur; Çağrı r kökünü ait s . Bu durumda, izin verin tanımlayan en dış açı s şöyledir: ~ θ ( ler ) = tt s gr nPprsrqpqrssrsrss (peki ya θ ( p , r , q ) = 0 ? Pat'in gözlemlediği gibi, bu gerçekten olabilir: Muhtemelen ˜ θ ( ları ) tanımlamanın bir tür özyinelemeli yolu vardır.

θ~(s)=πsgnθ(p,r,q)={πif θ(p,r,q)>0πif θ(p,r,q)<0
θ(p,r,q)=0θ~(s) bu durumda bile, ama ne olduğunu bilmiyorum.)

Eğer zayıf basit, daha sonra basit olduğu , n açılı ~ P keyfi yakın P ; Tet ~ s tepe noktası olabilir ~ P en yakın P . Olarak ~ P yaklaşımlar P , iç açısı ~ s sıfırdır. Bu (uzunluğuna endüksiyon ile ispat etmek zor değildir r s dış açı) θ ( ~ s ) yaklaşımları ~ θ ( ler ) .PnP~Ps~P~PP~Ps~rsθ(s~)θ~(s)

PrsrrsPrs

θ~(pi)=θ(pi)piTurn~(P)=iθ~(pi)/2π=Turn(P~), which must be ±1 if P is weakly simple.

I'm no longer confident that Turn~(P) can be computed in linear time. The main difficulty is that the walk rs can itself contain spurs. The naive algorithm that finds the root of each spur by brute force actually takes Θ(n2) time in the worst case; consider an n-gon that has a subwalk of length Ω(n) that simply alternates between two points.

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.