Süpürme Çizgisine Göre Dikdörtgen Kapsama Alanı


9

Ne yazık ki kendim başarılı olamadığım bir egzersiz yapıyorum.

Bir dizi dikdörtgen var R1..Rn ve bir dikdörtgen R0. Düzlem tarama algoritmasını kullanarakR0 tamamen R1..Rn.

Tarama çizgisi algoritmalarının prensibi hakkında daha fazla bilgi için buraya bakın .

Hadi baştan başlayalım. Başlangıçta, tarama çizgisi algoritmasını iki veri yapısı gerektiren çizgi segmenti kavşaklarını bulma algoritması olarak biliyoruz :

  • bir set Q olay noktalarının (segmentlerin ve kesişme noktalarının uç noktalarını depolar)
  • bir durum T (süpürme çizgisinin kesiştiği segment seti için dinamik yapı)

Genel Fikir: bu süpürme çizgisini varsayalımlsoldan dikdörtgen kümesine yaklaşmaya başlayan dikey bir çizgidir. Tümünü sıralax dikdörtgenlerin koordinatları ve Q artan sırada - almalı O(nlogn). İlk olay noktasından başlayın, her nokta için verilen kesişen dikdörtgen setini belirleyinx , kesişen dikdörtgenlerin sürekli segmentlerini koordine edin ve kapsamlarını kontrol edin R0 tamamen mevcut xkoordinat. İleT ikili bir ağaç olarak alacak O(logn). Herhangi bir parçası varsaR0 açıkta kalır R0 tamamen kapsanmamıştır.

Ayrıntılar: Segment kesişim algoritması fikri, sadece bitişik segmentlerin kesişmesiydi. Bu gerçeğe dayanarak statü inşa ettikTve algoritma boyunca korudum. Bu durumda benzer bir fikir bulmaya çalıştım ve şimdiye kadar başarı olmadan, söyleyebileceğim tek şey, karşılık gelen iki dikdörtgen kesişiyorx ve y koordinatlar çakışıyor.

Sorun nasıl inşa edileceği ve bakım yapılacaktır Tve inşa etmenin ve sürdürmenin karmaşıklığı Tdır-dir. Bu durumda R ağaçlarının çok yararlı olabileceğini varsayıyorum , ancak bulduğum gibi R ağaçları kullanarak minimum sınırlayıcı dikdörtgeni belirlemek çok zor.

Bu sorunun nasıl çözüleceği ve özellikle nasıl oluşturulacağı hakkında herhangi bir fikriniz var mı? T?


1
Bu eksenle hizalanmış dikdörtgenler mi, değil mi? (Her iki şekilde de yapabilirsiniz, ancak öyleyse daha kolaydır.)
Louis

@ Louis, biraz basitleştirelim, eksenle hizalanmış dikdörtgenler olduğunu varsayalım, ama elbette genel durum daha ilginç
com

Dikdörtgenin hangi noktaları olay noktalarıdır? Tüm köşeler, sol üst taraf ...?
Raphael

@Raphael, sadece x's olay noktaları vardır
com

Yanıtlar:


6

İle başlayalım neksene hizalanmış dikdörtgenler, çünkü bir tür kolay doğrudan tartışma vardır. Dikey bir çizgi süpüreceğiz. Olaylar, dikdörtgenlerin yatay kenarlarının uç noktalarıdır. Süpürürken, süpürme çizgisinde "tarafından ortaya çıkarılan" bir dizi aralık tutuyoruzRi, i1:

  • Dikdörtgenin kapsadığı dikey aralığı ekleyin Ri ilk karşılaştığımızda süpürme çizgisine Ri
  • Dikdörtgenin kapsadığı dikey aralığı kaldırın Ri geçerken süpürme çizgisinden Ri

Bunu ikili bir ağaçla yapmak kolaydır, böylece güncellemeler O(logn)saati. (Sorun esasen 1 boyutludur. Uç noktaların açıkta kalan bir aralıkta olup olmadığını anlarsınız ve çıkarırken uygun şekilde uzatır / birleştirirsiniz.)

Sonra sadece kontrol edin, R0, ortaya çıkarılan aralıkların hiçbiri, R0. Her şeyO(nlogn) zaman bir O(n) Uzay.

Genel durum için, bariz numara o kadar hızlı değil. Dikdörtgenlerin neden olduğu tüm düzlemsel altbölümü hesaplamak için standart tarama çizgisi algoritmasını kullanın.

Açıkça bazı disk benzeri setler F yüzlerin kapakları R0. Tek başına, bu bize yeterince anlatmıyor, çünkü ilgilendiğimiz şey bu yüzlerin herhangi birinin içeride olup olmadığıR0ve diğer dikdörtgenlerin dışında. Bunu yapmak için, yapıyı biraz değiştiririz, böylece bir kenar eklediğimizde, bir tarafı içindeki dikdörtgenin kimliğiyle etiketleriz. Bu eklerO(1) havai, yani inşaat O(n2logn)zaman; dikdörtgenler üzerinde hiçbir varsayım olmadan, çıktı olabilirΩ(n2) boyut olarak, en kötü durumda bu kadar yer kullanıyoruz, bu yüzden zaman "çıkış duyarlı" olmasa da "varoluşsal olarak optimal" dir.

En sonunda, R0 yüzlerin hiçbiri F yalnızca kenarlarından birinde olarak etiketlenmemiş kenarlara sahip Ri. Mesele şu ki eğer bir kenarıf içinde Ri, sonra bütün fde öyle. Bir çizgiyi süpürdüğünüzü hayal edinf dikey olarak bu kenar boyunca: sadece bırakabilir Ri ya dışında f veya f birden fazla kenarı ile sınırlıdır Ri.

Sonuç olarak, özel durum O(nlogn) ve genel olan O(n2logn) en azından, ancak geliştirilebileceğinden şüpheleniyorum.


Cevabınız için çok teşekkür ederim. Genel durum hakkında açıklamak istediğim birkaç şey var.Q - etkinlik puanları x rapor edilen koordinat, T - status - "açığa çıkmamış" aralıklar. xi birinin Rbaşkaları tarafından ortaya çıkarılan Ri,i1. BölümR0Anlamadım. Her yinelemede (ekleme) aralığın kesişip kesişmediğini kontrol etmeliyizR0, doğru mu?
com

Genel durum için, temel olarak, dikdörtgenlerin neden olduğu tüm düzlemsel haritayı nasıl inşa edeceğinizi bildiğinizi varsayıyorum ve sonra bunun bir yüzünün tamamen Ri sınırlayıcı kenarlarından biri "iç" Ri. Bunu, süpürme çizgisine eklendiklerinde sadece segmentlerin "iç" ve "dış" yönlerini kaydederek normal tarama algoritmalarında (örn. "İşaretler" kitabından) izleyebilirsiniz.
Louis
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.