eine n * m-Matrix mit den möglichen Werten von 1 gegeben, 2 und null:findet alle rechteckigen Flächen mit bestimmten Eigenschaften in einer Matrix
. . . . . 1 . .
. 1 . . . . . 1
. . . 2 . . . .
. . . . 2 . . .
1 . . . . . 1 .
. . . . . . . .
. . 1 . . 2 . .
2 . . . . . . 1
I für alle Blöcke B Suche (alle Werte zwischen enthaltend (x0, y0) und (x1, y1)), dass:
- enthalten mindestens eine '1'
- enthalten keine '2'
- sind keine Teilmenge einer anderen Block mit den obigen Eigenschaften
Beispiel:
Die roten, grünen und blauen Bereich enthalten alle eine '1', nicht '2', und sind nicht Teil einer größeren Fläche. Es gibt natürlich mehr als 3 solcher Blöcke in diesem Bild. Ich möchte alle diese Blöcke finden.
Was wäre ein schneller Weg, um alle diese Bereiche zu finden?
Ich habe eine funktionierende Brute-Force-Lösung, die über alle möglichen Rechtecke iteriert und prüft, ob sie die ersten beiden Kriterien erfüllen; dann Iterieren über alle gefundenen Rechtecke, Entfernen aller Rechtecke, die in einem anderen Rechteck enthalten sind; und ich kann das beschleunigen, indem ich nacheinander aufeinanderfolgende identische Zeilen und Spalten entferne. Aber ich bin ziemlich sicher, dass es einen viel schnelleren Weg gibt.
Alle Kanten dieser Blöcke befinden sich am Rand der Grafik oder neben einer "2". Vielleicht kannst du damit etwas anfangen. – robert
Wenn Sie hier keine gute Antwort erhalten haben, können Sie es auch in http://cs.stackexchange.com fragen. –