ALGORYTMY I STRUKTURY DANYCH WYKAD 06 Podstawowe struktury

  • Slides: 19
Download presentation
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 06 Podstawowe struktury danych. Grażyna Mirkowska PJWSTK, 2003/2004 G.

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 –

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

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

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

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

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;

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

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 –

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

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

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

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] : =

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

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

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

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,

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]

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

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