ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Dynamiczne struktury danych Listy, Kolejki, Stosy
Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Wykład 06 Metody Analizy Programów System Hoare
ALGORYTMY I STRUKTURY DANYCH
Matematyka Dyskretna, Struktury algebraiczne G.Mirkowska, PJWSTK
Operacje na strukturach listowych
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
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
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
ALGORYTMY I STRUKTURY DANYCH
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Dodawania i odejmowanie sum algebraicznych. Mnożenie sumy algebraicznej przez jednomian. Opracowanie Joanna Szymańska Konsultacja Bożena Hołownia.
KOMBINATORYKA.
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne.
Wykonał: Mgr Inż. Krzysztof Harwacki. Value Mapping for Lean management Sytuacja stanowi mały, prosty przykład zastosowania mapowania strumienia wartości.
ZASTOSOWANIE  Programowanie  Ułatwianie pracy  Szybkie obliczanie  Spisywanie kosztów  Tworzenie tabel i wykresów  Obliczanie średniej, sumy,
Dowodzenie twierdzeń Autor: Patryk Kostrzewski. Dowodzenie twierdzeń pozwala stwierdzić prawdziwość twierdzenia. W tym celu przeprowadza się rozumowanie.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Język Java Paweł Rajba
Programowanie Obiektowe – Wykład 1
Schematy blokowe.
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
terminologia, skale pomiarowe, przykłady
WYPROWADZENIE WZORU. PRZYKŁADY.
Podstawowe polecenia systemu
On-the-Fly Garbage Collection
Rachunki zdań Tautologiczność funkcji
Miejsce zerowe i znak funkcji w przedziale
Liczby pierwsze.
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
ALGORYTMY I STRUKTURY DANYCH
Akademia C# lab. 9 Zdarzenia i delegaty.
Funkcja – definicja i przykłady
Wstęp do Informatyki - Wykład 3
Elementy analizy matematycznej
Kurs języka C++ – wykład 13 ( )
Elementy fizyki kwantowej i budowy materii
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Instrukcje wyboru.
ALGORYTMY I STRUKTURY DANYCH
Podstawy informatyki Zygfryd Głowacz.
ALGORYTMY I STRUKTURY DANYCH
Pisemne dzielenie liczb naturalnych
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Proste obliczenia w arkuszu kalkulacyjnym
ETO w Inżynierii Chemicznej
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Bufory.
ALGORYTMY I STRUKTURY DANYCH
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementy Kombinatoryki
Asynchroniczne operacje I/O za pomocą IOCP
MODELOWANIE ZMIENNOŚCI CECH
Grazyna Mirkowska Matematyka Dyskretna PJWSTK 2001
dr Robert Kowalczyk, PWSZ Płock
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, 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)