ALGORYTMY I STRUKTURY DANYCH WYKAD 04 Podstawowe struktury

  • Slides: 21
Download presentation
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 Podstawowe struktury danych. Grażyna Mirkowska PJWSTK, II rok

ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 Podstawowe struktury danych. Grażyna Mirkowska PJWSTK, II rok semestr letni 2003 marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych

Plan wykładu Stosy – Własności – implementacja – Przykład: turniej 4 Kolejki – Własności

Plan wykładu Stosy – Własności – implementacja – Przykład: turniej 4 Kolejki – Własności – implementacja – Przykład : sito Eratostenesa 4 4 Listy marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 2

Podstawowe struktury danych Algorytmy + struktury Danych = Programy e 1, e 2, e

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. marzec 2003 top push pop rear inject eject G. Mirkowska, ASD_04 Podstawowe struktury danych Operacje na lewym końcu listy Operacje na prawym końcu listy 3

Stos i jego własności < S E, push, pop, top, empty> s = (e

Stos i jego własności < S E, push, pop, top, empty> s = (e 1, e 2, . . . , en) push(s, e) = (e, e 1, e 2, . . . , en) pop(s) = (e 2, . . . , en) o ile n>1 ogniwo top(s) = e 1 empty(s) wttw n=0 top(push(s, e)) = e pop(push(s, e))= s not empty(s) => push(pop(s), top(s))=s Istnieje i takie że empty(popi(s)) marzec 2003 G. Mirkowska, ASD_04 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, .

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 marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 5

Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = in

Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = in : E Q Q out : Q Q first Q E empty : Q Bo empty(q) out(in(e, q)) = q empty(q) first(in(e, q)) = e empty(in(e, q)) empty(q) first(in(e, q)) = first(q) Sygnatura marzec 2003 empty(q) in(e, out(q)) = out(in(e, q)) G. Mirkowska, ASD_04 Podstawowe struktury danych 6

Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = in

Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = in : E Q Q out : Q Q first : Q E empty : Q Bo while empty(q) do q : = out(q) od ten program nie zapętla się P = {b: =true; while ( empty(q) empty(q’) b) q =q’ wttw do Po wykonaniu programu P b : = (first(q)=first(q’)); spełniony jest warunek q : = out(q); (empty(q) empty(q’) b) q’: = out(q’) ; od } marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 7

Impelementacja kolejek e 1 e 2 Public class kolejka( ){ ogniwo poczatek; ogniwo koniec;

Impelementacja kolejek e 1 e 2 Public class kolejka( ){ ogniwo poczatek; ogniwo koniec; . . marzec 2003 . . . 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_04 Podstawowe struktury danych 8

Listy Kolejki i Stosy są szczególnymi przykładami struktur listowych. Operacje na listach • Dostęp

Listy Kolejki i Stosy są szczególnymi 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 marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 9

Przykład : Algorytm ‘Turniej’ Metoda polega na porównywaniu sąsiednich elementów ciągu. Elementy większe (wygrywające)

Przykład : Algorytm ‘Turniej’ Metoda polega na porównywaniu sąsiednich elementów ciągu. Elementy większe (wygrywające) przechodzą do następnej ‘rundy’. Elementu drugiego co do wielkości szukamy wśród elementów, które przegrały z największym. 4 2 3 4 5 7 5 8 1 8 5 6 6 8 8 marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 10

Struktura danych dla algorytmu ‘Turniej’ Następny element głównej listy next OGNIWO listy w stosp

Struktura danych dla algorytmu ‘Turniej’ Następny element głównej listy next OGNIWO listy w stosp marzec 2003 e’ next e” next a next stosp Lista elementów, które przegrały z e (kandydaci do drugiego miejsca) G. Mirkowska, ASD_04 Podstawowe struktury danych 11

Algorytm ‘Turniej’ - implementacja Tworzenie wyników pierwszej rundy for i : = 1 to

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 marzec 2003 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_04 Podstawowe struktury danych i+1 12

Budowa drzewa turnieju while not empty(L. next) do x : = L; x while

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; marzec 2003 y Dołącz y do elementów, które przegrały z x Dołącz x do elementów, które przegrały z y Rozważmy pierwszy element następnej pary G. Mirkowska, ASD_04 Podstawowe struktury danych 13

III etap - przeszukiwanie stosu { Pom : = L. stos; drugi : =

III etap - przeszukiwanie stosu { Pom : = L. stos; drugi : = pom. w; pom : =pop(pom); while not empty(pom) do if e[drugi ] < e[top(pom)] then drugi : = top(pom) fi; pom : = pop(pom); Algorytm Turniej jest algorytmem od optymalnym znajdowania } drugiego co do wielkości elementu ciągu. marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 14

Przykład: Sito Eratostenesa { for i : = 2 to n do tab[i] :

Przykład: 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ą marzec 2003 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_04 Podstawowe struktury danych 15

Sito Eratostenesa { poczatek : = new ogniwo(2); x : = początek; for i

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 } marzec 2003 poczatek Wartość=2 poprzedni next G. Mirkowska, ASD_04 Podstawowe struktury danych y x Wartość=3 next Wartość=4 next Wartość=5 next 16

Sito Eratostenesa Znaleźć wszystkie liczby pierwsze n. { p: = null; wynik : =

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 } marzec 2003 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_04 Podstawowe struktury danych 17

Obliczanie wartości wyrażeń Zbiorem wyrażeń algebraicznych WA nazywać będziemy najmniejszy zbiór napisów nad alfabetem

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. marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 18

Opis metody Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów,

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 marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych 19

i : = 1 Schemat blokowy algorytmu i<n+1 s[i] jest operacją tak nie Wpisz

i : = 1 Schemat blokowy algorytmu i<n+1 s[i] jest operacją tak nie Wpisz s[i] na stos operacji s[i] jest zmienną tak nie włóż wartość s[i] na stos argumentów i: =i+1 Wpisz wynik na stos argumentów marzec 2003 G. Mirkowska, ASD_04 Podstawowe struktury danych s[i] =‘)’ 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 i użyte argumenty 20

i : = 1 i < n+1 s[i] jest operacją tak nie s[i] jest

i : = 1 i < n+1 s[i] jest operacją tak nie s[i] jest zmienną OP : =push(s[i], OP) tak nie ARG: = push(val(s[i]), ARG) tak O : = top(OP); OP : =pop(OP); a : = top(ARG); ARG : = pop(ARG); i: =i+1 nie a : = O(a) marzec 2003 s[i] =‘)’ G. Mirkowska, ASD_04 ARG: = Podstawowe struktury push(a, ARG) danych O dwuargumentowa tak b: = top(ARG); ARG : = pop(ARG); a: = O(a, b) 21