Ich habe eine rechteckige Ebene der ganzzahligen Dimension. Innerhalb dieser Ebene habe ich eine Reihe von sich nicht schneidenden Rechtecken (von ganzzahliger Dimension und ganzzahligen Koordinaten).Invertieren einer Reihe von Rechtecken auf einer 2D-Ebene
Meine Frage ist, wie kann ich effizient die Umkehrung dieser Menge finden; das sind die Teile der Ebene, die nicht in einem Unterrechteck enthalten sind. Natürlich bildet diese Sammlung von Punkten eine Menge von Rechtecken - und an denen bin ich interessiert.
Meine aktuelle, naive Lösung verwendet eine boolesche Matrix (die Größe der Ebene) und funktioniert durch Setzen von a Punkt i, j auf 0, wenn es in einem Unterrechteck enthalten ist und 1 andernfalls. Dann iteriere ich durch jedes Element der Matrix und versuche, wenn es 1 ist (frei), ein Rechteck von dem Punkt nach außen zu "wachsen". Einzigartigkeit ist kein Problem (ein geeigneter Satz Rechtecke ist in Ordnung).
Gibt es Algorithmen, die ein solches Problem effektiver lösen können? (Ie, ohne auf eine boolesche Matrix zurückgreifen zu müssen.)
Implementierung [hier] (http://stackoverflow.com/questions/4239675/inverting-a-set-of-rectangles- on-a-2d-plane/4240134 # 4240134) – Eric
@Eric: cool - Ich habe deinen Code noch nicht ausprobiert, aber es ist gut, eine (möglicherweise funktionierende) Implementierung zu sehen. Ich habe bereits C-Code dafür, aber leider ist es Teil eines proprietären Projekts, so dass ich nicht frei bin, es zu teilen. –