Parse 2D array ai rettangoli
-
11-12-2019 - |
Domanda
Sto cercando un modo per convertire un array 2D per il minor numero di rettangoli possibili come in questo esempio:
X
12345678
--------
1|00000000
2|00011100
3|00111000
Y 4|00111000
5|00111000
6|00000000
.
Alle coordinate angolari dei rettangoli:
Seguendo il modello (x1, y1); (x2; y2)
rectangle #1 (4,2);(6,2)
rectangle #2 (3,3);(5,5)
.
C'è stata una domanda simile qui prima, ma sfortunatamente, il collegamento fornito nella sua risposta è rotto, e non posso più controllarlo.
Mi piacerebbe farlo in c # ma qualsiasi tipo di aiuto è apprezzato.
(non deve nemmeno essere il minor numero di rettangoli possibili, ma il minimo è il migliore :))
Grazie in anticipo!
Soluzione
Penso che tu stia cercando di coprire un set di punti nel piano 2D con il numero minimo richiesto di rettangoli. Una risposta a Trova i rettangoli K coprono il numero massimo di punti ha detto che questo era un problema completo di NP e collegato a http://www.almaden.ibm.com/u/kclarkson/set_cover/p.pdf (che funziona per me) Una ricerca Google trova http://2011.ccang.ca/pdfschedule/papers/paper102.pdf .
Le carte sono d'accordo sul fatto che il rivestimento rettangolo è completo, ma non lo dimostriamo, e i riferimenti per questo sembrano essere insolitamente elusivi -
Altri suggerimenti
Questo potrebbe aiutarti a iniziare.Se converti i dati binari sui numeri, ottieni questo:
0
28
56
56
56
0
.
Quindi, dove mai ci sono numeri uguali consecutivi, c'è un rettangolo.