StartAlgorytmyInneProblem załadunku
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Problem załadunku
Ocena użytkowników:++++- / 4
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
niedziela, 31 lipca 2005 23:41
Algorytm jest oparty o metodę programowanie dynamiczne
Problem załadunku jest pewną odmianą problemu plecakowego. Tu również mamy pewne elementy (kontenery), którym jest przypisany cięzar i pojemność. Jest danych n-typów kontenerów, gdzie dla j-tego typu a[j] oznacza jego ciężar a c[j] jego pojemność. Tak jak w problemie plecakowym daną mamy również ładowność, którą oznaczymy jako b. Cała różnica polega na tym, że podczas załadunku możemy użyć dowolnej ilości elementów danego typu j (a nie jak w problemie plecakowym jednego) W problemie tym chodzi o to by maksymalizować funkcję: Image przy założeniu: Image, czyli suma załadowanych kontenerów musi być mniejsza lub równa ładowności, gdzie w[j] to liczba załadowanych kontenerów j-tego typu (w[j]<=0).
By rozwiązać ten problem stosując programowanie dynamiczne posłużymy się oprócz tablic jednowymiarowych a - tablica ciężarów elementów i c - tablica pojemności elementów, również dwoma tablicami dwuwymiarowymi f i x o rozmiarach n na b. Najpierw przeprowadzimy pierwszą; iterację dla l=0,1...b do wzorów:
Image
Mamy już teraz wypełnione pierwsze kolumny w tablicach f oraz x. Teraz musimy skonstruować zagnieżdżoną; iterację. Wewnątrz pętli dla j=2,3...n umieszczamy jeszcze jedną; pętlę dla l=0,1...b i wewnątrz niej wykonujemy następujące działania
Image
Po tych operacjach możemy już odczytać wynik z tablic f oraz x. A więc odczytujemy wartość elementu położonego na samym końcu w ostatniej kolumnie tablicy x. Wartość ta to numer kontenera który musimy zabrać, a więc zwiększamy w[ta_wartość] o jeden, i idziemy w górę tej kolumny o cięzar tego elementu czyli a[ta_wartość], odczytujemy wartość tego elementu i postępujemy analogicznie jak w poprzedniej sytuacji (zwiększamy odpowiednie w[j] o jeden i idziemy w górę). Czynności powtarzamy tak długo aż jako numer kontenera nie pojawi się nam zero. Przykład:
dla b=9
typ (j) 1 2 3 4
ciężar (a[j]) 7 4 3 2
pojemność (c[j]) 17 10 8 6

l f[1,l] f[2,l] f[3,l] f[4,l] x[1,l] x[2,l] x[3,l] x[4,l]
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
2 0 0 0 6 0 0 0 4
3 0 0 8 8 0 0 3 3
4 0 10 10 12 0 2 2 4
5 0 10 10 14 0 2 2 4
6 0 10 16 18 0 2 3 4
7 17 17 18 20 1 1 3 4
8 17 20 20 24 1 2 2 4
9 17 20 24 26 1 2 3 4
Czyli należy wziąć 3 kontenery 4-tego typu i 1 3-ego typu.


Autor Język programowania Komentarz Otwórz Pobierz Ocena
Michał Knasiecki C/C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 1
Tomasz Lubiński Delphi/Pascal Borland Delphi 5
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: czwartek, 09 czerwca 2011 21:02

Dodaj komentarz

Kod antysapmowy
Odśwież