NOUVELLE RÉPONSE: l'algorithme simple suivant est asymptotiquement optimal:
arbitrairement chacun des rectangles , dans toute la mesure du possible, de telle sorte que les rectangles restent disjoints deux à deux.Ci
Le nombre de trous est au maximum de . Ceci est asymptotiquement optimal, car il existe des configurations dans lesquelles le nombre de trous est d'au moins .k−2k−O(k−−√)
Les preuves sont dans cet article .
ANCIENNE RÉPONSE:
L'algorithme suivant, bien qu'il ne soit pas optimal, est apparemment suffisant pour trouver une partition préservant le rectangle avec parties.N=O(n)
L'algorithme fonctionne avec un polygone rectiligne , qui est initialisé au rectangle .PC
Phase 1: Choisissez un rectangle qui est adjacent à une limite ouest de (c'est-à-dire qu'il n'y a pas d'autre rectangle entre le côté ouest de et une limite ouest de ). La place dans et l' étirer jusqu'à ce qu'il touche la limite ouest de . Soit (pour ) la version étirée de . Soit . Répéter la phase 1 fois jusqu'à ce que tous lesCiPCjCiPCiPPEii=1,…,nCiP=P∖Einndes rectangles originaux sont placés et étirés. Dans l'image ci-dessous, un ordre possible de placement des rectangles est :C1,C2,C4,C3
Maintenant, est un polygone rectiligne (éventuellement déconnecté), comme ceci:P
Je prétends que le nombre de sommets concaves dans est au plus . En effet, chaque fois qu'un rectangle étiré est supprimé de , il y a 3 possibilités:P2nP
- 2 nouveaux sommets concaves sont ajoutés (comme lors du placement de );C1,C4
- 3 nouveaux sommets concaves sont ajoutés et 1 est supprimé (comme avec );C3
- 4 nouveaux sommets concaves sont ajoutés et 2 sont supprimés (comme avec ).C2
Phase 2: Partition en rectangles parallèles à l'axe en utilisant un algorithme existant (voir Keil 2000, pages 10-13 et Eppstein 2009, pages 3-5 pour une revue).P
Keil cite un théorème qui dit que le nombre de rectangles dans une partition minimale est limité par 1 + le nombre de sommets concaves. Par conséquent, dans notre cas, le nombre est au plus , et le nombre total de rectangles dans la partition est .2n+1N≤3n+1
Cet algorithme n'est pas optimal. Par exemple, dans l'exemple ci-dessus, cela donne tandis que la solution optimale a . Il reste donc deux questions:N=13N=5
A. Cet algorithme est-il correct?
B. Existe-t-il un algorithme polynomial pour trouver le optimal , ou au moins une meilleure approximation?N