Un amico mi ha dato un puzzle che dice che può essere risolto in meglio di O (n^3).Trova la più piccola serie di lavori sovrapposti
Dato un insieme di n lavori che hanno ciascuno un orario di inizio e di fine impostato (le sovrapposizioni sono molto possibili), trovare il sottoinsieme più piccolo che per ogni lavoro include quel lavoro o include un lavoro che si sovrappone a quel lavoro.
Sono sicuro che la soluzione ottimale è selezionare il lavoro con la sovrapposizione non contrassegnata, aggiungerlo al set di soluzioni, quindi contrassegnarlo e la sua sovrapposizione. E ripetere fino a quando tutti i lavori sono contrassegnati.
Capire quale lavoro abbia gli overlapper non contrassegnati è una semplice matrice di adiacenza (O (n^2)), e questo deve essere rifatto ogni volta che viene selezionato un lavoro, per aggiornare i segni, rendendolo O (n^3).
C'è una soluzione migliore?
La tua soluzione è avida e non è sempre vera (posso dare esempi dove fallisce), ma può anche essere implementata con una maggiore complessità. –
@izomorphius È avido, per intento. Ma non sono stato in grado di dimostrarlo non ottimale. Qualche idea su quale sia la soluzione con una maggiore complessità? – kwiqsilver
So che è avido, ma non è corretto. Ecco un esempio: intervalli: (0, 2), (1, 4), (3, 6), (5, 8), (7, 10). Gli intervalli del primo passaggio (1,4), (3,6), (5,8) coprono tutti gli altri due in modo da poter scegliere uno di essi, ma l'unica risposta migliore è se si sceglie (1,4) e (5) , 8). Vi sono esempi in cui l'intervallo che copre la maggior parte degli intervalli è identificato in modo univoco, ma la soluzione migliore non la include, ma è un po 'più difficile da pensare. Se insisti, cercherò di dartene uno. –