ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Jarosław Kuchta Semafory.
Jarosław Kuchta Monitory.
Algorytmy – c.d. złożoność algorytmów struktury danych
Zaawansowane techniki algorytmiczne
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Wzorce.
Dynamiczne struktury danych Listy, Kolejki, Stosy
Grażyna Mirkowska PJWSTK 15 listopad 2000
Programowanie w języku Visual Basic
Metody Analizy Programów Wykład 02
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Wykład 06 Metody Analizy Programów System Hoare
Programowanie I Rekurencja.
PROGRAMOWANIE STRUKTURALNE
ALGORYTMY I STRUKTURY DANYCH
START WYPROWADŹ WYNIK 8 STOP
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Matematyka Dyskretna, G.Mirkowska, PJWSTK
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Współprogramy III Ten wykład ma na celu pokazanie kolejnej ciekawej możliwości, którą oferują współprogramy. Wspólprogramy reprezentujące wyrażenia regularne.
Metoda pierwszeństwa operatorów
pseudokody algorytmów
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Model danych oparty na listach
Tablice.
Materiały pomocnicze do wykładu
Typy standardowe Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia.
Matematyka Dyskretna, Struktury algebraiczne G.Mirkowska, PJWSTK
Analiza kosztu zamortyzowanego
dr Anna Kwiatkowska Instytut Informatyki
ALGORYTMY I STRUKTURY DANYCH
Podstawy programowania
Algorytmy i struktury danych
Podstawy programowania II
Operacje na strukturach listowych
Wyrażenia w Turbo Pascalu.
Listy, stosy i kolejki..
Złożone typy danych Listy Tworzenie elastycznych baz danych
Rodzaje, przechodzenie grafu
C# Platforma .NET CZ.3 Kuba Ostrowski.
Dynamiczne struktury danych
Algorytmy i Struktury Danych
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Algorytmy i Struktury Danych Struktury Danych
METODY REPREZENTOWANIA IFORMACJI
Zbiory dynamiczne.
ALGORYTMY I STRUKTURY DANYCH
Typy wyliczeniowe, kolekcje
Listy.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

ALGORYTMY I STRUKTURY DANYCH 2019-02-22 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 Stosy Własności implementacja Przykład: turniej Kolejki Przykład : sito Eratostenesa Listy 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. 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Podstawowe struktury danych Algorytmy + struktury Danych = Programy e1, e2, e3, ..., en Lista początek koniec STOS Operacje na lewym końcu listy Operacje na listach top push pop Operacje na prawym końcu listy Pobranie elementu z listy. Wstawianie elementu na listę. Usuwanie elementu z listy. rear inject eject 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

G. Mirkowska, ASD_06 Podstawowe struktury danych Stos i jego własności < S  E, push, pop, top, empty> element3 next push(s, e) = (e, e1,e2,..., en) pop(s) = (e2,..., en), o ile n>1 top(s) = e1 empty(s) wttw n = 0 s = (e1,e2,..., en) ogniwo Twierdzenie Dowolna struktura danych, w której prawdziwe są własności (*) jest izomorficzna z pewną strukturą standardową. element2 next Własności (*) element1 next 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 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Abstrakcyjna struktura kolejek Koniec kolejki Zasada -- FIFO pokaz Początek kolejki Standardowa struktura kolejek first(e1,...en) = e1 , gdy n>0 i nieokr. w p.p. in((e1,...,en),e) = (e1,e2,...,en, e) out(e1,...en) = (e2,...,en) , gdy n>0 i nieokr. w p.p. empty(e) wttw e jest ciągiem pustym 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Specyfikacja kolejek FIFO Sygnatura in : E  Q  Q out : Q  Q first Q  E empty : Q  Bo Q =  E  Q , in, out, first, empty, =  Twierdzenie Każda struktura danych ze zbiorem elementów E, w której prawdziwe są wszystkie wymienione aksjomaty kolejek jest izomorficzna z modelem standardowym kolejek Q(E). empty(q)  out(in(e,q)) = q empty(q)  first(in(e,q)) = e empty(in(e,q)) Aksjomaty P = { b:= true; while (empty(q) empty(q’)  b) do b := (first(q)=first(q’)); q := out(q); q’:= out(q’) ; od } empty(q)  first(in(e,q)) = first(q) empty(q)  in(e,out(q)) = out(in(e,q)) while empty(q) do q := out(q) od ten program nie zapętla się q =q’ wttw P (empty(q)  empty(q’)  b) 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Koszty operacji ! Impelementacja kolejek e1 e2 e3 en ... Początek Koniec e2 e3 en ... Public class ogniwo (int e){ ogniwo next; ........ } 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 } Public class kolejka( ){ ogniwo poczatek; ogniwo koniec; ..................... } Koszty operacji ! 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

G. Mirkowska, ASD_06 Podstawowe struktury danych Listy Kolejki i Stosy są przykładami struktur listowych. Operacje na listach Dostęp do elementu listy Podlista Złożenie wkładanie elementu Usuwanie elementu Realizacje : - Tablicowa - dowiązaniowa ... Lista : jednokierunkowa, cykliczna dwukierunkowa Dwukierunkowa cykliczna 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

G. Mirkowska, ASD_06 Podstawowe struktury danych Przykład : ‘Turniej’ Zadanie polega na znalezieniu elementu drugiego co do wielkości. Metoda – algorytm turniej (por. wykład 03) 2 3 4 6 1 8 7 5 7 Metoda - Turniej 4 5 8 6 6 5 5 8 8 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Struktura danych dla algorytmu ‘Turniej’ w next stosp LISTA Następny element głównej listy a next stosp OGNIWO listy Lista elementów, które przegrały z e (kandydaci do drugiego miejsca) e’ next e” STOS 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

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; od; e[i] e[i+1] e[i+2] e[i+3] ... Wkładam na stos element, który przegrał. ... k l i+3 i+2 i i+1 L 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Budowa drzewa turnieju while not empty(L.next) do x := L; 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; x 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 if e[drugi ] < e[top(z)] then drugi := top(z) fi; z := pop(z); od } Dołącz x do elementów, które przegrały z y Rozważmy pierwszy element następnej pary 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

z tablicą Niezmiennik 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 } Tablica wszystkich liczb naturalnych  n Wykreślam z tablicy wszystkie liczby podzielne przez i Niezmiennik Wszystkie elementy tablicy różne od zera na pozycjach < i są liczbami pierwszymi tab[i] , o ile nie jest zerem, jest liczbą pierwszą 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

G. Mirkowska, ASD_06 Podstawowe struktury danych Sito Eratostenesa Sito Eratostenesa z listą { 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 } początek x Wartość=2 next Wartość=3 Wartość=4 Wartość=5 poprzedni y y Jak to działa? 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

z kolejką Sito Eratostenesa Sito Eratostenesa Znaleźć wszystkie liczby pierwsze  n. 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 { p:= null; wynik := null; for i := 2 to n do p := in(i,p) od; 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 } Znaleźć wszystkie liczby pierwsze  n. Usuwamy z kolejki p wszystkie liczby podzielne przez i 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

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 w1, w2  WA , to (w1+w2) oraz (w1*w2) należą do WA, (3) Jeśli w  WA, to (-w)  WA. Definicja Obliczyć wartość danego wyrażenia algebraicznego. Zadanie 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. 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

G. Mirkowska, ASD_06 Podstawowe struktury danych 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ę. Metoda ((x+(y*z))+(-u)) z y x y*z u x+(y*z) -u x x+(y*z) x+(y*z)+(-u) Przykład Stos argumentów * - + + + + Stos operacji 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

Schemat algorytmu i:=i+1 i := 1 i<n+1 s[i] jest operacją nie tak s[i] jest zmienną Wpisz s[i] na stos operacji nie tak s[i] =‘)’ tak włóż wartość s[i] na stos argumentów nie Weź operację o ze stosu Weź ze stosu odpowiednią liczbę argumentów. Oblicz wynik operacji o na tych argumentach. i:=i+1 Usuń ze stosu wykonaną operacje i użyte argumenty Wpisz wynik na stos argumentów 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych

A jaki jest koszt ? cd. i:=i+1 i := 1 nie tak s[i] jest operacją nie s[i] jest zmienną tak nie s[i] =‘)’ OP :=push(s[i],OP) tak nie tak O := top(OP); OP :=pop(OP); a := top(ARG); ARG := pop(ARG); ARG:= push(val(s[i]),ARG) O dwuargumentowa nie tak a := O(a) b:= top(ARG); ARG := pop(ARG); a:= O(a,b) i:=i+1 2019-02-22 G. Mirkowska, ASD_06 Podstawowe struktury danych ARG:= push(a,ARG)