Algorytmy i Struktury Danych Sprawozdanie nr 5 – Programowanie

Transkrypt

Algorytmy i Struktury Danych Sprawozdanie nr 5 – Programowanie
Algorytmy i Struktury Danych
Sprawozdanie nr 5 – Programowanie dynamiczne i algorytmy zachłanne.
Rok akademicki
Grupa
Autorzy:
Dominik Głodek
Piotr Majewski
2013/2014
I5.1
117309
117315
Cel badania
Badanie ma na celu sprawdzenie wydajności trzech algorytmów rozwiązywania problemu
plecakowego – brute force, algorytmu zachłannego oraz dynamicznego.
Metoda przeprowadzenia badania i środowisko testowe
Algorytmy zostały zaimplementowane w języku C++. Środowisko testowe to Windows 7,
Code::Blocks, kompilator gcc. Program był odpalany na komputerze z procesorem i5-430M, 4GB
RAM. Czas wykonywania był mierzony za pomocą funkcji dostępnej w bibliotece windows.h –
QueryPerformanceCounter, poprzez zmierzenie ilości taktów zegara procesora potrzebnych
do wykonania algorytmów. Wszystkie pomiary były wykonywane 3-krotnie. Wynikiem jest średnia
tychże 3 pomiarów.
Wykresy
Z racji, że liczba przedmiotów jest zawsze liczbą całkowitą wyniki powinny byd przedstawione na
wykresach w postaci punktów. Jednak dla większej przejrzystości zostały narysowane linie trendu.
Wykresy porównujące algorytmy nie są zbyt czytelne, ponieważ szybko rosnący brute force zawyża
skalę na tyle, że pozostałe dwa wykresy są niewidoczne. Dlatego postanowiliśmy zrobid dodatkowe 3
wykresy przedstawiające tylko 2 algorytmy – zachłanny i dynamiczny.
Algorytm zachłanny
Rozmiar plecaka:
50
100
150
0,035
0,030
Czas wykonywania [ms]
0,025
0,020
0,015
0,010
0,005
0,000
15
16
17
18
19
20
21
22
23
24
25
22
23
24
25
Liczba przedmiotów
Algorytm brute force
Rozmiar plecaka:
50
100
150
12 000
Czas wykonywania [ms]
10 000
8 000
6 000
4 000
2 000
0
15
16
17
18
19
20
21
Liczba przedmiotów
Algorytm dynamiczny
Rozmiar plecaka:
50
100
150
0,250
Czas wykonywania [ms]
0,200
0,150
0,100
0,050
0,000
15
16
17
18
19
20
21
22
23
24
23
24
Liczba przedmiotów
Rozmiar plecaka - 50
Algorytm:
Zachłanny
Brute Force
Dynamiczny
12 000
Czas wykonywania [ms]
10 000
8 000
6 000
4 000
2 000
0
15
16
17
18
19
20
21
Liczba przedmiotów
22
25
Rozmiar plecaka - 100
Algorytm:
Zachłanny
Brute Force
Dynamiczny
10 000
9 000
8 000
Czas wykonywania [ms]
7 000
6 000
5 000
4 000
3 000
2 000
1 000
0
15
16
17
18
19
20
21
22
23
24
23
24
Liczba przedmiotów
Rozmiar plecaka - 150
Algorytm:
Zachłanny
Brute Force
Dynamiczny
10 000
9 000
Czas wykonywania [ms]
8 000
7 000
6 000
5 000
4 000
3 000
2 000
1 000
0
15
16
17
18
19
20
21
Liczba przedmiotów
22
Rozmiar plecaka - 50
Algorytm:
Zachłanny
Dynamiczny
0,120
Czas wykonywania [ms]
0,100
0,080
0,060
0,040
0,020
0,000
15
16
17
18
19
20
21
22
23
24
Liczba przedmiotów
Rozmiar plecaka - 100
Algorytm:
Zachłanny
Dynamiczny
0,160
0,140
Czas wykonywania [ms]
0,120
0,100
0,080
0,060
0,040
0,020
0,000
15
16
17
18
19
20
21
Liczba przedmiotów
22
23
24
Rozmiar plecaka - 150
Algorytm:
Zachłanny
Dynamiczny
0,250
Czas wykonywania [ms]
0,200
0,150
0,100
0,050
0,000
15
16
17
18
19
20
21
Liczba przedmiotów
22
23
24
Tabela wyników
Tabela poniżej przedstawia wyniki poszczególnych algorytmów oraz procentową różnicę pomiędzy
wynikiem algorytmu zachłannego, a rozwiązaniem optymalnym.
n
W
Zachłanny
15
50
112
127
127
16
17
18
19
20
21
50
50
50
50
50
50
78
74
77
47
108
71
78
95
84
69
108
88
78
95
84
69
108
88
22
23
24
25
15
16
17
50
50
50
50
100
100
100
90
85
95
82
111
98
173
93
98
95
88
129
115
173
93
98
95
88
129
115
173
18
19
20
21
22
23
100
100
100
100
100
100
131
171
116
191
157
120
131
177
145
203
192
126
131
177
145
203
192
126
24
25
15
16
17
18
100
100
150
150
150
150
112
141
157
151
156
215
152
172
163
151
158
215
152
172
163
151
158
215
19
20
21
22
23
24
25
150
150
150
150
150
150
150
185
213
207
206
164
155
195
200
232
207
206
177
174
208
200
232
207
206
177
174
208
Strata minimalna:
Strata maksymalna:
Strata średnia:
Brute force
Dynamiczny
Strata
13%
0%
28%
9%
47%
0%
24%
3%
15%
0%
7%
16%
17%
0%
0%
4%
25%
6%
22%
5%
36%
22%
4%
0%
1%
0%
8%
9%
0%
0%
8%
12%
7%
0%
47%
11%
Analiza wyników i wnioski
Współczynnik zmienności
Współczynnik zmienności wynosił 0-11% dla algorytmu zachłannego, 0-9% dla brute force oraz 0-8%
dla algorytmu. Dodatkowe pomiary zostały uznane za zbędne.
Algorytm zachłanny
Algorytm zachłanny nie znajduje najbardziej optymalnego rozwiązania problemu, ale w zamian za to
jest najszybszy. Jego złożonośd obliczeniowa to 𝑂(𝑛 ∗ 𝑙𝑜𝑔 𝑛). Jest ona spowodowana złożonością
użytego sortowania (quicksort).
Brute force
Rozwiązanie problemu plecakowego za pomocą metody brute force jest skuteczne, aczkolwiek
bardzo czasochłonne. Polega ona na sprawdzeniu wszystkich możliwych kombinacji włożenia
przedmiotów do plecaka i znalezienie najlepszego rozwiązania. Jego złożonośd obliczeniowa wynosi
aż 𝑂(2𝑛 ).
Algorytm dynamiczny
Ten algorytm spisuje się najlepiej z pozostałych. Zawsze pokazuje optymalne rozwiązanie, a w
dodatku robi to w rozsądnym czasie. Rozwiązuje on te zadanie, obliczając po kolei rozwiązanie dla
coraz większego n oraz W. Jego złożonośd obliczeniowa wynosi 𝑂(𝑛 ∗ 𝑊).
Podsumowanie
Najlepszym z testowanych algorytmów okazał się byd zgodnie z założeniami algorytm dynamiczny.
Jeśli komuś zależy bardzo na szybszym czasie wykonywania to polecamy algorytm zachłanny, który
nie spisał się wcale najgorzej. Natomiast wykładnicza złożonośd czasowa algorytmu brute force
skreśla go z użytku dla testów z większą liczbą przedmiotów.

Podobne dokumenty