semplificato, devo risolvere il seguente problema:algoritmo per trovare il numero minimo di rettangoli che coprono alcuni elementi di un array 2D
Si dispone di un array a 2 dimensioni pieno di 0 e 1. Trova il numero minimo di rettangoli in modo che coprano tutti gli 1s. I rettangoli non dovrebbero sovrapporsi.
La firma della funzione potrebbe essere simile: List<Rectangle> FindCoveringRectangles(bool[,] array)
ho già una soluzione che è "abbastanza buono", ma non sempre trovare il numero minimo di rettangoli. Mi piacerebbe sapere se esiste un algoritmo ben noto ed efficiente che può essere applicato per risolvere questo problema?
Esempio:
Un array di ingresso:
..........
.1.....11.
.......11.
...111....
...111....
...111....
....1111..
....1111..
......11..
..........
(0s sostituiti da punti di leggibilità)
potrebbe comportare seguenti rettangoli:
(2,2,2,2),
(2,8,3,9),
(4,4,6,6),
(7,5,8,8),
(9,7,9,8)
(all'inizio , sinistra, in basso, a destra), 1-based
Ci può essere più di una soluzione, ma una è sufficiente.
Se ci indichi il tuo algoritmo di approssimazione, forse possiamo aiutarti a migliorarlo nel peggiore dei casi. –
Cosa stai cercando di ottimizzare? Il numero minimo di rettangoli è sempre 1. – ThomasMcLeod
Questo problema viene risolto in modo eccellente nel contesto delle [mappe di Karnaugh] (http://en.wikipedia.org/wiki/Karnaugh_map). – thiton