ALGORYTMY I STRUKTURY DANYCH WYKAD 04 Podstawowe struktury
- Slides: 21
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 – 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 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 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, . . . 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 : 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 : 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; . . 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 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) 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 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 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 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 : = 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] : = 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 : = 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 : = 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 {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, 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 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 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
- Algorytmy struktury danych programy
- Algorytmy i struktury danych
- Transformacja encji
- Access tworzenie relacji
- Algorytmy warunkowe
- Skrzynka warunkowa
- Algorytm rsa
- Schemat blokowy sortowanie przez wstawianie
- Rubik algoritmus
- Algorytm rekurencyjny przykład
- Teoria i algorytmy sterowania
- Struktura sztabowo liniowa
- Organy onz
- Onz tomaszewska
- Struktury smukłe i płaskie
- Wskaźnik struktury zatrudnienia wzór
- Struktury nato
- Handel dziećmi
- Struktura funkcjonalna wady i zalety
- Struktury bílkovin
- Grażyna gilewska
- Struktury bílkovin