Część 4

Transkrypt

Część 4
WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA
Metody algorytmiczne
Wędruj i sprawdzaj
Prosty przegląd struktury danych np. w celu znalezienia największego elementu ze zbioru danych
przechowywanych w tej strukturze:
iteracja
→
np. wektor, lista
iteracje zagnieżdżone
→
np. tablice wielowymiarowe, listy list itp.
rekurencja
→
np. drzewa
Przegląd struktury = budowanie ciągu zawierającego wszystkie obiekty w strukturze
Drzewa można przeglądać iteracyjnie:
Algorytm przeglądu drzewa w głąb (budowanie ciągu zawierającego wszystkie wierzchołki drzewa):
1. wstaw korzeń jako pierwszy element ciągu,
2. powtarzaj co następuje, aż do nadania korzeniowi etykiety „zamknięty”:
2.1. wybierz z aktualnego ciągu ostatni wierzchołek, który nie ma etykiety „zamknięty”,
2.2. jeśli wybrany wierzchołek nie ma potomstwa, które jeszcze nie zostało dopisane do ciągu, to nadaj mu
etykietę „zamknięty”, w przeciwnym przypadku dopisz do ciągu pierwszego (licząc od lewej) jego
potomka, który jeszcze nie występuje w ciągu.
Algorytm przeglądu drzewa wszerz (budowanie ciągu zawierającego wszystkie wierzchołki drzewa):
1. nadaj etykietę „nowy” wszystkim wierzchołkom drzewa,
2. wstaw korzeń jako pierwszy element ciągu,
3. dopóki w tworzonym ciągu występuje wierzchołek z etykietą „nowy”, powtarzaj co następuje:
3.1. wybierz z aktualnego ciągu pierwszy wierzchołek, który ma etykietę „nowy”, dodaj do ciągu
wszystkich jego potomków w kolejności od lewej i usuń dla tego wierzchołka etykietę „nowy”.
1
2
3
4
5
1
6
8
7
9
10
2
5
11
6
9
Przegląd drzewa w głąb
3
4
7
8
10
11
Przegląd drzewa wszerz
Przykład metody ”wędruj i sprawdzaj” - znajdowanie największej przekątnej w wielokącie wypukłym
1
6
2
5
4
3
N - liczba wierzchołków
Struktura danych dla opisu wielokąta - tablica dwuwymiarowa:
1
x1
y1
X
Y
2
x2
y2
3
x3
y3
...
...
...
N
xN
yN
Co przeglądamy? Np. tablicę długości wszystkich odcinków pomiędzy wierzchołkami.
1
2
d12
1
2
3
d21
d31
d32
N
dN1
dN2
3
d13
d23
...
...
dN3
...
N
d1N
d2N
d3N
Przejrzenie górnej trójkątnej połowy tablicy (liczba elementów N(N − 1)/2) pozwala znaleźć element o
największej wartości.
WSTĘP DO INFORMATYKI (4)
J.Sikorski
Strona 1 / 4
WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA
Ale można inaczej:
A
B
1
6
d24
5
C
1
6
2
d25
2
5
5
4
4
3
D
d36
5
4
3
F
1
6
2
d35
3
E
1
6
1
6
2
d13
1
6
2
2
5
5
d14
4
3
4
4
3
3
Czyli dla 6 wierzchołków wystarczy 6 zamiast 15 kroków ( 15 = 6(6−1)/2 )
Dziel i zwyciężaj
Jeśli nie możesz uporać się z rozwiązaniem zadania w całości, to spróbuj dzielić je na mniejsze o takiej samej
strukturze i stosuj rekurencyjnie algorytm rozwiązywania. Uzyskane rozwiązania małych zadań łącz w
rozwiązania tych zadań, które były wcześniej dzielone.
Przykład metody ”dziel i zwyciężaj” - sortowanie przez scalanie
Dane: nieuporządkowana N elementowa lista
procedura sortuj-listę L;
1.
jeśli L zawiera tylko jeden element, to jest posortowana;
2.
w przeciwnym razie wykonaj co następuje:
2.1.
podziel listę L na dwie połowy L1 i L2;
2.2.
wywołaj sortuj-listę L1;
2.3.
wywołaj sortuj-listę L2;
2.4.
scal posortowane listy L1 i L2 w jedną posortowaną listę;
3.
wróć do poziomu wywołania.
5
12 17
7
20 21
5
7
12 17 20 21
15
7
45
Przykładowy schemat scalania:
Przykładowy schemat metody:
8
12 11
4
34
PODZIAŁ
15
7
45
8
12 11
PODZIAŁ
15
7
45
12 11
8
12
S
15
8
8
4
S
45
34
P
11
34
S
11 12
SCALANIE
7
4
P
45
S
7
8
P
7
34
PODZIAŁ
P
15
4
4
34
SCALANIE
15 45
4
11 12 34
SCALANIE
4
WSTĘP DO INFORMATYKI (4)
7
8
11 12 15 34 45
J.Sikorski
Strona 2 / 4
WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA
Metoda zachłanna
Istnieją zadania, których rozwiązanie może być budowane z elementów dobieranych kolejno według zasady „idź
naprzód, łap najlepsze z tego co pod ręką i nigdy potem nie oddawaj tego co już masz”.
Przykład metody „zachłannej”- wyznaczanie minimalnego drzewa rozpinającego w grafie
Problem polega na znalezieniu najtańszej sieci połączeń wiążącej wszystkie podane punkty.
26
3
17
12
15
7
10
13
8
3
14
9
13
9
7
10
11
6
11
6
16
4
4
Spójny graf z wagami krawędzi
Minimalne drzewo rozpinające
(koszt: 63)
Przykładowa realizacja metody zachłannej:
3
3
A
3
B
10
3
C
10
D
10
6
4
3
10
3
E
7
3
F
9
7
10
6
4
10
9
7
6
4
6
4
3
G
H
9
7
10
13
11
11
6
4
4
Algorytm:
1.
2.
wybierz najkrótszy odcinek drogi
powtarzaj co następuje, aż do połączenia wszystkich punktów:
2.1. wybierz najkrótszy odcinek spośród tych odcinków, które łączą jedno z już połączonych miast z
jakimkolwiek miastem jeszcze nie połączonym
Programowanie dynamiczne
Zasada (optymalności Bellmana):
jeżeli znamy najlepszą drogę przejścia od punktu początkowego do punktu końcowego prowadzącą przez
kolejne punkty, to każdy fragment tej drogi pomiędzy dowolnym punktem pośrednim a punktem końcowym jest
najlepszą drogą przejścia od tego punktu do punktu końcowego.
Przykład metody ”programowania dynamicznego” - znajdowanie najkrótszej ścieżki w grafie
Problem polega na znalezieniu najkrótszej ścieżki, która wykorzystuje dostępne połączenia i łączy dwa
wskazane punkty w podanej sieci połączeń jednokierunkowych.
A 3 11
14
2
B
5
C
6
D
F
3
7
E
7
5
G
7
6
Skierowany graf acykliczny
(spójny)
WSTĘP DO INFORMATYKI (4)
F
B
A 3
E
C
G
6
D
5
B
A
6
Ścieżka wyznaczona metodą
zachłanną (koszt: 15)
J.Sikorski
F
3
E
C
5
G
D
Ścieżka najkrótsza
(koszt: 13)
Strona 3 / 4
WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA
Realizacja metody:
L(X) – oznacza długość najkrótszej drogi z punktu X do punktu G ; chcemy wyznaczyć L(A).
Algorytm:
1 faza
Dla każdego punktu w sieci połączeń wyznacz wartość L(X), zaczynając od punktu docelowego i cofając się w każdym
kroku o jedno połączenie dalej od punktu docelowego (zapamiętuj przy tym dla każdego punktu, jakie połączenie należy
wybrać, aby przejść najkrótszą drogę od niego do punktu docelowego);
2 faza
Zacznij budować ścieżkę od punktu początkowego posługując się kolejno wskazaniami jakie połączenia tworzą najkrótszą
ścieżkę od przechodzonych punktów do punktu docelowego.
Działanie algorytmu dla przykładowego zadania:
•
•
•
•
•
•
•
L(G) = 0
L(F) = 7,
L(E) = 5,
L(D) = min ( 6, 7 + L(E) ) = min ( 6, 12 ) = 6,
L(B) = min ( 3 + L(E), 2 + L(F) ) = min ( 8, 9) = 8,
L(C) = min ( 11 + L(B), 6 + L(D), 7 + L(E) ) = min ( 19, 12, 12) = 12,
L(A) = min ( 14 + L(D), 3 + L(C), 5 + L(B) ) = min ( 20, 15, 13) = 13.
WSTĘP DO INFORMATYKI (4)
J.Sikorski
Strona 4 / 4