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