Z góry przepraszam za dość enigmatyczny tytuł (i niefachowy opis tego, co chcę uzyskać), ale nie wiedziałem jak to móc opisać jednym zdaniem. Jeżeli nie istnieje takowy algorytm, to prosiłbym o pomoc w nakierowaniu na możliwe rozwiązanie problemu :)
Otóż załóżmy, że mamy sobie obiekt (strukturę?) o z góry zadeklarowanej pojemności, która posiada w sobie informację o zawartości - może to przypominać na przykład dysk twardy. Obiekt wyglądałby mniej więcej tak (pseudokod):
Object pojemnik {
unsigned int pojemnosc = 20;
array zawartosc = { x1, x2, x3 }
}
Elementy tablicy zawartość to inne obiekty, które wyglądałyby na przykład tak:
Object elementPojemnika {
String nazwa = "x1";
unsigned int wielkosc = 4;
}
I wygląda to tak, że do obiektu Pojemnik nie możemy dołożyć więcej obiektów, niż wynosi jego wartość zadeklarowana w polu zawartosc - czyli hipotetyczna funkcja dodajDoPojemnika(pojemnik,elementPojemnika) działałaby tylko jeżeli aktualna suma wielkości elementów pojemnika nie przekroczyłaby zadeklarowanej zawartości (w tym wypadku - obiekt Pojemnik mógłby pomieścić maksymalnie pięć elementów x1).
Pytanie brzmi - jeżeli mamy x pojemników o jednakowym rozmiarze y (czyli w wersji uproszczonej: jeżeli mamy x dysków twardych które mają jednakową pojemność y) oraz n elementów pojemnika o różnym rozmiarze (czyli w wersji uproszczonej: n plików o różnych rozmiarach których chcemy umieścić na dyskach twardych), to czy istnieje taki algorytm, który umożliwiłby optymalne rozmieszczenie elementów pojemnika w pojemnikach tak, aby wykorzystać jak najmniej pojemników? (ponownie upraszczając: czy istnieje algorytm, który pozwoliłby tak poupychać pliki na dyskach twardych, aby zużyć jak najmniej dysków i aby na dyskach zostało jak najmniej wolnego miejsca?) Bo jedyne rozwiązanie jakie mi się nasuwa to bruteforce, który wrzucałby element do pojemnika, a potem by go wyrzucał jeżeli istniałby element, który ekonomiczniej zajmie wolne miejsce...
Z góry dzięki za przeczytanie i pomoc :)