Algorytmy i struktury danych Norbert Jankowski

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy i struktury danych Norbert Jankowski"

Transkrypt

1 NJ/A+SD/1 Algorytmy i struktury danych Norbert Jankowski norbert/asd Uwagi mile widziane!

2 Literatura [1] A. V. Aho, J. E. Hopcroft, J. D. Ullman. Projektowanie i analiza algorytmów. Helion, Warszawa, [2] A. V. Aho, J. E. Hopcroft, J. D. Ullman. Projektowanie i analiza algorytmów. Państwowe Wydawnictwa Naukowe, Warszawa, [3] Niklaus Wirth. Algorytmy + Struktury Danych = Programy. Wydawnictwa Naukowo-Techniczne, Warszawa, wydanie 2, [4] T. H. Cormen, C. E. Leiserson, R. L Rivest. Wprowadzenie do algorytmów. Wydawnictwa Naukowo-Techniczne, Warszawa, [5] L. Banachowski, K. Diks, W. Rytter. Algorytmy i struktury NJ/A+SD/2

3 NJ/A+SD/3 danych. Wydawnictwa Naukowo-Techniczne, Warszawa, [6] M. M. Sysło, N. Deo, J. Kowalik. Algorytmy optymalizacji dyskretnej. Państwowe Wydawnictwa Naukowe, Warszawa, [7] D. Harel. Rzecz o istocie informatyki. Algorytmika. Wydawnictwa Naukowo-Techniczne, Warszawa, [8] L. Banachowski, A. Kreczmar, W. Rytter. Analiza algorytmów i struktur danych. Wydawnictwa Naukowo-Techniczne, Warszawa, [9] L. Banachowski, A. Kreczmar. Elementy analizy algorytmów. Wydawnictwa Naukowo-Techniczne, Warszawa, [10] D. E. Knuth. Sztuka Programowania, wolumen I III. Wydawnictwa Naukowo-Techniczne, 2002.

4 Dynamiczne struktury danych Listy FIFO Stos Kolejki Listy dwukierunkowe Listy cykliczne Drzewa Drzewa binarne, z porzadkiem, dwukierunkowe Drzewa zrównoważone (później... ) NJ/A+SD/4

5 Grafy i ich reprezentacje (macierz sasiedztwa, listy sasiedztwa, tablica sasiedztwa) NJ/A+SD/5

6 NJ/A+SD/6 Struktura listy w Pascalu 1 type 2 l i s t a = ^ e l L i s t y ; 3 e l L i s t y = 4 record 5 klucz : integer ; 6 nast : l i s t a 7 end ;

7 NJ/A+SD/7 Struktura listy w C 1 struct e l { 2 i n t klucz ; 3 struct e l nast ; 4 } ; 5 6 typedef struct e l e l L i s t y ; 7 typedef e l L i s t y l i s t a ;

8 NJ/A+SD/8 Stworzenie elementu listy w Pascalu 1 var 2 p : l i s t a ; new( p ) ; 5 p ^. klucz := 13; 6 p ^. nast := NIL ; 13

9 NJ/A+SD/9 Usunięcie elementu listy w Pascalu 1 dispose ( p ) ; 2 p := NIL ;

10 NJ/A+SD/10 Stworzenie elementu listy w C 1 l i s t a l =0; / / badź: ellisty *l; 2 3 l = malloc ( sizeof ( e l L i s t y ) ) ; 4 l >klucz = 13; 5 l >nast = 0; 13

11 NJ/A+SD/11 Usunięcie elementu listy w C 1 f r e e ( l ) ; 2 l =0;

12 NJ/A+SD/12 1 var Połaczenie dwóch elementów p i q w listę (Pascal) 2 p, q : l i s t a ; new( p ) ; 5 p ^. klucz := 3; 6 p ^. nast := NIL ; 7 new( q ) ; 8 q ^. klucz := 13; 9 q ^. nast := p ; 10 { q pierwszy, p d r u g i } 13 3

13 NJ/A+SD/13 Połaczenie dwóch elementów p i q w listę (C) 1 e l L i s t y p=0, q=0; 2 3 p = malloc ( sizeof ( e l L i s t y ) ) ; 4 p >klucz = 3; 5 p >nast = 0; 6 q = malloc ( sizeof ( e l L i s t y ) ) ; 7 q >klucz = 13; 8 q >nast = p ; 13 3

14 NJ/A+SD/14 Stworzenie listy elementów: 1, 2, 3, 4,..., n (C) 1 e l L i s t y l =0, p=0; 2 i n t n=5; 3 while ( n ){ 4 p = malloc ( sizeof ( e l L i s t y ) ) ; 5 p >klucz = n+1; 6 p >nast = l ; 7 l = p ; 8 }

15 NJ/A+SD/15 Usunięcie pierwszego elementu listy l (Pascal) 1 procedure DelEl ( var l : l i s t a ) ; 2 var p : l i s t a ; 3 begin 4 i f l <>NIL then 5 begin 6 p := l ; 7 l := l ^. nast ; 8 dispose ( p ) 9 end 10 end ;

16 NJ/A+SD/16 Usunięcie pierwszego elementu listy l (C) 1 void UPeL( l i s t a l ) { / / wsk. na listę! 2 l i s t a p ; 3 i f ( l!= 0 ) { 4 p = l ; 5 l = ( l ) >nast ; / / lub p->nast 6 f r e e ( p ) ; 7 } 8 }

17 Usunięcie ostatniego elementu listy l (Pascal) procedure DelLastEl ( var l : l i s t a ) ; 2 var t : l i s t a ; 3 begin 4 i f l <>NIL then 5 i f l ^. nast = NIL then 6 begin 7 dispose ( l ) ; 8 l := NIL ; 9 end NJ/A+SD/17

18 NJ/A+SD/18 10 else 11 begin 13 t := l ; 14 while t ^. nast ^. nast <>NIL do 15 t := t ^. nast ; 16 dispose ( t ^. nast ) ; 17 t ^. nast := NIL ; end 20 end ;

19 NJ/A+SD/19 Usunięcie ostatniego elementu listy l (C) void UOeL( l i s t a l ) { / / wsk. na listę! 2 i f ( l == 0) return ; 3 while ( ( l ) >nast ) 4 l = &( l ) >nast ; 5 f r e e ( l ) ; 6 l =0; / / nowy koniec listy! 7 }

20 NJ/A+SD/20 Zwolnienie całej listy l (Pascal) procedure DisposeList ( var l : l i s t a ) ; 2 var t : l i s t a ; 3 begin 4 while l <>NIL do 5 begin 6 t := l ^. nast ; 7 dispose ( l ) ; 8 l := t ; 9 end end ;

21 NJ/A+SD/21 Lista dwukierunkowa (Pascal) type 2 l i s t a C = ^ e l L i s t y C ; 3 e l L i s t y C = 4 record 5 klucz : integer ; 6 nast : l i s t a C ; 7 pop : l i s t a C 8 end ;

22 NJ/A+SD/22 Lista dwukierunkowa cykliczna (Pascal) type 2 l i s t a C = ^ e l L i s t y C ; 3 e l L i s t y C = 4 record 5 klucz : integer ; 6 nast : l i s t a C ; 7 pop : l i s t a C 8 end ;

23 NJ/A+SD/23 Usunięcie elementu z l. cyklicznej (Pascal)

24 NJ/A+SD/24 1 procedure UsunElListyC ( var l : l i s t a C ) ; 2 var p : l i s t a C ; 3 begin 4 i f l <>NIL then 5 i f l = l ^. pop then 6 begin 7 dispose ( l ) ; l := NIL ; 8 end 9 else begin 10 p := l ; 11 l ^. pop ^. nast := l ^. nast ; 12 l ^. nast ^. pop := l ^. pop ; 13 l := l ^. nast ; 14 dispose ( p ) 15 end 16 end ;

25 NJ/A+SD/25 Dodanie elementu do l. cyklicznej (Pascal)

26 NJ/A+SD/

27 1 procedure DodElListaC ( var l : l i s t a C ; klucz : integer ) ; 2 { doda za l! } 3 var 4 p : l i s t a C ; 5 n : l i s t a C ; 6 begin 7 new( p ) ; 8 p ^. klucz := klucz ; 9 i f l =NIL then 10 begin 11 l := p ; 12 p ^. pop := p ; 13 p ^. nast := p 14 end 15 else 16 begin NJ/A+SD/27

28 NJ/A+SD/28 17 n := l ^. nast ; 19 p ^. pop := l ; 20 p ^. nast := n ; 21 l ^. nast := p ; 22 n ^. pop := p ; 23 end 24 end ;

29 Dodanie elementu do l. cyklicznej (Pascal) 1 DodElListaC ( l, 1 ) ; 2 DodElListaC ( l, 2 ) ; 3 DodElListaC ( l, 3 ) ; 4 DodElListaC ( l, 4 ) ; 5 DispListCTeX ( l, a ) ; 6 UsunElListyC ( l ) ; 7 DispListCTeX ( l, a ) ; 8 UsunElListyC ( l ) ; 9 DispListCTeX ( l, a ) ; 10 UsunElListyC ( l ) ; 11 DispListCTeX ( l, a ) ; 12 UsunElListyC ( l ) ; NJ/A+SD/29

30 NJ/A+SD/30 13 DispListCTeX ( l, a ) ;

31 NJ/A+SD/31 Wypisuje elementy l. cyklicznej (Pascal) 1 procedure DispListC ( l : l i s t a C ) ; 2 var t : l i s t a C ; 3 begin 4 i f l <>NIL then 5 begin 6 t := l ; 7 repeat 8 write ( t ^. klucz ) ; 9 t := t ^. nast ; 10 i f t <> l then write ( > ) 11 u n t i l t = l ; 12 end 13 end ;

32 NJ/A+SD/32 Usuwanie l. cyklicznej (Pascal) 1 procedure DisposeListC ( var l : l i s t a C ) ; 2 var 3 t : l i s t a C ; 4 begin 5 while l <>NIL do 6 UsunElListyC ( l ) ; 7 end ;

33 FIFO,LIFO/Stos, kolejki priorytetowe Koncepcja wartownika dla list FIFO fist in first out wystarczy dobrze używać listy... dodaj do kolejki O(1) zdjać z kolejki O(1) dodajemy na koniec kolejki, zdejmujemy element-głowę Stos = LIFO last in first out wystarczy dobrze używać listy... dołóż na stos O(1) zdjać ze stosu O(1) NJ/A+SD/33

34 NJ/A+SD/34 dodawanie/zdejmowanie na/z poczatek/-ku listy kolejka priorytetowa Zadanie: pola węzła: klucz, priorytet i nast! wstawianie zgodnie z priorytetem zdejmowanie elementu o najwyższym priorytecie zmiana priorytetu, usuwanie elementu Wykorzystać stos do wyznaczania wyrażeń zapisanych w odwrotnej notacji polskiej (ONP) *

35 Drzewa NJ/A+SD/35

36 NJ/A+SD/36 A B C D E F G I J K J K L M

37 NJ/A+SD/37 (a+b/c) (d e f) a b c / + d e f + a / b c d e f + a / d b c e f

38 NJ/A+SD/38 Drzewo z porzadkiem

39 NJ/A+SD/39 Reprezentacja drzewa (Pascal) Drzewo binarne 1 type 2 drzewob = ^wdrzewab ; 3 wdrzewab = 4 record 5 klucz : integer ; 6 lewy : drzewob ; 7 prawy : drzewob 8 end ;

40 NJ/A+SD/40 Drzewo o dowolnej liczbie gałęzi 1 type 2 drzewo = ^wdrzewa ; 3 wdrzewa = 4 record 5 klucz : integer ; 6 d z i e c i : l i s t a ; 7 end ;

41 NJ/A+SD/41 Węzły z info o przodku 1 type 2 drzewob = ^wdrzewab ; 3 wdrzewab = 4 record 5 klucz : integer ; 6 lewy : drzewob ; 7 prawy : drzewob 8 o j c i e c : drzewob 9 end ;

42 NJ/A+SD/42 Drzewo słownik z porzadkiem 1 type 2 drzewob = ^wdrzewab ; 3 wdrzewab = 4 record 5 klucz : integer ; 6 l i c z n i k : integer ; 7 lewy : drzewob ; 8 prawy : drzewob 9 end ;

43 NJ/A+SD/43 Podstawowe operacje słownikowe Dopisz Znajdź Usuń Maximum, Minimum, Poprzednik, Następnik

44 NJ/A+SD/44 1 procedure drukujdrzewo ( t : drzewob ; l : integer ) ; 2 var i : integer ; 3 begin 4 i f t <>NIL then 5 begin 6 drukujdrzewo ( t ^. lewy, l + 1 ) ; 7 for i :=1 to l do write ( ) ; 8 writeln ( t ^. klucz ) ; 9 drukujdrzewo ( t ^. prawy, l +1) 10 end 11 end ;

45 NJ/A+SD/45 1 procedure dopiszd ( var t : drzewob ; klucz : integer ) ; 2 begin 3 i f t =NIL then 4 begin 5 new( t ) ; 6 t ^. klucz := klucz ; t ^. l i c z n i k : = 1 ; 7 t ^. lewy := NIL ; t ^. prawy := NIL ; 8 end else 9 i f klucz < t ^. klucz then 10 dopiszd ( t ^. lewy, klucz ) else 11 i f klucz > t ^. klucz then 12 dopiszd ( t ^. prawy, klucz ) else 13 t ^. l i c z n i k := t ^. l i c z n i k +1; 14 end ;

46 NJ/A+SD/46 Drzewo z porzadkiem

47 NJ/A+SD/47 1 function znajdzd ( t : drzewob ; klucz : integer ) : drzewob ; 2 begin 3 i f t =NIL then 4 znajdzd : = NIL 5 else 6 i f klucz < t ^. klucz then 7 znajdzd := znajdzd ( t ^. lewy, klucz ) else 8 i f klucz > t ^. klucz then 9 znajdzd := znajdzd ( t ^. prawy, klucz ) else 10 znajdzd := t ; 11 end ;

48 NJ/A+SD/48 1 procedure zwolnijdrzewob ( var d : drzewob ) ; 2 begin 3 i f d<>nil then 4 begin 5 zwolnijdrzewob ( d ^. lewy ) ; 6 zwolnijdrzewob ( d ^. prawy ) ; 7 dispose ( d ) ; 8 d := NIL ; 9 end 10 end ;

49 1 procedure usund ( var t : drzewob ; klucz : integer ) ; 2 var 3 q : drzewob ; 4 procedure us ( var r : drzewob ) ; 5 begin 6 i f r ^. prawy<>nil then 7 us ( r ^. prawy ) 8 else 9 begin 10 q ^. klucz := r ^. klucz ; q ^. l i c z n i k := r ^. l i c z n i k ; 11 q := r ; { zmiana elementu do usunięcia } 12 r := r ^. lewy { przewieszenie przed usinięciem q } 13 end 14 end ; NJ/A+SD/49

50 NJ/A+SD/50 15 begin 17 i f t =NIL then writeln ( Nie ma... ) else 18 i f klucz < t ^. klucz then usund ( t ^. lewy, klucz ) else 19 i f klucz > t ^. klucz then usund ( t ^. prawy, klucz ) else 20 begin 21 q := t ; 22 i f q ^. prawy=nil then t := q ^. lewy else 23 i f q ^. lewy=nil then t := q ^. prawy else 24 us ( q ^. lewy ) ; 25 dispose ( q ) ; 26 end 27 end ;

51 type pdrzewob = ^drzewob; 1 procedure usund1 ( var t : drzewob ; klucz : integer ) ; 2 var 3 q : drzewob ; 4 procedure us ( r : pdrzewob ) ; 5 begin 6 while r ^ ^. prawy <> n i l do 7 r r ^ ^. prawy ) ; 8 q ^. klucz := r ^ ^. klucz ; 9 q ^. l i c z n i k := r ^ ^. l i c z n i k ; 10 q := r ^ ; 11 r ^:= r ^ ^. lewy 12 end ; 13 NJ/A+SD/51

52 NJ/A+SD/52 14 begin 16 i f t =NIL then writeln ( Nie ma.... ) else 17 i f klucz < t ^. klucz then usund ( t ^. lewy, klucz ) else 18 i f klucz > t ^. klucz then usund ( t ^. prawy, klucz ) else 19 begin 20 q := t ; 21 i f q ^. prawy=nil then t := q ^. lewy else 22 i f q ^. lewy=nil then t := q ^. prawy else 23 us q ^. lewy ) ) ; 24 dispose ( q ) ; 25 end 26 end ;

53 NJ/A+SD/53 Tak jest źle: 1 procedure us ( var r : drzewob ) ; 2 begin 3 while r ^. prawy <> NIL do 4 r := r ^. prawy ; 5 q ^. klucz := r ^. klucz ; 6 q ^. l i c z n i k := r ^. l i c z n i k ; 7 q := r ; 8 r := r ^. lewy 9 end ; "r" w lini 8 nie jest referencja właściwego pola rekordu (w wyniku działania wiersza 4).

54 1 begin 2 d := NIL ; 3 repeat 4 read ( n ) ; 5 dopiszd ( d, n ) ; 6 u n t i l n<=0; 7 writeln ; 8 drukujdrzewo ( d, 0 ) ; 9 10 usund ( d, 5 6 ) ; 11 drukujdrzewo ( d, 0 ) ; 12 usund ( d, 3 1 ) ; 13 drukujdrzewo ( d, 0 ) ; 14 NJ/A+SD/54

55 NJ/A+SD/55 15 w:= znajdzd ( d, 1 3 ) ; 17 i f w<>nil then 18 writeln ( JEST! ) 19 else 20 writeln ( NIE MA! ) ; 21 zwolnijdrzewob ( d ) ; 22 drukujdrzewob ( d, 0 ) ; 23 end.

56 Zadania Zaimplementować listę cykliczna w j. C. Zaimplementuj funkcje programu drzewo/słownik w j. C. Napisać algorytm, który dla N liczb wejściowych zbuduje drzewo możliwie dokładnie wyważone. Napisz funkcje wyświetlajace drzewo w układach (RLP wzdłużny), (LRP poprzeczny), (LPR wsteczny). R L P NJ/A+SD/56

57 Zaproponować algorytm wyliczania wszystkich możliwych drzew-wyrażeń z zastosowaniem nawiasów dla dowolnego wyrażenia postaci: L 1 op 1 L 2 op 2... op n 1 L n, np. dla: a+b/c d e f j.w., lecz tylko tych wyrażeń, które spełniaja równość: L 1 op 1 L 2 op 2... op n 1 L n = p, np.: : 4 2 = : = 600 NJ/A+SD/57

58 Napisz funkcję szukajac a węzeł o wskazanym kluczu w drzewie bez porzadku (rekurencyjnie). j.w. lecz nierekurencyjnie, ale wykorzystujac strukturę węzła ze wskaźnikiem na ojca. Napisz procedury wyznaczajace: wartość minimalna, maksymalna, poprzednia i następna dla drzew binarnych z porzadkiem. NJ/A+SD/58

59 NJ/A+SD/59 Grafy G = (V, E) V zbiór wierzchołków E zbiór krawędzi (elementami sa pary wierzchołków) Grafy: Zorientowane krawędzie sa parami uporzadkowane (v, w), tj, istnieje połaczenie v z w. Niezorientowane krawędź (v, w) oznacza połaczenie v z w i w z v

60 NJ/A+SD/60 A A B E C B E C D D

61 NJ/A+SD/61 A g f e a B E C b A B E C 11 c d 15 d D D G = (V, E) V = {v i i = 1,..., m} E = {k i = ( v, w, d k ) k = 1,..., n}

62 Reprezentacje grafów NJ/A+SD/62

63 Macierz sasiedztwa, M[i, j] = 0/1: Listy sasiedztwa: W1: W2: 3 W3:. W4: 2 3 NJ/A+SD/63

64 NJ/A+SD/64 Reprezentacja tablicowa

65 NJ/A+SD/65 Terminologia około-grafowa v jest sasiadem w, gdy istnieje krawędź (v, w) Stopień wierzchołka: liczba sasiadów Droga/ścieżka: ciag krawędzi (v 1, v 2 ),(v 2, v3),...,(v k 1, v k ) Cykl: droga z pewnego wierzchołka v do v (musi składać się przynajmniej z jednej krawędzi!) Graf spójny: istnieje ścieżka pomiędzy każda para wierzchołków Drzewo: graf spójny bez cykli! Klika grafu G = (V, E): podzbiór V V taki, że dla każdej pary wierzchołków p, q V istnieje krawędź (p, q) E.

66 NJ/A+SD/66 Złożoność Złożoność rozmiar zadania Złożoność: Czasowa Pamięciowa Złożoność czasowa: czas pracy programu wyrażony jako funkcja rozmiaru zadania. Złożoność pamięciowa: zajętość pamięci przez program wyrażony jako funkcja rozmiaru zadania.

67 NJ/A+SD/67 Definicja Złożoność czasowa programu wykorzystujacego g(n) jednostek czasowych jest O( f(n)), jeśli istnieje stała c i g(n) c f(n), dla prawie wszystkich n (wszystkich z wyjatkiem skończonego zbioru wartości n). O( f(n)) jest rodzina funkcji spełniajacych powyższa definicję. g(n) = 3n 2 O(n 2 ) g(n) =.01n O(n) g(n) = n+44n 3 + n 1/2 O(n 3 ) O( f(n)) ma złożoność f(n) jest rzędu f(n)

68 NJ/A+SD/68 7 g(n) c f(n) n

69 NJ/A+SD/69 g(n) = 1024 O(1) g(n) = 0.25 O(1) g(n) = n+ n 1 O(n) g(n) = n+ 1 log n O(n) Prawidłowy jest też zapis: 1 n = O(1) (odpowiednik matematycznego w: n 1 O(1)) Prawda jest, że: 1 n = O(n) 1 n = O(n2 ) 1 n = O(nk ) 5n = O(n) 5n = O(n 2 )

70 NJ/A+SD/70 5n+ O(n) = O(n) 5n+ O(n) = O(n 2 ) 5n+ O(n 2 ) =O(n) n 4 = 1 4 n4 + O(n 3 ) g(n) = n 3 + 5n 2 22n = O(n 3 ) n+1/ log n = O(n) n 2 + O(n) = O(n 2 ) n 2 + c O(n) = O(n 2 ) n 2 + O(n log n) = O(n 2 ) n(n+1) 2 = O(n 2 ) n(n+1) 2 0.5n 2 = O(n) n(n+1) 2 0.3n 2 = O(n 2 ) n+2 O(n 2 ) = O(n 2 ) n+log n O(n 2 ) = O(n 2 log n) log n n = O(1)

71 NJ/A+SD/71 g(n) = a k n k + a k 1 n k a 1 n+a 0 = O(n k ) dla a k > n = O(2 n ) 2 n+2 + n 6 = O(2 n ) 2 n = O(3 n ) 3 n = O(2 n ) n = O( n) n = O(n) 3 n = O( n)

72 NJ/A+SD/72 Granice rozmiaru zadania vs. złożoność Max roz. zadania Złożoność 1s 1min 1h n n log n n n n

73 NJ/A+SD/73 Wpływ 10-krotnego przyśpieszenia komputera na maksymalny rozmiar zadania Złożoność R.z.przed R.z.po n s 1 10s 1 n log n s 2 10s 2 (dla dużych s 2 ) n 2 s s 3 n 3 s s 4 2 n s 5 s

74 NJ/A+SD/74 Złożoność c.d. Złożoność pesymistyczna (z. czasowa) z. najgorszego przypadku. Złożoność średnia średnia z. po wszystkich danych rozmiaru n. Z. pesymistyczna nierzadko równa jest z. średniej.

75 NJ/A+SD/75 O, Θ i Ω O asymptotyczna granica górna O( f(n)) = {g(n) : c>0,n0 >0 n n0 0 g(n) c f(n)} Ω asymptotyczna granica dolna Ω( f(n)) = {g(n) : c>0,n0 >0 n n0 0 c f(n) g(n)} Θ asymptotycznie dokładne oszacowanie Θ( f(n)) = {g(n) : c1 >0,c 2 >0,n 0 >0 n n0 0 c 1 f(n) g(n) c 2 f(n)}

76 NJ/A+SD/ c 2 f(x) g(n) c 1 f(x) n

77 NJ/A+SD/77 Klasy P i NP Klasa P gdy algorytm ma złożoność wielomianowa. Klasa N P gdy algorytm nie ma złożoności wielomianowej.

78 NJ/A+SD/78 Kryteria kosztów Jednorodne kryterium kosztów zakłada się, że jedna instrukcja wykonywana jest w jednej jednostce czasu zakłada się, że każdy rejestr wymaga jednej jednostki pamięci l(i) = 1 Logarytmiczne kryterium kosztów [uwzględnienie długości słowa komputera] l(i) = log i +1 i > 0 1 i = 0

79 NJ/A+SD/79 Złożoność Kołmogorowa i Levina Złożoność Kołmogorowa K U (x) = min p { l(p) : program p prints x}. (1) Złożoność Levina Kt U (x) = min p { l(p)+log t(p, x) : program p prints x in t(p, x)}. (2)

80 NJ/A+SD/80 Warunkowa złożoność Levina Kt U (w x, φ) = min{l(p)+log t(p, x) : program p p prints w and test φ(w) = x in t(p, x)}. (3)

81 NJ/A+SD/81 Zadania Wyznaczyć złożoność różnych funkcji dotyczacych operowania na listach i drzewach. Jaka jest złożoność wyznaczania wektora o maksymalnej normie ze zbioru S = {x i : i = 1,..., n, x R d }?

82 NJ/A+SD/82 Zadanie sortowania Wejście: zbiór liczb a 1,..., a n Wyjście: ciag liczb spełniajacy a i1... a in

83 NJ/A+SD/83 Algorytmy sortowania i ich złożoności Trudno gorzej niż O(n 2 ) Aż do... O(n)!!! Sortowanie za pomoca: tablic, drzew, kolejek

84 NJ/A+SD/84 O(n 2 ) przykłady Sortowanie przez proste wstawianie Sortowanie przez wstawianie połówkowe (ZADANIE) Sortowanie przez proste wybieranie Sortowanie babelkowe

85 NJ/A+SD/85 1 procedure ProsteWstawianie ; 2 begin 3 for i :=2 to n do 4 begin 5 x := a [ i ] ; a [ 0 ] : = x ; j := i 1; 6 while x < a [ j ] do 7 begin 8 a [ j +1]:=a [ j ] ; j := j 1; 9 end 10 a [ j +1]:= x ; 11 end 12 end ; Wynik pośredni dla i-tej iteracji pętli f or: a 1,..., a i 1 (posortowane) a i,..., a n (nieposortowane)

86 NJ/A+SD/86 1 procedure ProsteWybieranie ; 2 begin 3 for i :=1 to n 1 do 4 begin 5 k := i ; x := a [ i ] ; 6 for j := i +1 to n do 7 i f a [ j ] < x then 8 begin k := j ; x := a [ j ] ; 9 end ; 10 a [ k ] : = a [ i ] ; a [ i ] : = x ; 11 end 12 end ; Najmniejszy na poczatek, na druga pozycję najmniejszy z pozostałych, itd.

87 NJ/A+SD/87 1 procedure SortowanieBabelkowe ; 2 begin 3 for i :=2 to n do 4 begin 5 for j := n downto i do 6 i f a [ j 1] > a [ j ] then 7 begin 8 x := a [ j 1]; a [ j 1]:= a [ j ] ; a [ j ] : = x ; 9 end 10 end 11 end ; Duże babelki szybciej wychodza na powierzchnię...

88 NJ/A+SD/88 Algorytmy sortujace w O(n log n) Złożoność średniego przypadku, a pesymistyczna złożoność Sortowanie przez kopcowanie Szybkie sortowanie Drzewa z porzadkiem Sortowanie przez łaczenie (ZADANIE)

89 NJ/A+SD/89 Sortowanie przez kopcowanie Algorytm in-situ, jak poprzednie, ale o złożoności O(n log n). Warunek kopca: R L i R P R 22 L P 13 7

90 NJ/A+SD/90 Kopiec

91 NJ/A+SD/91 Kopiec c.d Reprezentacja: drzewo lub tablica PARENT[i] = i/2 LEFT[i] = 2i RIGHT[i] = 2i+1

92 NJ/A+SD/92 Heapify O(log n)

93 NJ/A+SD/

94 NJ/A+SD/

95 NJ/A+SD/95 1 procedure Heapify (A, i ) ; 2 begin 3 l :=LEFT ( i ) ; r :=RIGHT( i ) ; 4 i f l <= heapsize [ A ] and A [ l ] > A[ i ] 5 then l a r g e s t := l 6 else l a r g e s t := i ; 7 i f r <= heapsize [ A ] and A [ r ] > A[ l a r g e s t ] then 8 l a r g e s t := r ; 9 i f l a r g e s t <> i then 10 begin x :=A [ i ] ; A [ i ] : = A [ l a r g e s t ] ; A[ l a r g e s t ] : = x ; 11 Heapify (A, l a r g e s t ) ; 12 end 13 end ;

96 NJ/A+SD/96 Budowanie kopca 1 procedure BuildHeap ( A ) ; 2 begin 3 heapsize [ A ] : = l e n g t h [ A ] ; 4 for i := length[a]/2 downto 1 do 5 Heapify (A, i ) 6 end ; kopce, kopce kopców,...

97 NJ/A+SD/

98 NJ/A+SD/

99 NJ/A+SD/

100 NJ/A+SD/

101 NJ/A+SD/

102 NJ/A+SD/

103 NJ/A+SD/103 Złożoność procedury BuildHeap(A) Heapify O(h) h wysokość kopca n elementowy kopiec ma co najwyżej n/2 h+1 pod-kopców wysokości h Całość: mamy jednak: ostatecznie: log n h=0 ( n log n 2 h+1 O(h) = O n h=0 h=0 h 2 h = 1/2 (1 1/2) 2 = O(n) ) h 2 h

104 NJ/A+SD/104 Sortowanie przez kopcowanie Zbudowanie kopca Korzeń = max Usuniecie korzenia (na koniec... ) i powtarzanie... [zamiana max i el. ostatnim, i skrócenie tablicy A]

105 NJ/A+SD/105 1 procedure HeapSort ( A ) ; 2 begin 3 BuildHeap (A ) ; 4 for i := l e n g t h (A) downto 2 do 5 begin 6 x :=A [ 1 ] ; A [ 1 ] : = A [ i ] ; A [ i ] : = x ; 7 heapsize (A) : = heapsize (A) 1; 8 Heapify (A, 1 ) ; 9 end 10 end ; Ostateczna złożoność: O(n log n)

106 Zadania Prześledzić na kilku około 10 elementowych tablicach omówione algorytmy sortowania. Opracuj algorytm sortowania przez wstawianie połówkowe. Opracuj algorytm sortowania przez łaczenie. Zaproponować wersję iteracyjna rekurencyjnej procedury Heapify. Analiza złożoności algorytmów (porównaj liczby porównań, przestawień, poszczególnych pod-etapów różnych algorytmów). Prześledź zachowanie się algorytmów sortowania dla najlepszych i najgorszych przypadków. NJ/A+SD/106

107 Co można powiedzieć o złożonościach O, Ω, Θ dla algorytmów sortowania przez przestawianie, wybór i sortowanie babelkowe? NJ/A+SD/107

108 NJ/A+SD/108 Algorytm szybkiego sortowania (Quicksort) Dziel i zwyciężaj! 1. Dziel na dwie części A i B. A ma elementy nie większe od x, B ma większe od x. 2. Zwyciężaj: sortuj A i B. 3. Łaczenie A i B.

109 NJ/A+SD/109 1 procedure QSort (A, p, r ) ; 2 begin 3 i f p < r then 4 begin 5 q := P a r t i t i o n (A, p, r ) ; 6 QSort (A, p, q ) ; 7 QSort (A, q+1, r ) ; 8 end 9 end ; A p,..., A q A q+1,..., A r A p,..., A q A q+1,..., A r A p,..., A q A q+1,..., A r... A p A p+1 A p+2... A r 1 A r

110 NJ/A+SD/110 1 function P a r t i t i o n (A, p, r ) ; 2 begin 3 A [ p ] A[ Random[ p, r ] ] ; 4 x :=A [ p ] ; 5 i := p 1; j := r +1; 6 do 7 do j := j 1; while A[ j ] > x ; 8 do i := i +1; while A[ i ] < x ; 9 i f i < j then A [ i ] A[ j ] ; 10 while i < j ; 11 return j ; 12 end ; A[p, i] x A[j, r]

111 NJ/A+SD/111 Złożoność szybkiego sortowania Złożoność funkcji Partition: Θ(n) Najlepszy przypadek: Θ(n log n) Najgorszy przypadek: Θ(n 2 ) Średni przypadek: Θ(n log n)

112 NJ/A+SD/112 Najlepszy przypadek: Θ(n log n) n n/2 n/2 n/4 n/4 n/4 n/4

113 NJ/A+SD/113 Ponieważ: Koszt całościowy każdego z poziomów: Θ(n) Liczba poziomów: log n T(n) = 2T(n/2)+Θ(n) = Θ(n log n)

114 NJ/A+SD/114 Najgorszy przypadek: Θ(n 2 ) n 1 n 1 1 n 2 1 n 3 Ponieważ: Koszt całościowy każdego z poziomów: Θ(n) Liczba poziomów: n T(n) = T(n 1)+Θ(n) = n i=1 Θ(i) T(n) = Θ( n i=1 i) T(n) = Θ(n 2 ) 1 n 4

115 NJ/A+SD/115 Średni przypadek: Θ(n log n) Niech T(n) będzie średnim czasem sortowania przez QS Wtedy czasy wywołań rekurencyjnych to T(i) i T(n i) Każde i jest jednakowo prawdopodobne wybrane losowo Wykonanie Partition kosztuje Θ(n) Mamy więc: T(n) = 1 n n 1 i=1 [T(i)+T(n i)]+θ(n) jako że każde T(j) w występuje 2 razy: T(n) = 2 n n 1 i=1 T(i)+Θ(n)

116 NJ/A+SD/116 Przez indukcję chcemy pokazać: T(n) an log n+b+θ(n) a, b > 0 Dla n = 1 prosto znaleźć odpowiednie a, b! Dla n > 1 T(n) 2 n n 1 k=1 (ak log k+b)+θ(n) = 2a n n 1 k log k+2b n 1 n k=1 + Θ(n)

117 NJ/A+SD/117 Skorzystamy z: n 1 k log k 1 2 n2 log n 1 8 n2 k=1 Mamy więc: T(n) 2a n [ 1 2 n2 log n 1 ] 8 n2 + 2b n 1 n + Θ(n) an log n a 4 n+2b+θ(n) = an log n+b+ [ an 4 + b+θ(n) ] an log n+b dla dużego a

118 NJ/A+SD/118 Wróćmy do: n 1 k log k 1 2 n2 log n 1 8 n2 k=1 n 1 k log k = k=1 n/2 1 k=1 k log k+ n 1 k log k k= n/2 Wiemy, że: log n/2 n/2 1 k=1 k n/2 1 k=1 k log k log n n 1 k k= n/2 n 1 k log k k= n/2

119 NJ/A+SD/119 n 1 k log k (log n 1) k=1 n/2 1 k=1 k+log n n 1 k k= n/2 = log n n 1 k k=1 n/2 1 k=1 k 1 2 n(n 1) log n 1 2 n 2 ( n 2 1 ) 1 2 n2 log n 1 8 n2

120 NJ/A+SD/120 Algorytmy sortowania O(n) Sortowanie przez zliczanie Sortowanie kubełkowe Sortowanie przez zliczanie Założenia: A i N 1 A i k

121 NJ/A+SD/121 IDEA: Jeśli wiemy ile jest elementów mniejszych od pewnego A i, wiemy gdzie (na której pozycji) powinien być umieszczony element A i w tablicy posortowanej: {k : A k < A i, A k A} =???

122 NJ/A+SD/122 1 function S o r t Z l i c z a n i e (A, B, k ) ; { A-wejście, B-wyjście } 2 begin 3 for i :=1 to k do 4 C[ i ] : = 0 5 for i :=1 to l e n g t h [ A ] do 6 C[ A [ i ] ] : = C[ A [ i ] ] + 1 { z l i c z a n i e } 7 for i :=2 to k do 8 C[ i ] : =C[ i ]+C[ i 1] { i l e mniejszych od i } 9 for i := l e n g t h [A] downto 1 do 10 begin 11 B [C[A[ i ] ] ] : = A [ i ] { w odpowiednie B [. ] A [ i ] } 12 C[ A [ i ] ] : = C[ A[ i ]] 1 13 end 14 end ;

123 NJ/A+SD/123 A: B: C: C[A[i]]:= C[A[i]]+1 B: C: B: C[i]:=C[i]+C[i-1] B[C[A[i]]]:=A[i]

124 NJ/A+SD/124 Złożoność sortowania przez zliczanie Wiersze 3 4: O(k) Wiersze 5 6: O(n) Wiersze 7 8: O(k) Wiersze 9 13: O(n) Razem O(k)+ O(n) = O(n+k) = O(n), gdy k = O(n) Stabilny = liczby o tej samej wartości w tej samej kolejności w A i w B!

125 NJ/A+SD/125 Algorytm sortowania kubełkowego Średni czas: O(n) Założenia: A i [0, 1) i = 1,..., n A i maja rozkład jednostajny(!) IDEA: Kubełki = dzielimy [0, 1) na n podprzedziałów.

126 NJ/A+SD/126 A B

127 NJ/A+SD/127 1 function SortKubelkowe ( A ) ; 2 begin 3 n := l e n g t h [ A ] 4 for i :=1 to n do 5 wstaw A [ i ] do listy B [ na[i] ] 6 for i :=0 to n 1 do 7 sortuj B [ i ] przez wstawianie 8 połacz listy B [ 0 ].. B[ n 1] 9 end ;

128 NJ/A+SD/128 Oczekiwana złożoność sortowania kubełkowego w. 3 5 O(n) w. 6 7??? n i zmienna losowa oznaczajaca liczbę elementów w B[i]. Sortowanie z w. 7 działa w O(p 2 ). Czas oczekiwany posortowania B[i] wynosi: E[O(n 2 i )] = O(E[n2 i ]) Wtedy oczekiwany czas wykonania w. 6 7: n 1 i=0 O(E[n 2 i ]) = O ( n 1 i=0 E[n 2 i ] )

129 NJ/A+SD/129 Prawdopodobieństwo, że element trafi do B[i] wynosi 1/n (1/n rozmiar przedziału B[i]). Zmienna n i ma rozkład dwumianowy. P(n i = k) = b(k; n, p) E[n i ] = np = 1 Var[n i ] = np(1 p) = 1 1/n Wiemy, że Var[n i ] = E[n 2 i ] E2 [n i ] E[n 2 i ] = Var[n i]+e 2 [n i ] = 1 1 n + 12 = 2 1 n = Θ(1) O ( n 1 i=0 E[n 2 i ] ) = nθ(1) = Θ(n)

130 NJ/A+SD/130 Zadania Zaimplementuj 3 różne algorytmy szybkiego sortowania różniace się sposobem wyboru elementu podziału pierwszy element (A[p]), losowy element, mediana z 3 losowo wybranych elementów. Porównaj zachowania się algorytmów dla losowych ciagów, jak i uporzadkowanych (częściowo też). Jak usprawnić algorytm sortowania kubełkowego, aby jego pesymistyczny czas wynosił O(n log n)?

131 Statystyka pozycyjna Wybór k-tego najmniejszego elementu Mediana k = n 2 mediana Rozwiazanie Sortowanie drogie... O(n log n) Dziel i zwyciężaj O(n) NJ/A+SD/131

132 NJ/A+SD/132 Idea: Podziel S na trzy zbiory S 1 (< m), S 2 (= m), S 3 (> m). Aby czas był liniowy długości S 1 i S 3 musza być ułamkami długości S. Powtarzamy rekurencyjnie...

133 NJ/A+SD/133 Jak znaleźć m, dla którego liczba wartości mniejszych i większych będzie ułamkiem S? Podzielić S na n 5 zbiorów. Posortować podzbiory (ile to kosztuje?).

134 NJ/A+SD/134 Niech M będzie ciagiem median posortowanych ciagów (M ma n/5 elementów). Znajdź medianę m ciagu M (T(n/5) szybciej niż T(n)... ) Podziel S na trzy zbiory S 1 (< m), S 2 (= m), S 3 (> m). ciag median

135 NJ/A+SD/135 Gdzie jest k-ty element? W S 1, S 2 czy S 3? Jeśli S 1 k S 1 ma k-ty element, w p.p. Jeśli S 1 + S 2 k S 2 ma k-ty element = m! w p.p. k-ty element jest w S 3, jako k S 1 S 2 element w S 3.

136 NJ/A+SD/136 1 function Select ( k, S ) ; 2 i f S < 50 then begin 3 s o r t u j S 4 return k-ty najmniejszy 5 end 6 else begin 7 podziel S na S /5 możliwie równych ciagów 8 sortuj każdy taki ciag 9 niech M będzie ciagiem median powyższych podciagów 10 m:= Select ( M /2, M) 11 Podziel S na S 1 (< m),s 2 (= m),s 3 (> m) 12 i f S 1 >= k then return Select ( k,s 1 ) 13 else 14 i f S 1 + S 2 >=k then return m 15 else return Select ( k S 1 S 2, S 3 ) 16 end

137 NJ/A+SD/137 Analiza algorytmu Załóżmy, że dla ciagu długości n algorytm wykonuje T(n) operacji. w. 3 O(1) w. 8 O(n) w. 9 n/5 w. 10 T(n/5) w. 11 O(n) w. 12 i 15 T( S 1 ) i T( S 3 ) odpowiednio (wykonywane jest tylko jedno z nich!)

138 NJ/A+SD/138 elementy m m ciag M (uporzadkowany) elementy m

139 NJ/A+SD/139 M ma co najwyżej n/10 elementów m Wtedy S 1 ma co najwyżej n 3 n/10 elementów. Dla n 50 S 1 < 3n/4. Podobnie dla S 3. Czyli w. 12 i 15 wymagaja nie więcej niż T(3n/4) Mamy więc: T(n) cn dla n < 50 T(n) T(n/5)+T(3n/4)+cn dla n 50 Można (przez indukcję) pokazać, że T(n) 20cn.

140 NJ/A+SD/140 Algorytm wyboru II 1 function Select2 ( k, S ) ; 2 i f S =1 then return S [ 1 ] ; 3 else 4 begin 5 m := S [ Random( 1, n ) ] ; 6 Podziel S na S 1 (< m),s 2 (= m),s 3 (> m) 7 i f S 1 >= k then return Select2 ( k,s 1 ) 8 else 9 i f S 1 + S 2 >= k then return m 10 else return Select2 ( k S 1 S 2,S 3 ) 11 end

141 NJ/A+SD/141 Złożoność średniego przypadku algorytmu Select2 Każdy indeks i wybranego elementu m w w.5 (po wykonaniu partition w.6) jest tak samo prawdopodobny. Jeśli k < i to wykonywana jest funkcja Select dla ciagu i 1 elementowego. Jeśli k > i to dla n i. Stad oczekiwany koszt w.7 lub w.10 uśredniamy po różnych możliwych wartościach i dla zadanego k: 1 n [ k 1 i=1 T(n i)+ ] n T(i 1) i=k+1 = 1 n [ n 1 T(i)+ i=n k+1 n 1 i=k T(i) ]

142 NJ/A+SD/142 Wtedy dla T(n) mamy: T(n) cn+max k { 1 n [ n 1 T(i)+ i=n k+1 n 1 i=k T(i) ]} Przez indukcję otrzymujemy: T(n) 4cn.

143 Zadania Zapisz ostateczna postać wiersza 11 funkcji Select. Przeanalizuj działanie funkcji Select dla wybranego ciagu długości około 8 elementów. W wierszu 7 na stronie 134 dzielimy S na podciagi długości 5. Jak algorytm zachowa się dla innych liczb (3,4,7,11,etc.)? Co możesz powiedzieć o algorytmie szybkiego sortowania w którym procedura Partition dzieliła by zbiór względem mediany? Co dzieje się ze złożonościa średniego przypadku, a co ze złożonościa najgorszego przypadku? Udowodnić przez indukcję, że dla algorytmu Select mamy: T(n) 20cn. NJ/A+SD/143

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy: Temat: Powtórzenie wiadomości z PODSTAW INFORMATYKI I: Pojęcia: złożoność czasowa algorytmu, rząd funkcji kosztu. Algorytmy. Metody programistyczne. Struktury danych. Literatura. A. V. Aho, J.E. Hopcroft,

Bardziej szczegółowo

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

Bardziej szczegółowo

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010 1/1 Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010 Kierunek: INFORMATYKA Specjalność: PRZEDMIOT OBOWIĄZKOWY DLA WSZYSTKICH STUDENTÓW. Tryb studiów: NIESTACJONARNE PIERWSZEGO STOPNIA

Bardziej szczegółowo

Egzaminy i inne zadania. Semestr II.

Egzaminy i inne zadania. Semestr II. Egzaminy i inne zadania. Semestr II. Poniższe zadania są wyborem zadań ze Wstępu do Informatyki z egzaminów jakie przeprowadziłem w ciągu ostatnich lat. Ponadto dołączyłem szereg zadań, które pojawiały

Bardziej szczegółowo

Struktury danych: stos, kolejka, lista, drzewo

Struktury danych: stos, kolejka, lista, drzewo Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

Bardziej szczegółowo

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np. Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Grafy Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 1 / 39 Plan wykładu

Bardziej szczegółowo

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2 Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, 2012 Spis treści Przedmowa XIII Część I Podstawy Wprowadzenie 2 1. Rola algorytmów w obliczeniach 4 1.1. Algorytmy 4 1.2. Algorytmy

Bardziej szczegółowo

Algorytmy i struktury danych.

Algorytmy i struktury danych. Kod przedmiotu: ASD Rodzaj przedmiotu: Wydział: Informatyki Kierunek: Informatyka Specjalność (specjalizacja): - Algorytmy i struktury danych. kierunkowy ; obowiązkowy Poziom studiów: pierwszego stopnia

Bardziej szczegółowo

PODSTAWY INFORMATYKI wykład 6.

PODSTAWY INFORMATYKI wykład 6. PODSTAWY INFORMATYKI wykład 6. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE,

Bardziej szczegółowo

Programowanie dynamiczne i algorytmy zachłanne

Programowanie dynamiczne i algorytmy zachłanne Programowanie dynamiczne i algorytmy zachłanne Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV Algorytmy grafowe Wykład 1 Podstawy teorii grafów Reprezentacje grafów Tomasz Tyksiński CDV Rozkład materiału 1. Podstawowe pojęcia teorii grafów, reprezentacje komputerowe grafów 2. Przeszukiwanie grafów

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

Matematyka dyskretna - 7.Drzewa Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

Algorytmiczna teoria grafów

Algorytmiczna teoria grafów Przedmiot fakultatywny 20h wykładu + 20h ćwiczeń 21 lutego 2014 Zasady zaliczenia 1 ćwiczenia (ocena): kolokwium, zadania programistyczne (implementacje algorytmów), praca na ćwiczeniach. 2 Wykład (egzamin)

Bardziej szczegółowo

Wykład 7. Algorytmy grafowe

Wykład 7. Algorytmy grafowe Wykład Algorytmy grafowe Algorytmy grafowe i podstawowe algorytmy przeszukiwania Problem Definicje i własności Reprezentacja Przeszukiwanie wszerz (Breadthirst Search) Przeszukiwanie w głąb (Depthirst

Bardziej szczegółowo

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak: Sortowanie stogowe Drzewo binarne Binary Tree Dotychczas operowaliśmy na prostych strukturach danych, takich jak tablice. W tablicy elementy ułożone są zgodnie z ich numeracją, czyli indeksami. Jeśli za

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Podejście zachłanne, a programowanie dynamiczne

Podejście zachłanne, a programowanie dynamiczne Podejście zachłanne, a programowanie dynamiczne Algorytm zachłanny pobiera po kolei elementy danych, za każdym razem wybierając taki, który wydaje się najlepszy w zakresie spełniania pewnych kryteriów

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski : idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Bardziej szczegółowo

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany , 1 2 3, czas zamortyzowany zajęcia 3. Wojciech Śmietanka, Tomasz Kulczyński, Błażej Osiński rozpinajace, 1 2 3 rozpinajace Mamy graf nieskierowany, ważony, wagi większe od 0. Chcemy wybrać taki podzbiór

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 6b: Model danych oparty na drzewach http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Model danych oparty na drzewach

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2015 1 / 21 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 3 Struktury drzewiaste drzewo binarne szczególny przypadek drzewa, które jest szczególnym przypadkiem grafu skierowanego, stopień każdego wierzchołka jest

Bardziej szczegółowo

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147 Spis treści Przedmowa 9 Rozdział 1. Zanim wystartujemy 17 Jak to wcześniej bywało, czyli wyjątki z historii maszyn algorytmicznych 18 Jak to się niedawno odbyło, czyli o tym, kto wymyślił" metodologię

Bardziej szczegółowo

Podstawowe własności grafów. Wykład 3. Własności grafów

Podstawowe własności grafów. Wykład 3. Własności grafów Wykład 3. Własności grafów 1 / 87 Suma grafów Niech będą dane grafy proste G 1 = (V 1, E 1) oraz G 2 = (V 2, E 2). 2 / 87 Suma grafów Niech będą dane grafy proste G 1 = (V 1, E 1) oraz G 2 = (V 2, E 2).

Bardziej szczegółowo

dr inż. Paweł Myszkowski Wykład nr 11 ( )

dr inż. Paweł Myszkowski Wykład nr 11 ( ) dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:

Bardziej szczegółowo

Heurystyki. Strategie poszukiwań

Heurystyki. Strategie poszukiwań Sztuczna inteligencja Heurystyki. Strategie poszukiwań Jacek Bartman Zakład Elektrotechniki i Informatyki Instytut Techniki Uniwersytet Rzeszowski DLACZEGO METODY PRZESZUKIWANIA? Sztuczna Inteligencja

Bardziej szczegółowo

Laboratoria nr 1. Sortowanie

Laboratoria nr 1. Sortowanie Laboratoria nr 1 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) 4. Sortowanie przez zliczanie (CS) 5. Sortowanie kubełkowe (BS) 6. Sortowanie

Bardziej szczegółowo

Algorytmy przeszukiwania

Algorytmy przeszukiwania Algorytmy przeszukiwania Przeszukiwanie liniowe Algorytm stosowany do poszukiwania elementu w zbiorze, o którym nic nie wiemy. Aby mieć pewność, że nie pominęliśmy żadnego elementu zbioru przeszukujemy

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Informacje podstawowe 1. Konsultacje: pokój

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH wykład 1 wprowadzenie, struktury sterujace, projektowanie algorytmów dr hab. inż. Andrzej Obuchowicz, prof. UZ Instytut Sterowania i Systemów Informatycznych UZ p. 425 A2 tel.

Bardziej szczegółowo

KARTA MODUŁU KSZTAŁCENIA

KARTA MODUŁU KSZTAŁCENIA KARTA MODUŁU KSZTAŁCENIA I. Informacje ogólne 1 Nazwa modułu kształcenia Algorytmy i struktury danych 2 Nazwa jednostki prowadzącej moduł Instytut Informatyki, Zakład Informatyki Stosowanej 3 Kod modułu

Bardziej szczegółowo

Wykład 6. Drzewa poszukiwań binarnych (BST)

Wykład 6. Drzewa poszukiwań binarnych (BST) Wykład 6 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Algorytmy zachłanne, programowanie dynamiczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. IX Jesień 2014 1 / 26 Algorytmy zachłanne Strategia polegająca

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 20.11.2002 Algorytmy i Struktury Danych PIŁA ZŁOŻONE STRUKTURY DANYCH C za s tw or ze nia s tr uk tur y (m s ) TWORZENIE ZŁOŻONYCH STRUKTUR DANYCH: 00 0

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność algorytmów Złożoność pamięciowa algorytmu wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie. Złożoność czasowa algorytmu

Bardziej szczegółowo

Zadania do wykładu ALGORYTMY I STRUKTURY DANYCH

Zadania do wykładu ALGORYTMY I STRUKTURY DANYCH Zadania do wykładu ALGORYTMY I STRUKTURY DANYCH Szacowanie tempa wzrostu funkcji Wprowadzenie: Do szacowania złożoności obliczeniowej algorytmów wykorzystuje się następujące pojęcia analizy matematycznej:

Bardziej szczegółowo

0-0000, 1-0001, 2-0010, 3-0011 itd... 9-1001.

0-0000, 1-0001, 2-0010, 3-0011 itd... 9-1001. KODOWANIE Jednym z problemów, z którymi spotykamy się w informatyce, jest problem właściwego wykorzystania pamięci. Konstruując algorytm staramy się zwykle nie tylko o zminimalizowanie kosztów czasowych

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Treści programowe. Złożoność obliczeniowa algorytmu na przykładach. dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak

Bardziej szczegółowo

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA DROGI i CYKLE w grafach Dla grafu (nieskierowanego) G = ( V, E ) drogą z wierzchołka v 0 V do v t V nazywamy ciąg (naprzemienny) wierzchołków i krawędzi grafu: ( v 0, e, v, e,..., v t, e t, v t ), spełniający

Bardziej szczegółowo

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych Koszt zamortyzowany Jeśli mamy ciąg operacji, to koszt zamortyzowany jednej z nich jest sumarycznym kosztem wykonania wszystkich operacji podzielonym przez liczbę operacji. Inaczej mówiąc jest to, dla

Bardziej szczegółowo

Zaawansowane algorytmy. Wojciech Horzelski

Zaawansowane algorytmy. Wojciech Horzelski Zaawansowane algorytmy Wojciech Horzelski 1 Organizacja Wykład: poniedziałek 8 15-10 Aula Ćwiczenia: Każdy student musi realizować projekty (treść podawana na wykładzie) : Ilość projektów : 5-7 Na realizację

Bardziej szczegółowo

Algorytmy i struktury danych.

Algorytmy i struktury danych. Algorytmy i struktury danych. Wykład 4 Krzysztof M. Ocetkiewicz Krzysztof.Ocetkiewicz@eti.pg.gda.pl Katedra Algorytmów i Modelowania Systemów, WETI, PG Problem plecakowy mamy plecak o określonej pojemności

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F KODY SYMBOLI Kod Shannona-Fano KODOWANIE DANYCH, A.Przelaskowski Metoda S-F Kod Huffmana Adaptacyjne drzewo Huffmana Problemy implementacji Kod Golomba Podsumowanie Kod drzewa binarnego Na wejściu rozkład:

Bardziej szczegółowo

Abstrakcyjne struktury danych - stos, lista, drzewo

Abstrakcyjne struktury danych - stos, lista, drzewo Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą

Bardziej szczegółowo

Metoda podziału i ograniczeń

Metoda podziału i ograniczeń Seminarium: Algorytmy heurystyczne Metoda podziału i ograniczeń Mateusz Łyczek Wrocław, 16 marca 011 r. 1 Metoda podziału i ograniczeń Metoda podziału i ograniczeń służy do rozwiązywania problemów optymalizacyjnych.

Bardziej szczegółowo

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne Załóżmy, że mamy źródło S, które generuje symbole ze zbioru S={x, x 2,..., x N } z prawdopodobieństwem P={p, p 2,..., p N }, symbolom tym odpowiadają kody P={c, c 2,..., c N }. fektywność danego sposobu

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem

Bardziej szczegółowo

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice

Bardziej szczegółowo

ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne

ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. KARTA MODUŁU / KARTA PRZEDMIOTU Kod modułu Nazwa modułu Nazwa modułu w języku angielskim Obowiązuje od roku akademickiego 2012/2013

Bardziej szczegółowo

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp

Bardziej szczegółowo

Podstawowe struktury danych

Podstawowe struktury danych Podstawowe struktury danych Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym

Bardziej szczegółowo

Konspekt. 15 października Wykład III (16 października 2014 r.): optymalizacja kombinatoryczna na grafach (metody sieciowe)

Konspekt. 15 października Wykład III (16 października 2014 r.): optymalizacja kombinatoryczna na grafach (metody sieciowe) Konspekt 15 października 2014 1 Wykład III (16 października 2014 r.): optymalizacja kombinatoryczna na grafach (metody sieciowe) 1.1 Przykładowe problemy optymalizacji kombinatorycznej na grafach 1. Optymalizacja

Bardziej szczegółowo

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;

Bardziej szczegółowo

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe opracował:

Bardziej szczegółowo

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych 1/12 Opracowała Kozłowska Ewa ekozbelferek@poczta.onet.pl nauczyciel przedmiotów informatycznych Zespół Szkół Technicznych Mielec, ul. Jagiellończyka 3 Znajdowanie największego i najmniejszego elementu

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA DRZEWA i LASY Drzewem nazywamy graf spójny nie zawierający cykli elementarnych. Lasem nazywamy graf nie zawierający cykli elementarnych. Przykłady drzew i lasów takie krawędzie są wykluczone drzewo las

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2015/2016. Forma studiów: Stacjonarne Kod kierunku: 11.

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2015/2016. Forma studiów: Stacjonarne Kod kierunku: 11. Państwowa Wyższa Szko la Zawodowa w Nowym Sa czu Karta przedmiotu Instytut Techniczny obowiązuje studentów rozpoczynających studia w roku akademickim 201/2016 Kierunek studiów: Informatyka Profil: Ogólnoakademicki

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Twierdzenie 2.1 Niech G będzie grafem prostym

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Patryk Żywica 5 maja 2008 1 Spis treści 1 Problem wydawania reszty 3 1.1 Sformułowanie problemu...................... 3 1.2 Algorytm.............................. 3 1.2.1 Prosty

Bardziej szczegółowo

ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI

ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI J.NAWROCKI, M. ANTCZAK, H. ĆWIEK, W. FROHMBERG, A. HOFFA, M. KIERZYNKA, S.WĄSIK ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI ZAD. 1. Narysowad graf nieskierowany. Zmodyfikowad go w taki sposób, aby stał

Bardziej szczegółowo

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch Wykład 8 Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. Smok podsuszony zmok (patrz: Zmok). Zmok zmoczony smok (patrz: Smok). L. Peter Deutsch Stanisław Lem Wizja lokalna J. Cichoń, P. Kobylański

Bardziej szczegółowo

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew 0-0-6 PLAN WYKŁADU Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew BAZY DANYCH Wykład 9 dr inż. Agnieszka Bołtuć INDEKSY - DEFINICJE Indeksy to pomocnicze struktury

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Metody przeszukiwania

Metody przeszukiwania Metody przeszukiwania Co to jest przeszukiwanie Przeszukiwanie polega na odnajdywaniu rozwiązania w dyskretnej przestrzeni rozwiązao. Zwykle przeszukiwanie polega na znalezieniu określonego rozwiązania

Bardziej szczegółowo

Algorytmy. Programowanie Proceduralne 1

Algorytmy. Programowanie Proceduralne 1 Algorytmy Programowanie Proceduralne 1 Przepis Warzenie piwa Brunświckiego Programowanie Proceduralne 2 Przepis Warzenie piwa Brunświckiego składniki (dane wejściowe): woda, słód, itd. wynik: beczka piwa

Bardziej szczegółowo

Podstawowe struktury danych

Podstawowe struktury danych Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym

Bardziej szczegółowo

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego

Bardziej szczegółowo

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Politechnika Poznańska Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Joanna Józefowska POZNAŃ 2010/11 Spis treści Rozdział 1. Metoda programowania dynamicznego........... 5

Bardziej szczegółowo

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004 4 marca 2004 Podstawowe oznaczenia i definicje Wymagania wobec kodu Podstawowa idea Podsumowanie Podstawowe oznaczenia i definicje Podstawowe oznaczenia i definicje: alfabet wejściowy: A = {a 1, a 2,...,

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

Bardziej szczegółowo

E S - uniwersum struktury stosu

E S - uniwersum struktury stosu Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów

Bardziej szczegółowo

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne: Strona 1 z 17 Typy danych 1. Dane tekstowe rozmaite słowa zapisane w różnych alfabetach: Rozwój metod badawczych pozwala na przesunięcie granicy poznawania otaczającego coraz dalej w głąb materii: 2. Dane

Bardziej szczegółowo

Algorytmy stochastyczne laboratorium 03

Algorytmy stochastyczne laboratorium 03 Algorytmy stochastyczne laboratorium 03 Jarosław Piersa 10 marca 2014 1 Projekty 1.1 Problem plecakowy (1p) Oznaczenia: dany zbiór przedmiotów x 1,.., x N, każdy przedmiot ma określoną wagę w(x i ) i wartość

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/

Bardziej szczegółowo

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Przeszukiwanie przestrzeni rozwiązań, szukanie na ślepo, wszerz, w głąb. Spis treści: 1. Wprowadzenie 3. str. 1.1 Krótki Wstęp

Bardziej szczegółowo

Nierówność Krafta-McMillana, Kodowanie Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana Nierówność Krafta-McMillana, Kodowanie Huffmana Kodowanie i kompresja informacji - Wykład 2 1 marca 2010 Test na jednoznaczna dekodowalność Kod a jest prefiksem kodu b jeśli b jest postaci ax. x nazywamy

Bardziej szczegółowo

Algorytmy z powrotami

Algorytmy z powrotami Algorytmy z powrotami Algorytmy z powrotami są wykorzystywane do rozwiązywania problemów, w których z określonego zbioru jest wybierana sekwencja obiektów tak, aby spełniała ona określone kryteria. Klasycznym

Bardziej szczegółowo

Algorytmy sortujące 1

Algorytmy sortujące 1 Algorytmy sortujące 1 Sortowanie Jeden z najczęściej występujących, rozwiązywanych i stosowanych problemów. Ułożyć elementy listy (przyjmujemy: tablicy) w rosnącym porządku Sortowanie może być oparte na

Bardziej szczegółowo

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym Akademickie Mistrzostwa Polski w Programowaniu Zespołowym Prezentacja rozwiązań zadań 26 października 2014 a d c k e b g j i f h Adwokat Autor zadania: Jakub Łącki Zgłoszenia: 118 z 857 (13%) Zaakceptowane

Bardziej szczegółowo

Pascal - wprowadzenie

Pascal - wprowadzenie Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0, 2 Arytmetyka Niech b = d r d r 1 d 1 d 0 będzie zapisem liczby w systemie dwójkowym Zamiana zapisu liczby b na system dziesiętny odbywa się poprzez wykonanie dodawania d r 2 r + d r 1 2 r 1 d 1 2 1 + d

Bardziej szczegółowo