ALGORYTMY I STRUKTURY DANYCH WYKAD 06 Podstawowe struktury
- Slides: 19
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 06 Podstawowe struktury danych. Grażyna Mirkowska PJWSTK, 2003/2004 G. Mirkowska, ASD_06 Podstawowe struktury danych
Plan wykładu 4 4 Stosy – Własności – implementacja – Przykład: turniej Kolejki – Własności – implementacja – Przykład : sito Eratostenesa 4 Listy 4 Przykład zastosowań – Obliczanie wartości wyrażeń MOTTO Struktury danych modyfikują świat, w którym realizowany jest algorytm, usprawniają działanie, ułatwiają zrozumienie algorytmu. 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 2
Podstawowe struktury danych Algorytmy + struktury Danych = Programy e 1, e 2, e 3, . . . , en początek koniec Operacje na listach Pobranie elementu z listy. Wstawianie elementu na listę. Usuwanie elementu z listy. 2021 -02 -23 top push pop Operacje na lewym końcu listy rear inject eject G. Mirkowska, ASD_06 Podstawowe struktury danych Operacje na prawym końcu listy 3
Stos i jego własności < S E, push, pop, top, empty> push(s, e) = (e, e 1, e 2, . . . , en) s = (e 1, e 2, . . . , en) pop(s) = (e 2, . . . , en), o ile n>1 ogniwo top(s) = e 1 empty(s) wttw Twierdzenie n=0 Dowolna struktura danych, w której prawdziwe są własności (*) jest izomorficzna z pewną strukturą standardową. top(push(s, e)) = e op(push(s, e)) = s empty(s) => push(pop(s), top(s)) = s while not empty(s) do s: =pop(s)od ma własność stopu 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych element 3 next element 2 next element 1 next 4
Abstrakcyjna struktura kolejek Koniec kolejki pokaz Standardowa struktura kolejek Początek kolejki first(e 1, . . . en) = e 1 , gdy n>0 i nieokr. w p. p. in((e 1, . . . , en), e) = (e 1, e 2, . . . , en, e) out(e 1, . . . en) = (e 2, . . . , en) , gdy n>0 i nieokr. w p. p. empty(e) wttw e jest ciągiem pustym 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 5
Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = Sygnatura in : E Q Q out : Q Q first Q E danychempty ze : Q Bo Twierdzenie empty(q) out(in(e, q)) = q Każda struktura empty(q) first(in(e, q)) = e zbiorem elementów E, w której empty(in(e, q)) prawdziwe są wszystkie P={ empty(q) first(in(e, q)) = first(q)aksjomaty wymienione b: = true; kolejek jest izomorficzna z modelem while empty(q) in(e, out(q)) = out(in(e, q)) ( empty(q) empty(q’) b) do standardowym kolejek Q(E). while empty(q) do q : = out(q) od b : = (first(q)=first(q’)); q : = out(q); q’: = out(q’) ; ten program nie zapętla się q =q’ wttw P (empty(q) empty(q’) b) od } 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 6
Impelementacja kolejek e 1 e 2 Public class kolejka( ){ ogniwo poczatek; ogniwo koniec; . . 2021 -02 -23 . . . en Public class ogniwo (int e){ ogniwo next; . . . . } Początek Koniec } e 3 public kolejka in (int e; kolejka q){ o = New ogniwo(e); o. next = null; if (q = null) {q = New kolejka(); q. początek = o; } else q. koniec. next = o; q. koniec = o; return q } G. Mirkowska, ASD_06 Podstawowe struktury danych 7
Listy Kolejki i Stosy są przykładami struktur listowych. Operacje na listach • Dostęp do elementu listy • Podlista Realizacje : - Tablicowa - dowiązaniowa • Złożenie • wkładanie elementu . . . • Usuwanie elementu Lista : jednokierunkowa, cykliczna dwukierunkowa Dwukierunkowa cykliczna 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 8
Przykład : ‘Turniej’ Zadanie polega na znalezieniu elementu drugiego co do wielkości. Metoda – algorytm turniej (por. wykład 03) 4 2 3 4 7 5 5 8 1 6 8 5 6 8 8 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 9
Struktura danych dla algorytmu ‘Turniej’ Następny element głównej listy next OGNIWO listy w stosp 2021 -02 -23 e’ next e” next a next stosp Lista elementów, które przegrały z e (kandydaci do drugiego miejsca) G. Mirkowska, ASD_06 Podstawowe struktury danych 10
Algorytm ‘Turniej’ - implementacja Tworzenie wyników pierwszej rundy for i : = 1 to n div 2 do if e[i] > e[i+1] then L: = push(i, L); L. stosp : = push(i+1, L. stosp); else L: = push(i+1, L); L. stosp : = push(i, L. stosp); fi; . . . k od; L 2021 -02 -23 l . . . e[i] e[i+1]e[i+2]e[i+3] Wkładam na stos element, który przegrał. i+3 i i+2 G. Mirkowska, ASD_06 Podstawowe struktury danych i+1 11
Budowa drzewa turnieju while not empty(L. next) do x : = L; x while not empty(x) do y : = x. next; if e[x. w] > e[y. w] then x. stosp : = push (x. stosp, y. w) else y. stosp : = push(y. stosp, x. w); x. w : = y. w; x. stosp : = y. stosp fi; x. next : = y. next; x : = x. next od od; 2021 -02 -23 y { Dołącz y do elementów, które przegrały z x z : = L. stos; drugi : = z. w; z : =pop(z); while not empty(z) do Dołącz x do elementów, if e[drugi ] < e[top(z)] then które przegrały y drugi : =z top(z) fi; z : = pop(z); Rozważmy pierwszy od element następnej pary } G. Mirkowska, ASD_06 Podstawowe struktury danych 12
Sito Eratostenesa { for i : = 2 to n do tab[i] : = i od; for i : = 2 to n do if tab[i] <>0 then for j : = i+1 to n do if ( tab[j] mod i = 0) then tab[j] : = 0; fi; od; fi od } tab[i] , o ile nie jest zerem, jest liczbą pierwszą 2021 -02 -23 Tablica wszystkich liczb naturalnych n Wykreślam z tablicy wszystkie liczby podzielne przez i Wszystkie elementy tablicy różne od zera na pozycjach < i są liczbami pierwszymi G. Mirkowska, ASD_06 Podstawowe struktury danych 13
Sito Eratostenesa { poczatek : = new ogniwo(2); x : = początek; for i : = 3 to n do x. next: = new ogniwo(i); x: = x. next; od; x : = początek; while x<>null do w: = x. wartość; poprzedni : = x; y : =x. next; while y<>null do if ( y. wartość mod w = 0) then poprzedni. next : = y. next; else poprzedni : = y; fi; y : = y. next; od; x: = x. next; od } 2021 -02 -23 początek Wartość=2 poprzedni next G. Mirkowska, ASD_06 Podstawowe struktury danych y Wartość=3 next y Wartość=4 next x Wartość=5 next 14
Sito Eratostenesa Znaleźć wszystkie liczby pierwsze n. { p: = null; wynik : = null; Znaleźć wszystkie pierwsze for i : = 2 to n doliczby p : = in(i, p) od; n. while not empty(p) do i : = first(p); wynik : = in(i, wynik); p : = out(p); q: = null; while not empty(p) do if (first(p) mod i <>0) then q : = in(first(p), q) fi; p : = out(p) od; p : = q od } 2021 -02 -23 Kolejka wynik zawiera wszystkie liczby pierwsze < first(p). Kolejka p zawiera liczby n, które nie dzielą się przez żadną z liczb x należących do kolejki wynik Usuwamy z kolejki p wszystkie liczby podzielne przez i G. Mirkowska, ASD_06 Podstawowe struktury danych 15
Obliczanie wartości wyrażeń Zbiorem wyrażeń algebraicznych WA nazywać będziemy najmniejszy zbiór napisów nad alfabetem {x, y, z, u} {+, * -} {(, )} taki, że (1) x, y, z, u WA (2) jeśli w 1, w 2 WA , to (w 1+w 2) oraz (w 1*w 2) należą do WA, (3) Jeśli w WA, to (-w) WA. Obliczyć wartość danego wyrażenia algebraicznego. Uwagi -założenia : 1. Wyrażenie jest zapisane w tablicy znakowej o elementach s[1], . . . , s[n]. 2. Wartości zmiennych są zapisane w obiekcie v, którego atrybutami są x, y, z, u. 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 16
Opis metody Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos operacji. Pojawienie się ‘)’ sygnalizuje, że można wykonać ostatnio zapamiętaną operację. ((x+(y*z))+(-u)) z y x y*z u -u x x+(y*z)+(-u) Stos argumentów * + + Stos operacji 2021 -02 -23 G. Mirkowska, ASD_06 Podstawowe struktury danych 17
i : = 1 Schemat algorytmu i<n+1 tak Wpisz s[i] na stos operacji s[i] jest operacją nie s[i] jest zmienną tak nie s[i] =‘)’ włóż wartość s[i] na stos argumentów i: =i+1 2021 -02 -23 nie tak Weź operację o ze stosu Weź ze stosu odpowiednią liczbę argumentów. Oblicz wynik operacji o na tych argumentach. Usuń ze stosu wykonaną operacje Wpisz wynik na i użyte argumenty argumentów G. Mirkowska, stos ASD_06 Podstawowe struktury danych 18
i : = 1 cd. nie i < n+1 tak s[i] jest operacją nie tak s[i] jest zmienną nie OP : =push(s[i], OP) tak nie s[i] =‘)’ O : = top(OP); OP : =pop(OP); a : = top(ARG); ARG : = pop(ARG); ARG: = push(val(s[i]), ARG) nie a : = O(a) i: =i+1 2021 -02 -23 tak O dwuargumentowa tak b: = top(ARG); ARG : = pop(ARG); a: = O(a, b) G. Mirkowska, ASD_06 ARG: = Podstawowe struktury danych push(a, ARG) 19
- Algorytmy struktury danych programy
- Algorytmy i struktury danych
- System bazy danych
- Podstawowe pojęcia baz danych
- Algorytmy asymetryczne
- Sortowanie zwariowane
- Algoritmi rubikova kocka
- Algorytm rekurencyjny przykład
- Teoria i algorytmy sterowania
- Algorytmy warunkowe
- W skrzynce operacyjnej schematu blokowego umieszcza się
- Organizacja paktu północnoatlantyckiego
- Struktury rynkowe tabela
- Struktury onz
- Struktury rynkowe tabela
- Struktury bílkovin
- Co to jest struktura wyrobu
- Kraniak
- Organy onz
- Struktury bílkovin