ich suche einen Algorithmus, mit dem ich einen vorgegebenen Platz
(in diesem Fall ein-dimensional) optimal mit ebenfalls vorgegebenen,
natürlich nicht gleich großen Teilen ausfüllen kann.
Hm, vielleicht doch ein wenig zu abstrakt, also erklär ich mal mein
Problem:
Ich möchte mir eine kleine Anwendung schreiben, die mir für eine Liste
von Dateien ausgibt, in welcher Kombination ich sie am besten auf
mehrere Datenträger (deren Größe bekannt ist) verteile, um deren
Kapazität optimal zu nutzen.
Sicher ist so ein Algorithmus schon lange bekannt, ich kenne aber
seinen Namen nicht :-(
Ich brauche, wie das Beispiel deutlich macht, nur eine ganz einfache
eindimensionale Variante, kann mir einer helfen?
Vielen Dank im voraus,
Dirk
--
http://www.dirk-schwarzmann.de/
"Wenn man nur einen Hammer hat, sieht plötzlich jedes Problem wie ein
Nagel aus." (Matthias Esken in de.comm.infosystems.www.authoring.misc)
Das ist das Rucksackproblem.
>Ich möchte mir eine kleine Anwendung schreiben, die mir für eine Liste
>von Dateien ausgibt, in welcher Kombination ich sie am besten auf
>mehrere Datenträger (deren Größe bekannt ist) verteile, um deren
>Kapazität optimal zu nutzen.
Die optimale Lösung des Rucksackproblems ist NP hart, d.h. Du wirst
expotentiellen Aufwand (über Deine Fileanzahl) treiben müssen. bei 10
Dateien, hast Du in der Größenordnung von 1024 Rechenschritten zu testen.
Bei 100 Dateien, sind es 1 267 650 600 228 229 401 496 703 205 376 Rechen-
schritte. Du wirst also im Bereich der heuristischen oder generischen
Algorithmen suchen müssen, um ein schnelles, aber eben nur fast immer
optimales Ergebnis zu bekommen.
Vorschlag: Verteile die Dateien von groß nach klein auf.
Klingt nach einem modifizierten "Rucksack"-Problem.
Das Rucksack-Problem ist allerdings NP-vollständig, also für grosse
Datenmengen praktisch nicht berechenbar.
Es gibt allerdings _genügend_ Algorithmen, die zwar nicht optimale,
aber ganz vernünftige Lösungen liefern.
goggle mal nach:
- Greedy - Algorithmen
- Rucksack-Problem
mf
>> Ich möchte mir eine kleine Anwendung schreiben, die mir für eine Liste
>> von Dateien ausgibt, in welcher Kombination ich sie am besten auf
>> mehrere Datenträger (deren Größe bekannt ist) verteile, um deren
>> Kapazität optimal zu nutzen.
>Klingt nach einem modifizierten "Rucksack"-Problem.
Ich kenne diesen Spezialfall des "Rucksack"-Problems unter dem Namen "Bin
Packing". Sehr einfache Heuristiken sind z.B. "first fit" oder "best fit".
Mfg Pascal
> >Klingt nach einem modifizierten "Rucksack"-Problem.
>
> Ich kenne diesen Spezialfall des "Rucksack"-Problems unter dem Namen "Bin
> Packing". Sehr einfache Heuristiken sind z.B. "first fit" oder "best fit".
Vielen Dank für Eure Antworten,