1 / 18

METODY TWORZENIA ALGORYTMÓW

METODY TWORZENIA ALGORYTMÓW. METODA PRZYROSTOWA. {Sortuje tablicę A[1..n] liczb rzeczywistych} 1. for j := 2 to n do begin 2. pom := A[j] ; { wstaw A[j] w posortowany ciąg A[1 .. j-1] } 3. i:= j-1; 4. while (i>0) and (A[i]>pom) do begin

talen
Télécharger la présentation

METODY TWORZENIA ALGORYTMÓW

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. METODY TWORZENIA ALGORYTMÓW

  2. METODA PRZYROSTOWA

  3. {Sortuje tablicę A[1..n] liczb rzeczywistych} 1. for j := 2 to n do begin 2. pom := A[j] ; { wstaw A[j] w posortowany ciąg A[1 .. j-1] } 3. i:= j-1; 4. while (i>0) and (A[i]>pom) do begin 5. A[i+1]:= A[i]; 6. i:= i-1; end; 7. A[i+1]:= pom; end;

  4. "DZIEL I ZWYCIĘŻAJ" 3 ETAPY : 1. DZIEL 2. ZWYCIĘŻAJ 3. POŁĄCZ

  5. SORTOWANIE PRZEZ SCALANIE 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 2 5 4 6 1 3 2 6 2 4 5 6 1 2 3 6 1 2 2 3 4 5 6 6

  6. MERGE-SORT ( A, p, k); { Sortuje elementy w podtablicy A[p..k]; jeśli p >= k to podtablica jest już posortowana; jeśli p < k to dzielimy A[p..k] na dwie podtablice i sortujemy każdą z nich } begin if p < k then begin q := (p+k)/2 ; MERGE-SORT ( A, p, q ); MERGE-SORT ( A, q+1, k ); MERGE (A, p, q, k); end end; MERGE-SORT( A, 1, n ) -sortuje tablicę A[1..n] Złożoność : T(n) =  (nlgn)

  7. ALGORYTMY ZACHŁANNE (GREEDY ALGORITHMS)

  8. PLANOWANIE ZAJĘĆ DANE : Z = {1, 2, ... n } - zbiór n zajęć , n>0 [ pi, ki ) pi - czas rozpoczęcia zajęcia i ki - czas zakończenia zajęcia i pi ki WYNIK: Największy podzbiór PZ zbioru Z, który zawiera zajęcia zgodne, tzn.: i, j PZ , to [ pi, ki )  [ pj, kj ) = 

  9. GREEDY-ACTIVITY-SELECTOR ( p, k); { p- tablica początków zajęć, k- tablica końców zajęć; zakładamy, że k [1]  k [2]  ... k [n] } for i := 2 to n do if p [i]  k [j] then begin PZ := PZ  {i}; j := i end; return PZ; { PZ - największy podzbiór zajęć parami zgodnych } end; begin n := length [p]; PZ := {1}; j := 1;

  10. PROGRAMOWANIE DYNAMICZNE • Rozwiąż "małe" problemy. • Zapamiętaj rozwiązania. • Użyj tych rozwiązań do rozwiązania "dużych" problemów

  11. Liczby Fibonacciego DANE :n  N; n>=0 WYNIK :n - ta liczba Fibonacciego • metoda rekurencyjna - złożoność O(nn ) • fib( n: integer) : integer; • begin • if ( (n =0) or (n= 1)) then fib := 1; • else fib := fib(n-1) + fib(n-2) • end;

  12. Liczby Fibonacciego • metoda dynamiczna - złożoność O(n) • fib ( n: integer): integer; • f1, f2, f, k : integer; begin • if ( n = 0 )or( n=1 )then fib := 1 • else • begin • f1 = f2 = 1; • for k:= 2 to k := n-1 do • begin • f := f1 + f2; • f2 := f1; • f1 := f; • end; • end • end;

  13. Mnożenie ciągu macierzy DANE :n  N, p0, p1, ... , pn  N A1, ... , An - macierze prostokątne o elementach rzeczywistych, Ai ma rozmiar pi-1 * pi . WYNIK : A1 * ... * An obliczony w sposób optymalny, tzn.: liczba wykonanych mnożeń elementów macierzy jest najmniejsza Optymalne nawiasowanie

  14. Przykład : DANE : A1 - 10x100 A2 - 100x5 A3 - 5x50 WYNIK : A1A2A3 - optymalnie A1A210x100x5 = 5000 => A1A2(10x5) (A1A2)A310x5x50= 2500 S7500 (A1A2)A3 A2A3100x5x50 = 25000 => A2A3(100x50) A1(A2A3) 10x100x50= 50000 S75000 A1(A2A3)

  15. Struktura optymalnego nawiasowania : m [i,j] = minimalna liczba mnożeń potrzebna do obliczenia iloczynu Ai*...*Aj 0 dla i = j m [i,j] = min { m [i,k] + m [k+1, j ] + p i-1 * pk * pj; } dla i < j i  k < j

  16. MATRIX-CHAIN-ORDER ( p ); {p[0..n] – tablica rozmiarów macierzy A1, ... , An , tzn .: Ai ma rozmiar p[i-1] * p[i] } for r := 2 to n do for i := 1 to n-r+1 do begin j := i + r – 1; m [i,j] := ; for k := i to j–1 do begin q := m [i,k] + m [k+1, j ] + p i-1 * pk * pj; if q < m [i,j ] then begin m [i,j ] := q ; s [i,j] := k endend end return m and s end ; begin n := length (p) - 1; for i := 1 to n do m [i,i] := 0;

  17. MATRIX-CHAIN-MULTIPLY ( A, s, i, j); {Oblicza optymalnie iloczyn Ai * A i+1 * ... * A j} begin if j > i then begin X := MARTIX-CHAIN-MULTIPLY(A, s, i,s[i,j]); Y := MARTIX-CHAIN-MULTIPLY(A, s, s[i,j ] +1, j); Z := MATRIX-MULTIPLY ( X, Y ); return Z end else returnAi end;

  18. MATRIX-MULTIPLY ( A, B ); { Oblicza iloczyn : C = A * B } begin if kol(A) <> rows(B) then error else for i := 1 to rows (A) do for j := 1 to kol (B) do begin C [i,j ] := 0; for k := 1 to kol (A) do C [i,j ] := C [i,j] + A [i,k] * B [k,j] ; end; return C; end;

More Related