NOWA ODPOWIEDŹ: następujący prosty algorytm jest asymptotycznie optymalny:
Rozciągnij każdy z prostokątów Ci dowolnie, w maksymalnym możliwym zakresie, tak aby prostokąty pozostały rozłączone parami.
Liczba otworów wynosi co najwyżej k−2 . Jest to optymalnie asymptotycznie, ponieważ istnieją konfiguracje, w których liczba otworów wynosi co najmniej k−O(k−−√).
Dowody znajdują się w tym dokumencie .
STARA ODPOWIEDŹ:
Poniższy algorytm, choć nie optymalny, najwyraźniej wystarcza do znalezienia partycji zachowującej prostokąt z N=O(n)częściami ) .
Algorytm działa z wielokątem prostoliniowym P , który jest inicjowany do prostokątaC .
Etap 1: Wybierz prostokąt Ci który przylega do zachodniej granicy P (to znaczy nie ma żadnej innej prostokąt dojot między zachodniej części doja i zachodnim brzegu P. ). Miejsce doja w ciągu P. i naciągnąć go aż dotknie zachodniej granicy P. . Niech mija (dla i = 1 , … , n ) będzie rozciągniętą wersją doja . Niech P.= P∖ Eja. Powtarzaj fazę 1 n razy, aż wszystkie n oryginalnych prostokątów zostaną umieszczone i rozciągnięte. Na poniższym zdjęciu możliwa kolejność umieszczania prostokątów to do1, C.2), C.4, C.3) :
Teraz P. jest wielokątem prostoliniowym (prawdopodobnie odłączonym), jak poniżej:
Twierdzę, że liczba wklęsłych wierzchołków w P. wynosi co najwyżej 2 n . Dzieje się tak, ponieważ ilekroć rozciągnięty prostokąt zostanie usunięty z P. , istnieją 3 możliwości:
- Dodaje się 2 nowe wierzchołki wklęsłe (np. Podczas umieszczania do1, C.4 );
- Dodano 3 nowe wklęsłe wierzchołki i 1 usunięto (podobnie jak przy pomocy do3)
- Dodano 4 nowe wklęsłe wierzchołki i 2 usunięto (jak w przypadku do2) ).
P. na prostokąty równoległe do osi przy użyciu istniejącego algorytmu (przegląd: Keil 2000, strony 10-13 i Eppstein 2009, strony 3-5 ).
2 n + 1N.≤ 3 n + 1
N.= 13N.= 5
A. Czy ten algorytm jest poprawny?
N.