Qual è l'algoritmo ottimale per riempire un set di dischi Blu-ray dato molte centinaia di gigabyte di risorse di varie dimensioni?qual è l'algoritmo per riempire in modo ottimale un dvd per la masterizzazione
Sto cercando di consolidare un gran numero di vecchi CD-ROM, DVD e piccoli dischi rigidi e di mettere tutto in un database indicizzato dalla firma MD5. Un compito scoraggiante di sicuro.
Quello che faccio attualmente è ordinare le dimensioni delle risorse (di solito le dimensioni delle directory) in ordine decrescente, iniziare a inserire le risorse più grandi nell'elenco di riempimento saltando quelle che non si adattano finché non esaurisco le risorse. Funziona quasi istantaneamente, ma non mi dispiacerebbe correre di notte se necessario una volta.
Di solito mi dà il 95% o più di utilizzo, ma sono sicuro che c'è un modo di usare altre combinazioni per dare una maggiore efficienza. Con oggetti enormi come le immagini disco, posso ottenere un utilizzo piuttosto basso con questo metodo primitivo.
Il mio pensiero è di prendere tutte le combinazioni delle risorse prese, 1 quindi 2, poi 3, ... elementi alla volta e mantenere un valore corrente per il conteggio di byte più elevato < 25,025,314,816 byte che puntano alla matrice che somma a esso. Quando arrivo al punto in cui ho raccolto così tante risorse in una volta che nessuna delle combinazioni si adatta, si ferma e usa l'array puntato dal contatore più alto in esecuzione.
È questo il miglior algoritmo possibile?
Ci sono 2 moduli Perl che sembrano all'altezza del compito, Algoritmo-Combinatorio e Math-Combinatorics. Qualche consiglio su quale è più veloce, più stabile, più fresco?
Il mio schema è di scrivere uno script per calcolare le dimensioni di un gran numero di directory e mostrarmi il contenuto ottimale delle dozzine di dischi da masterizzare.
E, non voglio semplicemente riempire un file per file perché voglio intere directory sullo stesso disco.
No. Knappsack ha 2 variabili – Bytemain
Quindi, è possibile impostare tutti gli elementi per avere un "valore" di 1, ad esempio – anttix
Certo, è possibile farlo, ma funziona per la metrica di byte e kilobyte? È qualcosa di virtuale – Bytemain