Optimalna razvrstitev datotek za najboljšo izrabo prostora na CD-ju ali DVD-ju

Gotovo ste že imeli na disku kup map, ki bi jih radi varnostno kopirali na CD/DVD. Če vam vrstni red zapisovanja ni pomemben in je podatkov zelo veliko, ste lahko porabili ogromno časa, da bi mape optimalno razvrstili in izkoristili ves prostor na optičnem mediju - ti jasno niso zastonj. Tudi sam sem se znašel pred podobno težavo.

Ker sem kupil več paketov Humble Indie Bundle in z njihove strani prenesel tako Windows kot tudi Linux kopije, sem kmalu dosegel več gigabajtov zasedenega prostora. Ker lahko disk kadarkoli pokaže podkve in ker sem za urejanje stvari po mapah porabil veliko časa, sem se odločil, da napravim varnostne kopije. Ampak kako jih naj razporedim? Šlo je za 34 predmetov in ročno razvrščanje bi bila prava nočna mora. Potem sem se pa spomnil zadeve imenovane preprosti problem nahrbtnika.

Pristop k problemu

Moj problem je bil izjemno poenostavljen, saj mi je bilo vseeno katera mapa je na katerem DVD-ju. Če prenesemo to na problem nahrbtnika, so imele vse mape enako vrednost (1). Torej bi potreboval le enostavno kombinacijo predmetov katerih vsota velikosti bi bila manjša ali enaka od velikosti mojega optičnega medija. Iskal sem najlažjo možnost in ugotovil, da ima pisarniški paket LibreOffice vgrajen Reševalnik v programu Calc.

Rešitev problema po korakih

Korak 1

Zadeva bo veliko lažja, če premaknete vse mape z datotekami v eno mapo. Odprite konzolo, se pomaknite do ustrezne mape in izvedite ukaz:

du -s * > seznam.csv

Izvedel se bo program du, ki bo shranil velikost vsake podmape (argument -s) v trenutni mapi v datoteko seznam.csv.

Korak 2

Odprite program LibreOffice Calc in izberite Datoteka » Odpri. Prebijte se do vaše datoteke seznam.csv in jo odprite. Pokaže se vam pogovorno okno, kjer pod ločeno z izberite tabulator in počistite ostala polja kot je to razvidno iz spodnjega posnetka zaslona.

LibreOffice: Pogovorno okno za uvoz .csv datoteke

Če korak pravilno izvedete, boste sedaj v stolpcu A imeli velikost v KiB, v stolpcu B pa ime mape.

Korak 3

Vstavite dodatno vrstico nad prvo vrstico in vpišite imena stolpcev (to ni nujen korak, se boste pa lažje orientirali). Stolpec A je Velikost / KiB, stolpec B je Ime, stolpec C je Da/Ne in stolpec D je Začasno / KiB.

Kaj pomenita prva dva že veste, za druga dva pa velja naslednje: stolpec C bomo uporabili za shranjevanje dvojiške spremenljivke 1 ali 0. 1 bo pomenila, da bo predmet prisoten na CD-ju/DVD-ju, 0 pa da ne bo prisoten. To bo reševalnik izpolnjeval sam. Stolpec D bo uporabljen za shranjevanje začasne velikosti mape. Če bo vrednost v stolpcu C 0, bo ta velikost 0, drugače pa bo enaka velikost mape. V stolpec C zato za vsako vrstico s podatki vnesite 1, v stolpec D pa v vsako vrstico i formulo:

=Ai*Ci

Najenostavneje je, da vnesete le formulo za vrstico 2 in nato potegnete vrednosti do konca (glejte sliko). Če ste vse naredili prav, bi morali v stolpcu D dobiti enake vrednosti kot v stolpcu A.

LibreOffice: Zapolnjevanje vrstic

Korak 4

Sedaj si morate izbrati dve celici v kateri boste shranili največjo velikost in optimizirano velikost. V mojem primeru sem si za optimizirano velikost izbral celico G1 za največjo velikost pa celico G2. Za celico G1 vnesite formulo:

=SUM(D2:D35)

Sešteli boste torej vse začasne vrednosti od prvega pa do zadnjega predmeta (zamenjajte številko 35 s pravim številom predmetov) in jih shranili v celico G1.

Za celico G2 boste morali vnesti velikost medija v KiB. Vrednosti za velikosti lahko dobite na Wikipediji (CD/DVD), bodite pozorni, da boste res izbrali pravo velikost. Ker ni nujno, da zna vaš zapisovalnik izkoristiti ves prostor ali pa medij ni standarden, za vsak slučaj od vrednosti v KiB odštejte 1024 KiB (približno 1 MiB). Za moj primer sem izbral velikost enoslojnega DVD-R (4596992 KiB) in zavoljo varnosti uporabil velikost 4596000 KiB.

Korak 5

Sedaj morate pognati reševalnik. Najdete ga pod Orodja » Reševalnik. Kot ciljno celico nastavite G1, optimiziraj naj bo na največjo vrednost, s spreminjanjem celic $C$2:$C$35.

Potrebno je še določiti mejne pogoje. Prvi pogoj je, da mora biti optimizirana velikost manjša ali enaka velikosti medija ($G$1 <= $G$2), drugi pogoj je, da morajo biti vrednosti v stolpcu C (Da/Ne) manjše ali enake 1:

LibreOffice: Nastavitev reševalnika

Pod možnosti morate nastaviti da so spremenljivke celoštevilčne in da so nenegativne (večje ali enake 0).

LibreOffice: Možnosti reševalnika

Korak 6

Pritisnite Reši in reševalnik bo samodejno pretvoril 1 v 0 in obratno, da bo optimizirana velikost čimbližje največji velikosti.

LibreOffice: Rešen problem

Preizkus optimizacije

Pa preizkusimo, če je reševalnik res izbral optimalno velikost s pomočjo programa za zapisovanje k3B:

K3B: preizkus rešitve

Kot lahko vidite spodaj desno, je na voljo ostalo blizu 1 MiB prostora kot smo določili v največji velikosti medija. Izbrane vrednosti lahko sedaj razvrstite/izbrišete in postopek poljubno krat ponovite.

Kot preizkusno datoteko si lahko izberete moj seznam v obliki ods. Za odpiranje potrebujete LibreOffice.


Zadnja sprememba: | Deli na: