Prezentacja multimedialna
Ciągły problem plecakowy
Jak już wiemy, ciągły problem plecakowy to taki wariant problemu plecakowego, w którym możemy pakować do plecaka fragmenty (części) przedmiotów.
W tej sekcji przedstawimy, w jaki sposób rozwiązać ciągły problem plecakowy, wykorzystując algorytm zachłanny.
Zaprezentowane rozwiązania będziemy testować dla następujących danych:
maksymalna pojemność plecaka wynosi 27;
możemy pakować części przedmiotów, ale do dyspozycji jest po jednej sztuce przedmiotu każdego rodzaju;
przedmioty, które mamy do dyspozycji, mają następujące wartości oraz wagi:
Przedmiot – | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
Nazwa | akwarele | blok rysunkowy | cienkopisy | dzienniczek | encyklopedia | flamastry | gumki do mazania |
Wartość | 3 | 17 | 2 | 1 | 5 | 3 | 4 |
Waga | 9 | 8 | 6 | 6 | 15 | 7 | 2 |
Przypomnijmy, w jaki sposób działa algorytm, analizując podane dane.
Zaczniemy od obliczenia ilorazów wartości i wag.
Obliczone ilorazy: 3/9, 17/8, 2/6, 1/6, 5/15, 3/7, 4/2.
Następnie sortujemy je nierosnąco.
Posortowane nierosnąco ilorazy: 17/8, 4/2, 3/7, 3/9, 2/6, 5/15, 1/6.
Daje to następującą kolejność posortowanych nierosnąco przedmiotów: blok rysunkowy, gumki do mazania, flamastry, akwarele, cienkopisy, encyklopedia, dzienniczek (indeksy: 1, 6, 5, 0, 2, 4, 3).
Dla każdego posortowanego przedmiotu sprawdzamy, czy można go spakować w całości, a jeśli nie, to w jakiej części.
Wybieramy pierwszy przedmiot. To blok rysunkowy, którego waga to 8. Jego waga jest mniejsza od pojemności plecaka, zatem możemy spakować ten przedmiot. Pojemność plecaka po spakowaniu tego przedmiotu wynosi 19.
Waga kolejnego przedmiotu (gumek do mazania) wynosi 2, zatem można spakować ten przedmiot. Pojemność plecaka po jego spakowaniu to 17.
Kolejnym przedmiotem są flamastry. Waga tego przedmiotu to 7. Jest mniejsza od pojemności plecaka, zatem zostaje zapakowany. Pozostała pojemność plecaka wynosi 10.
Kolejnym przedmiotem są akwarele, które ważą 9. Mogą zostać spakowane, a pojemność plecaka po ich spakowaniu wynosi 1.
Waga cienkopisów, następnego przedmiotu, wynosi 6. Jest większa od tego, jaka jest pozostała pojemność plecaka, zatem nie można ich spakować w całości.
Należy zatem obliczyć, jaką część można spakować. By to zrobić, dzielimy pozostałą pojemność plecaka przez wagę przedmiotu. Wynik to 1/6. By obliczyć, jaką wartość ma zapakowana część przedmiotu, uzyskany wynik mnożymy przez wartość całego przedmiotu.
Uzyskana wartość to 2 × 1/6, co daje 2/6. Po zaokrągleniu do trzeciego miejsca po przecinku wynik wynosi 0,333.
Obliczmy całkowitą wartość spakowanych przedmiotów:
blok rysunkowy: 17gumki do mazania: 4flamastry: 3akwarele: 3cienkopisy: 0,333
Całkowita wartość spakowanych przedmiotów wynosi 27,333. Wykorzystaliśmy całe miejsce.
Zapisz program, który rozwiąże ciągły problem plecakowy. Do dyspozycji masz po jednej sztuce każdego przedmiotu.
Wynik zaokrąglij do trzech miejsc po przecinku.
Specyfikacja problemu:
Dane:
nazwy– tablica łańcuchów znaków; nazwy poszczególnych przedmiotówwartosci– tablica liczb naturalnych; wartości poszczególnych przedmiotówwagi– tablica liczb naturalnych; wagi poszczególnych przedmiotówn– liczba naturalna; liczba rodzajów przedmiotówpojemnosc– liczba naturalna; maksymalna pojemność plecaka
Wynik:
spakowane przedmioty (w całości lub części), których całkowita waga nie przekracza wartości przechowywanej w zmiennej
pojemnosc, a których całkowita wartość jest największa wśród możliwych wypełnień plecaka rzeczami o takiej wadze, która nie przekracza wartości zmiennejpojemnosc; pakujemy po jednej sztuce przedmiotu każdego rodzajucałkowita wartość spakowanego plecaka zaokrąglona do trzech miejsc po przecinku
Działanie programu przetestuj dla następujących danych:
Przykładowe wyniki dla podanych danych:
Zapoznaj się z prezentacją przedstawiającą rozwiązanie ciągłego problemu plecakowego.