Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Podobne dokumenty
E S - uniwersum struktury stosu

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Algorytmy i Struktury Danych

Struktury danych: stos, kolejka, lista, drzewo

Programowanie i struktury danych 1 / 44

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania

Teoretyczne podstawy informatyki

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Dynamiczne struktury danych

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Algorytmy i Struktury Danych.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.


Algorytmy i Struktury Danych.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Struktury danych (I): kolejka, stos itp.

Algorytmy i Struktury Danych.

Listy, kolejki, stosy

Drzewa poszukiwań binarnych

Systemy algebraiczne. Materiały pomocnicze do wykładu. przedmiot: Matematyka Dyskretna 1 wykładowca: dr Magdalena Kacprzak

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

KOLEJKA (QUEUE) (lista fifo first in, first out)

Strategia "dziel i zwyciężaj"

Wstęp do programowania. Stosy i kolejki. Piotr Chrząstowski-Wachtel

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

Wysokość drzewa Głębokość węzła

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Sposoby przekazywania parametrów w metodach.

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Temat: Problem minimalnego drzewa Steinera. Definicja problemu. Zastosowania. Algorytm dokładny Hakimi. Algorytmy aproksymacyjne.

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

Wykład 6. Drzewa poszukiwań binarnych (BST)

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Sortowanie. Bartman Jacek Algorytmy i struktury

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Algorytmy i Struktury Danych

Wybrane algorytmy tablicowe

Abstrakcyjne struktury danych w praktyce

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmiczna teoria grafów

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Projektowanie algorytmów rekurencyjnych

Dynamiczne struktury danych

Podstawy programowania skrót z wykładów:

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Teoretyczne podstawy informatyki

Podstawy informatyki 2

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Wykład 2. Drzewa poszukiwań binarnych (BST)

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy Programowania C++

Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Podstawowe struktury danych

Algorytmy i Struktury Danych

Lista, Stos, Kolejka, Tablica Asocjacyjna

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Listy i operacje pytania

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Wykład 6. Dynamiczne struktury danych

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Wstp. Warto przepływu to

Drzewa poszukiwań binarnych

Sortowanie topologiczne skierowanych grafów acyklicznych

Wprowadzenie do algorytmów. START

Scenariusz lekcji. wymienić podstawowe dynamiczne struktury danych (stos, kolejka, lista, graf, drzewo); opisać sposób dostępu do danych w kolejce;

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Algorytmy. Paweł Dudzik, Adrian Guzik. Kraków, 6 lipca AGH Kraków. Paweł Dudzik, Adrian Guzik (AGH Kraków) Algorytmy Kraków, 6 lipca / 37

SUPLEMENT SM-BOSS WERSJA 6.15

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Struktury Danych i Złożoność Obliczeniowa

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Transkrypt:

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. 1. Pojcie struktury danych Nieformalnie Struktura danych (ang. data structure) to sposób uporzdkowania informacji w komputerze. Na strukturach danych operuj algorytmy. Przykładowe struktury danych to: rekord lub struktura, tablica, stos, kolejka, lista, drzewo, graf Formalnie I Struktura danych to system relacyjny U, r i i, gdzie U to uniwersum systemu, a r i i I to zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów parametrów wszystkich operacji r i. zbioru i I Formalnie definiujemy struktur danych poprzez: okrelenie sygnatury systemu U,, r i i I r okrelenie sygnatur kadej z relacji i i I specyfikacj kadej z relacji r i i I 1

2. Definicja struktury stosu Nieformalnie Stos jest struktur liniow uporzdkowanych danych, z których jedynie ostatni element, zwany wierzchołkiem, jest w danym momencie dostpny. W wierzchołku odbywa si dołczanie nowych elementów, równie jedynie wierzchołek mona usun. Formalnie Stos to system relacyjny o nastpujcej sygnaturze: E S, push, pop, top, empty gdzie: E S to uniwersum struktury stosu E niepusty zbiór elementów (moliwych danych, które chcemy zapamita w stosie ) S niepusty zbiór zwany zbiorem stosów Sygnatury operacji struktury stosu (parametry i wyniki operacji) push : S E S pop : S S top : S E : S 0,1 empty ( 0 fałsz, 1 - prawda) Nieformalna specyfikacja operacji stosu Zakładamy, e : e E, s S 1. Operacja empty(s) zwraca warto 1, gdy stos jest pusty, a 0 w przypadku przeciwnym. 2. Operacja pop(s) usuwa element, który znajduje si w wierzchołku stosu ( najpóniej wstawiony do stosu). Jeeli przed wywołaniem operacji pop(s) stos s był pusty, to operacja pop(s) nie zmienia stosu s. 3. Operacja push(s, e) wstawia element e w wierzchołku stosu. 2

4. Operacja top(s) zwraca element znajdujcy si aktualnie w wierzchołku stosu s. Jeeli przed wywołaniem top(s) stos s był pusty, to warto operacji top(s) jest nieokrelona. 3. Przykładowa implementacja struktury stosu Implementacja tablicowa stosu liczb całkowitych dodatnich Miejscem zapamitania liczb w stosie jest jednowymiarowa tablica S. W indeksie 0 tablicy S znajduje si indeks wierzchołka stosu. Jeeli stos jest pusty, to S[0]=0 Implementacja bdzie poprawna wzgldem specyfikacji stosu pod warunkiem, e w stosie nie bdzie si znajdowało wicej liczb ni n (n+1 wielko tablicy S) top(s) if (S[0]!=0) return S[S[0]]; empty(s) if (S[0]==0) return 1; else return 0; S push(s, e) S[0]=S[0]+1; S[S[0]]=e; return S; 3

S pop(s) if (S[0]>0) S[0]=S[0]-1; return S; Przykład 1 a) stos pusty: empty(s)=1, top(s) warto nieokrelona, pop(s) nie zmienia stosu S: 0 b) push(s, 4) S: 1 4 c) push(s, 2) S: 2 4 2 top(s)=2, empty(s)=0 d) pop(s) S: 1 4 top(s)=4, empty(s)=0 4

4. Przykłady zastosowania struktury stosu Przykład 2 Wywietlenie cigu podanych przez uytkownika znaków w rewersie. Cig jest zakoczony znakiem koca linii. iter_reverse() char ch; S= ; //Inicjalizacja stosu do pobierz ch ; push(s, ch); while (ch! =10); while (!empty(s)) ch=top(s); drukuj ch pop(s); Przykład 3 Dodawanie długich liczb całkowitych dodatnich. Zakładamy, e cyfry obydwu dodawanych liczb zostały wstawione do stosu. W wierzchołku stosu znajduje si najmniej znaczca cyfra. S dodaj(x, Y) S= ; n=0; while (!empty(x) &&!empty(y)) x=top(x); out(x); y=top(y); out(y); push((x+y+n)%10, S); n = (x+y+n)/10; 5

while (!empty(x)) x=top(x); out(x); push((x+n)%10, S); n= (x+n)/10; while (!empty(y)) y=top(y); out(y); push((y+n)%10, S); n= (y+n)/10; if (n>0) push(n, S); return S; 5. Definicja struktury kolejki Nieformalnie Kolejka jest struktur liniow uporzdkowanych danych, z których dostpny jest element pierwszy z wstawionych i ostatni z wstawionych. Miejsce przechowywania pierwszego elementu nazywamy pocztkiem kolejki, a miejsce elementu ostatniego jej kocem. Dołczanie nowych elementów do kolejki odbywa si na kocu kolejki, a usuwanie elementów kolejki w jej pocztku. Formalnie Kolejka to system relacyjny E Q, in, out, first, empty E niepusty zbiór elementów (moliwych danych) Q niepusty zbiór zwany zbiorem kolejek 6

Sygnatura operacji (parametry i wyniki operacji) kolejki in : Q E Q out : Q Q first : Q E empty : Q 0, 1 Nieformalna specyfikacja operacji kolejki Zakładamy, e : e E, q Q 1. Operacja empty(q) zwraca warto 1, gdy kolejka jest pusta, a 0 w przypadku przeciwnym. 2. Operacja out(s) usuwa element, który znajduje si na pocztku kolejki ( najwczeniej wstawiony do kolejki). Jeeli przed wywołaniem operacji out(q) kolejka q była pusta, to operacja out(q) nie zmienia kolejki q. 3. Operacja in(q, e) wstawia element e na koniec kolejki q. 4. Operacja first(q) zwraca element znajdujcy si aktualnie na pocztku kolejki q. Jeeli przed wywołaniem first(q) kolejka q była pusta, to warto operacji first(q) jest nieokrelona. 5. Przykładowa implementacja kolejki Implementacja tablicowa kolejki liczb całkowitych dodatnich Miejscem zapamitania liczb kolejki jest jednowymiarowa tablica Q. W indeksie 0 tablicy Q znajduje si indeks pocztku kolejki, a w indeksie n+1 indeks koca kolejki. Jeeli kolejka jest pustya, to Q[0]=Q[n+1]=0. 7

Implementacja bdzie poprawna wzgldem specyfikacji kolejki pod warunkiem, e w kolejce nie bdzie si znajdowało wicej liczb ni n (n+2 wielko tablicy Q) first(q) if (Q[0]!=0) return Q[Q[0]]; empty(q) if (Q[0]==0) return 1; else return 0; Q in(q, e) if (Q[n+1]<n) Q[n+1]++; Q[Q[n+1]]=e; else Q[1]=e; Q[n+1]=1; return Q; Q out(q) if (Q[0]!=0) if (Q[0]!=n) Q[0]++; else Q[0]=1; return Q; 8

Przykład 4 a) Kolejka jest pusta: empty(q)=1, first(q) warto nieokrelona, out(q) nie zmienia kolejki 0 0 b) in(q, 4) 1 4 1 c) in(q, 2), in(q, 6), in(q, 5), in(q, 8), in(q, 1), in(q, 3), in(q, 6), 1 4 2 6 5 8 1 3 6 8 first(q)=4, empty(q)=0 d) out(q) 2 2 6 5 8 1 3 6 8 first(q)=2, empty(q)=0 e) out(q) 3 6 5 8 1 3 6 8 f) in(q, 9) 3 9 6 5 8 1 3 6 1 9

6. Przykład zastosowania struktury kolejki Algorytm generowania wszystkich liczb pierwszych nie wikszych ni n. Idea sita Eratostenesa 1. Tworzymy kolejk P wszystkich liczb wikszych równych 2 i mniejszych bd równych od n. 2. Ustalamy liczb s = first(p). 3. Usuwamy z kolejki P pierwszy element i wstawiamy go do kolejki wynikowej W. 4. Usuwamy z kolejki P pozostałe elementy i wstawiamy je do kolejki pomocniczej Q, pod warunkiem, e nie dziel si przez s. 5. Zamieniamy kolejki P i Q. 6. Kroki 2, 3, 4, 5 powtarzamy, a do momentu, gdy kolejka P bdzie pusta. 7. Wynik, czyli liczby pierwsze mniejsze bd równe n znajduj si w kolejce W. Przykład 5 n=15 1. P: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 W: 2. P: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 W: 2 10

3. P: 3, 5, 7, 9, 11, 13, 15 W: 2 4. P: 3, 5, 7, 9, 11, 13, 15 W: 2 5. itd. P: 5, 7, 11, 13 W: 2, 3 P: 5, 7, 11, 13 W: 2, 3 P: 7, 11, 13 W: 2, 3, 5... Ostatecznie: P: W: 2, 3, 5, 7, 11, 13 sito_eratostenesa P= ; Q= ; W= ; for (i=2; i<=n; i++) in(p, i); while (!empty(p)) s=first(p); in(w, s); while (!empty(p)) 11

d=first(p); if (d% s!=0) in(q, d); exchange(p, Q); //zamiana kolejek P oraz Q Odmian struktury kolejki jest kolejka priorytetowa. Struktura ta zostanie omówiona na wiczeniach. 8. Struktura słownika Nieformalnie Słownik jest struktur do reprezentacji zbioru danych i realizacji na tym zbiorze operacji wstawiania, wyszukiwania i usuwania elementów zbioru. Miejscem przechowywania pierwszego elementu słownika jest jego pocztek. Operacja wstawiania zachodzi o ile wstawiany element nie naley ju do słownika. Formalnie Słownik to system relacyjny E D, insert, search, delete E niepusty zbiór elementów (moliwych danych) D niepusty zbiór zwany zbiorem słowników Sygnatura operacji (parametry i wyniki operacji) słownika insert : D E D search : D E 0,1 delete : D E D 12

Nieformalna specyfikacja operacji słownika Zakładamy, e : e E, d D 1. Operacja search(d, e) zwraca warto 0 gdy element e nie naley do słownika, a 1 w przeciwnym przypadku. 2. Operacja insert(d, e) wstawia element e do słownika d, o ile operacja search(d, e) zwraca warto 0. 3. Operacja delete(d, e) usuwa element e ze słownika d, o ile operacja search(d, e) zwraca warto 1. Słownik moe by zaimplementowany na wiele rónych sposobów, np: w tablicy, na licie, na drzewie Niech n oznacza rozmiar słownika. Koszt implementacji tablicowej: a) tablica uporzdkowana T search max(n)= (logn), T insert max(n)= (n), T delete max(n)= (n) b) tablica nieuporzdkowana T search max(n)= (n), T insert max(n)= (n), T delete max(n)= (n) Koszt implementacji słownika na licie: T search max(n)= (n), T insert max(n)= (n), T delete max(n)= (n) Na kolejnym wykładzie poznamy implementacj słownika w strukturze drzew binarnych: BST i AVL. 13