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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 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

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

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

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

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

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

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

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

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

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

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

Ć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

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

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

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

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

Ć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

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

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

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

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

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

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

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 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. 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

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

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

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

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma}; INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE

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

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM Algorytmy Równoległe i Rozproszone Część IV - Model PRAM Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/ kuszner/arir/ Wykład

Bardziej szczegółowo

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych 1 Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych Alexander Denisjuk Prywatna Wyższa Szkoła Zawodowa w Giżycku

Bardziej szczegółowo

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA? /9/ Zagadnienie transportowe Optymalizacja w procesach biznesowych Wykład --9 Plan wykładu Przykład zagadnienia transportowego Sformułowanie problemu Własności zagadnienia transportowego Metoda potencjałów

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz? DROGI i CYKLE EULERA w grafach Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz? Czy można narysować podaną figurę nie odrywając ołówka od papieru

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych Drzewa Witold Marańda maranda@dmcs.p.lodz.pl Drzewa - podstawy Drzewo jest dynamiczną strukturą danych składającą się z elementu węzłowego, zawierającego wskazania na skończoną

Bardziej szczegółowo

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki. Podstawy Programowania 1 Sortowanie tablic jednowymiarowych Arkadiusz Chrobot Zakład Informatyki 12 listopada 20 1 / 35 Plan Sortowanie Wartość minimalna i maksymalna w posortowanej tablicy Zakończenie

Bardziej szczegółowo

Programowanie równoległe

Programowanie równoległe Programowanie równoległe ELEMENTARNE ALGORYTMY (PODSTAWA: Z.CZECH. WPROWADZENIE DO OBLICZEŃ RÓWNOLEGŁYCH. PWN, 2010) Andrzej Baran baran@kft.umcs.lublin.pl Charakterystyka ilościowa algorytmów Przez algorytm

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM Algorytmy Równoległe i Rozproszone Część IV - Model PRAM Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/ kuszner/arir/ Wykład

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Algorytmy i język C++

Algorytmy i język C++ Wykład 6 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy

Bardziej szczegółowo

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu

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ń 30 października 2011 c h k f e j i a b d g Czy się zatrzyma? Autor zadania: Jakub Łącki Zgłoszenia: 104 z 914 (11%)

Bardziej szczegółowo

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/ STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Opis efektów kształcenia dla modułu zajęć

Opis efektów kształcenia dla modułu zajęć Nazwa modułu: Formalne podstawy informatyki Rok akademicki: 2013/2014 Kod: EIB-1-220-s Punkty ECTS: 2 Wydział: Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Kierunek: Inżynieria Biomedyczna

Bardziej szczegółowo

Dynamiczne drzewa. Piotr Sankowski. - p. 1/27

Dynamiczne drzewa. Piotr Sankowski. - p. 1/27 Piotr Sankowski - p. 1/27 przypomnienie czas O(log 2 n), jak to zrobić w czasie O(log n), jak to zrobić w pesymistycznym czasie O(log n) (szkic). - p. 2/27 Operacje na dynamicznych drzewach: parent(v)

Bardziej szczegółowo

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C Opublikowano w: WEREWKA J..: Podstawy programowana dla automatyków. Skrypt AGH Nr 1515, Kraków 1998 20. i łączenie podprogramów a z programem napisanym w Ze względu na duże rozpowszechnienie języka, szczególnie

Bardziej szczegółowo

Wykład VII. Kryptografia Kierunek Informatyka - semestr V. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład VII. Kryptografia Kierunek Informatyka - semestr V. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład VII Kierunek Informatyka - semestr V Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Problem pakowania plecaka System kryptograficzny Merklego-Hellmana

Bardziej szczegółowo

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych Modelowanie hierarchicznych struktur w relacyjnych bazach danych Wiktor Warmus (wiktorwarmus@gmail.com) Kamil Witecki (kamil@witecki.net.pl) 5 maja 2010 Motywacje Teoria relacyjnych baz danych Do czego

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Test, dzień pierwszy, grupa młodsza

Test, dzień pierwszy, grupa młodsza Test, dzień pierwszy, grupa młodsza 1. Na połowinkach 60 procent wszystkich uczniów to dziewczyny. Impreza jest kiepska, bo tylko 40 procent wszystkich uczniów chce się tańczyć. Sytuacja poprawia sie odrobinę,

Bardziej szczegółowo

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Wykład z modelowania matematycznego. Zagadnienie transportowe. Wykład z modelowania matematycznego. Zagadnienie transportowe. 1 Zagadnienie transportowe zostało sformułowane w 1941 przez F.L.Hitchcocka. Metoda rozwiązania tego zagadnienia zwana algorytmem transportowymópracowana

Bardziej szczegółowo

Zadania przykładowe do kolokwium z AA2

Zadania przykładowe do kolokwium z AA2 1 Zadania przykładowe do kolokwium z AA2 Zadanie 1 Dla tekstu ALA MA KOTA ALE ON MA ALERGIĘ zilustruj działanie algorytmów: a) LZ77, b) LZ78, c) LZSS. Załóż, że maksymalna długość dopasowania to 4, rozmiar

Bardziej szczegółowo

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie PASCAL Język programowania wysokiego poziomu Opracowany przez Mikołaja Wirtha na początku lat 70 XX wieku Prosty, z silną kontrolą poprawności Stosowany prawie wyłącznie na uczelniach do nauki programowania

Bardziej szczegółowo

EGZAMIN MATURALNY OD ROKU SZKOLNEGO

EGZAMIN MATURALNY OD ROKU SZKOLNEGO EGZAMIN MATURALNY OD ROKU SZKOLNEGO 2014/2015 INFORMATYKA POZIOM ROZSZERZONY ROZWIĄZANIA ZADAŃŃ I SCHEMATY PUNKTOWANIA (A1, A2, A3, A4, A6, A7) GRUDZIEŃ 2013 Zadanie 1. Test (0 5) Wymagania ogólne I. [

Bardziej szczegółowo

Matura próbna 2014 z matematyki-poziom podstawowy

Matura próbna 2014 z matematyki-poziom podstawowy Matura próbna 2014 z matematyki-poziom podstawowy Klucz odpowiedzi do zadań zamkniętych zad 1 2 3 4 5 6 7 8 9 10 11 12 odp A C C C A A B B C B D A 13 14 15 16 17 18 19 20 21 22 23 24 25 C C A B A D C B

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański

Bardziej szczegółowo

Metody Programowania

Metody Programowania POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Metody Programowania www.pk.edu.pl/~zk/mp_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 8: Wyszukiwanie

Bardziej szczegółowo

Lista 5 Typy dynamiczne kolejka

Lista 5 Typy dynamiczne kolejka Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Metody i języki programowania 1 Wprowadzenie Lista 5 Typy dynamiczne kolejka Kolejka jest jedną z podstawowych struktur umożliwiających

Bardziej szczegółowo

Algebra liniowa z geometrią

Algebra liniowa z geometrią Algebra liniowa z geometrią Maciej Czarnecki 15 stycznia 2013 Spis treści 1 Geometria płaszczyzny 2 1.1 Wektory i skalary........................... 2 1.2 Macierze, wyznaczniki, układy równań liniowych.........

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji Macierze - obliczanie wyznacznika macierzy z użyciem permutacji I LO im. F. Ceynowy w Świeciu Radosław Rudnicki joix@mat.uni.torun.pl 17.03.2009 r. Typeset by FoilTEX Streszczenie Celem wykładu jest wprowadzenie

Bardziej szczegółowo

Podstawy informatyki 2

Podstawy informatyki 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Wykład nr 2 (07.03.2007) Wykład nr 2 2/46 Plan wykładu nr 2 Argumenty funkcji main

Bardziej szczegółowo

Wykład 5 Listy leniwe

Wykład 5 Listy leniwe Wykład 5 Listy leniwe Listy leniwe Funkcjonały dla list leniwych Przykład: generowanie liczb pierwszych metodą sita Eratostenesa Algorytmy przeszukiwania przestrzeni stanów Przykład: problem ośmiu hetmanów

Bardziej szczegółowo

Fakultet Informatyczny Algorytmy i ProgramowanIe (API)

Fakultet Informatyczny Algorytmy i ProgramowanIe (API) Fakultet Informatyczny Algorytmy i ProgramowanIe (API) Program autorski fakultetu informatycznego dla uczniów gimnazjum do realizacji na zajęcia pozalekcyjne z komputerem w klasach II Autor: mgr Rafał

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: obowiązkowy w ramach treści wspólnych z kierunkiem Matematyka, moduł kierunku obowiązkowy PODSTAWY INFORMATYKI Fundamentals of computer science

Bardziej szczegółowo

B jest globalnym pokryciem zbioru {d} wtedy i tylko wtedy, gdy {d} zależy od B i nie istnieje B T takie, że {d} zależy od B ;

B jest globalnym pokryciem zbioru {d} wtedy i tylko wtedy, gdy {d} zależy od B i nie istnieje B T takie, że {d} zależy od B ; Algorytm LEM1 Oznaczenia i definicje: U - uniwersum, tj. zbiór obiektów; A - zbiór atrybutów warunkowych; d - atrybut decyzyjny; IND(B) = {(x, y) U U : a B a(x) = a(y)} - relacja nierozróżnialności, tj.

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo

Analiza Algorytmów. Informatyka, WPPT, Politechnika Wroclawska. 1 Zadania teoretyczne (ćwiczenia) Zadanie 1. Zadanie 2. Zadanie 3

Analiza Algorytmów. Informatyka, WPPT, Politechnika Wroclawska. 1 Zadania teoretyczne (ćwiczenia) Zadanie 1. Zadanie 2. Zadanie 3 Analiza Algorytmów Informatyka, WPPT, Politechnika Wroclawska 1 Zadania teoretyczne (ćwiczenia) Zadanie 1 Niech k będzie dodatnią liczbą całkowitą. Rozważ następującą zmienną losową Pr[X = k] = (6/π 2

Bardziej szczegółowo

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Zadanie do wykonania 1) Utwórz na pulpicie katalog w formacie Imię nazwisko, w którym umieść wszystkie pliki związane z

Bardziej szczegółowo

Podstawy OpenCL część 2

Podstawy OpenCL część 2 Podstawy OpenCL część 2 1. Napisz program dokonujący mnożenia dwóch macierzy w wersji sekwencyjnej oraz OpenCL. Porównaj czasy działania obu wersji dla różnych wielkości macierzy, np. 16 16, 128 128, 1024

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część ósma Tablice znaków i przetwarzanie napisów Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo