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

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

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

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

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki

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

Algorytmy i Struktury Danych

Struktury danych: stos, kolejka, lista, drzewo

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

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

ALGORYTMY I STRUKTURY DANYCH

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Kolejka Priorytetowa. Algorytmy i Struktury Danych. (c) Marcin Sydow. Kolejka priorytetowa. implementacja. Kopiec Binarny. Tablicowa.

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

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

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

Porządek symetryczny: right(x)

Matematyka dyskretna - 7.Drzewa

TEORETYCZNE PODSTAWY INFORMATYKI

Przykładowe B+ drzewo

TEORETYCZNE PODSTAWY INFORMATYKI

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

Tadeusz Pankowski

Stos LIFO Last In First Out

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

Algorytmy sortujące i wyszukujące

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 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.

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

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Teoretyczne podstawy informatyki

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

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

Podstawy Informatyki. Wykład 6. Struktury danych

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

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

Sortowanie bąbelkowe

Struktury Danych i Złożoność Obliczeniowa

Drzewa poszukiwań binarnych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Sortowanie - wybrane algorytmy

Algorytmy i struktury danych. wykład 5

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Algorytmiczna teoria grafów

Algorytmy i Struktury Danych

Tabela wewnętrzna - definicja

Poprawność semantyczna

Wstęp do Programowania potok funkcyjny

Algorytmy i Struktury Danych, 9. ćwiczenia

Zad. 3: Układ równań liniowych

Wstęp do programowania

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych.

Lista liniowa dwukierunkowa

Sortowanie. Bartman Jacek Algorytmy i struktury

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

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

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

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

SIMR 2016/2017, Analiza 2, wykład 1, Przestrzeń wektorowa

ALGORYTMY I STRUKTURY DANYCH

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Dynamiczne struktury danych

Drzewa wyszukiwań binarnych (BST)

ZASADY PROGRAMOWANIA KOMPUTERÓW

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

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

Definicja pliku kratowego

Algorytmy i struktury danych

Zestaw C-11: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp i.h)!!! Zad. 1: Zad. 2:

Drzewa podstawowe poj

Złożoność algorytmów. Wstęp do Informatyki

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Programowanie obiektowe i C++ dla matematyków

Wykład 3. Drzewa czerwono-czarne

Układy równań liniowych. Ax = b (1)

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

ALGORYTMY I STRUKTURY DANYCH

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

Oracle PL/SQL. Paweł Rajba.

Programowanie obiektowe i C++ dla matematyków

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytmy Równoległe i Rozproszone Część II - Sieci porównujące

Matematyczne Podstawy Informatyki

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Podstawy Informatyki. Metody dostępu do danych

1. Analiza algorytmów przypomnienie

Algorytmy funkcjonalne i struktury danych

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Transkrypt:

ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu max, X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu min, własność lewostronnego wypełnienia kopca definicja wskaźnikowa struktury typu węzeł kopca w pseudokodzie typedef struct HeapNode Heap; struct HeapNode { element elem; struct HeapNode left, right, parent, next; }; podstawowe operacje dla kopca binarnego: EMP T Y : H {T URE, F ALSE}, sprawdzenie czy struktura jest pusta, INSERT : H E H, wstawienie elementu do struktury, M IN : H E, obejrzenie minimalnego elementu przechowywanego w strukturze typu min, DELM IN : H H, usunięcie minimalnego elementu ze struktury typu min, M AX : H E, obejrzenie maksymalnego elementu przechowywanego w strukturze typu min, 1

DELM AX : H H, usunięcie maksymalnego elementu ze struktury typu min, gdzie H jest przestrzenią kopców binarnych, E zbiorem etykiet wierzchołków kopca binarnego, złożoność czasowa podstawowych operacji n-elementowego kopca binarnego: A (EMPTY(), n) = O (1), W (EMPTY(), n) = O (1), A (INSERT(), n) = O (log (n)), W (INSERT(), n) = O (log (n)), A (MIN(), n) = O (1), W (MIN(), n) = O (1), A (DELMIN(), n) = O (log (n)), W (DELMIN(), n) = O (log (n)), A (MAX(), n) = O (1), W (MAX(), n) = O (1), A (DELMAX(), n) = O (log (n)), W (DELMAX(), n) = O (log (n)). dodatkowe operacje dla kopca binarnego: typu min oraz typu max: DELET E : H E H, usunięcie elementu ze struktury, MEMBER : H E {T URE, F ALSE}, sprawdzenie, czy dany element jest przechowywany w strukturze, złożoność czasowa dodatkowych operacji n-elementowego kopca binarnego: Zadania A (DELETE(), n) = O (n), W (DELETE(), n) = O (n), A (MEMBER(), n) = O (n), W (MEMBER(), n) = O (n), 1. Dany jest kopiec H o n parami różnych elementach, gdzie n > 2, którego korzeń zawiera element maksymalny. (a) Jaki jest koszt znalezienia k-tego co do wielkości elementu w kopcu H, jeżeli wolno stosować tylko operacje INSERT, DELMAX, MAX, EMP T Y (charakterystyczne dla kolejek priorytetowych)? (b) Zaproponuj funkcję element FIND_SECOND(Heap H) o złożoności O (1), która poda drugi co do wielkości element kopca H. Po zakończeniu procedury zawartość kopca powinna być taka sama jak przed jego rozpoczęciem. (c) Zaproponuj możliwie efektywną funkcję element FIND_MIN(Heap H) która zwróci minimalny element kopca H. Po zakończeniu funkcji, zawartość kopca powinna być taka sama jak przed jego rozpoczęciem. 2. Zaprojektuj możliwie efektywną funkcję Heap JOIN(Heap H1, Heap H2), która utworzy strukturę danych typu Heap, będącą rezultatem połączenia dwóch wejściowych kopców H1 oraz H2 typu max. Oszacuj złożoność czasową i pamięciową metody. 2

3. Zakładamy, że wierzchołek pewnego drzewa przeszukiwań binarnych T jest reprezentowany przez strukturę danych typu Tree, a wierzchołek pewnego kopca H przez strukturę danych typu Heap. Zaprojektuj procedury oraz Heap TRANSFORM_MIN(Tree T) Heap TRANSFORM_MAX(Tree T) tworzące odpowiednio kopiec niemalejący i kopiec nierosnący z drzewa wejściowego T. Wynikiem działania obu procedur ma być korzeń kopca nierosnącego bądź niemalejącego. (a) Oszacuj złożoność swoich rozwiązań względem liczby wierzchołków drzewa przeszukiwań binarnych. (b) Czy twoje procedury są wrażliwe na kształt drzewa T (tj. czy ich czas działania zależy od stopnia zrównoważenia struktury). Przy konstruowaniu rozwiązań można korzystać z dowolnych liniowych struktur danych. 4. Rozważmy drzewo genealogiczne T, będące elementem przestrzeń drzew genealogicznych T, rodu państwa Algorytmicznych, który w chwili obecnej składa się z pewnej skończonej liczby rodzin F [1], F [2],.... Każda z nich (tj. rodzina F [i]) stanowi zbiór pewnej liczby osób (rodziców oraz dzieci) F [i] [1], F [i] [2],..., o parami różnym wieku. Każdy ze zbiorów F [i] może zmieniać swój stan ze względu na przyjście na świat nowego dziecka bądź śmierć najstarszej osoby w rodzinie. Dodatkowo, w chwili kiedy dziecko F [i] [j] z danej rodziny F [i] wchodzi w związek małżeński (oczywiście z osobą spoza rodu państwa Algorytmicznych), wtedy formalnie jest ono usuwane z rodziny F [i] i tworzy własną rodzinę F [k] dodawaną do rozważanego drzewa rodowego. Zakładamy dalej, że każdy członek rodu państwa Algorytmicznych reprezentowany jest przez strukturę Member postaci struct Member { int index, age; }; gdzie zmienne index i age definiują kolejno indeks rozważanej osoby w rodzinie F [i] oraz jej wiek. Nestorem rodziny F [i] nazywamy osobę najstarszą wiekiem spośród osób F [i] [1], F [i] [2],.... Nestorem rodu nazywamy nestora nestorów rodzin F [1], F [2],.... Zaprojektuj strukturę danych typu GenTree, która będzie w możliwie efektywny sposób implementowała drzewo rodowe T państwa Algorytmicznych oraz pozwoli na wykonanie następujących operacji: N EW _CHILD : T N T, gdzie wywołanie funkcji ma postać NEW_CHILD(T,i) operacja wstawiania nowego dziecka do wybranej rodziny F [i], złożoność O (log (n))+ O (log (m)), dla n oraz m będących kolejno aktualną liczbą rodzin rodu Algorytmicznych, oraz licznością rodziny, w której pojawia się nowe dziecko, DIE : T N T, gdzie wywołanie funkcji ma postać DIE(T,i) operacja usunięcia najstarszej osoby z wybranej rodziny F [i], złożoność O (log (n)) + O (log (m)), dla n oraz m będących kolejno aktualną liczbą rodzin rodu Algorytmicznych, oraz licznością rodziny, z której usuwamy najstarszą osobę, 3

NEW _F AMILY : T N N T, gdzie wywołanie funkcji ma postać NEW_FAMILY(T,i,j) operacja utworzenia nowej rodziny w drzewie rodu państwa Algorytmicznych, którą zakłada osoba indeksem j z rodziny F [i] (tj. osoba F [i] [j]), złożoność O (log (n)) + O (m), dla n oraz m będących kolejno aktualną liczbą rodzin rodu Algorytmicznych, oraz licznością rodziny, z której pochodzi osoba wchodząca w związek małżeński, F AM ILY _N EST OR : T N N, gdzie wywołanie funkcji ma postać FAMILY_NESTOR(T,i) operacja pobrania wieku nestora rodziny F [i], złożoność O (log (n)), dla n będącego liczbą rodzin rodu Algorytmicznych, NEST OR : T N, gdzie wywołanie funkcji ma postać NESTOR(T) operacja pobrania wieku nestora rodu państwa Algorytmicznych, złożoność O (1), INCREMENT : T N, gdzie wywołanie funkcji ma postać INCREMENT(T) operacja zwiększenia wieku każdego z członków rodu o jeden rok oraz określenia aktualnej liczby k członków rodu, złożoność O (k), SIZE : T N N, gdzie wywołanie funkcji ma postać SIZE(T,i) operacja określenia liczby osób aktualnie tworzących rodzinę F [i], złożoność O (n), dla n będącego liczbą rodzin rodu Algorytmicznych. Przy rozwiązaniu można korzystać z dowolnych standardowych struktur danych (tj. list, stosów, kolejek, drzew, kopców) wraz z przynależnymi im operacjami. Zadanie o dobrze ułożonych macierzach (do domu) Rozważmy macierz kwadratową M, nie koniecznie w pełni wypełnioną, rozmiaru n kolumn na n wierszy, której elementy są liczbami naturalnymi. Powiemy, że macierz ta jest dobrze ułożona, jeżeli każda kolumna macierzy czytana od góry do dołu, oraz każdy wiersz macierzy czytany od strony lewej do prawej, stanowi wektor liczb posortowanych w kolejności niemalejącej. W przypadku kiedy dany element macierzy M [c] [r] jest nieokreślony, jego miejsce zajmuje symbol, np.: macierz dobrze ułożona w pełni wypełniona rozmiaru 4 4: 1 2 7 10 M = 3 5 8 11 5 6 9 12, 9 13 14 19 macierz dobrze ułożona nie w pełni wypełniona rozmiaru 4 4: 1 2 7 10 M = 3 5 8 11 4 6, 9 Potraktujmy dalej macierz M, rozmiaru n n, jako multizbiór elementów ze zbioru liczb naturalnych, mocy co najwyżej n 2. Definiujemy następujące funkcje, których elementem dziedziny jest przestrzeń macierzy dobrze ułożonych M: INSERT : (M N N) M, gdzie INSERT (M, n, k) = M, oraz: M = n 2 M = M, M < n 2 M = M {k}, MIN : (M N) N, gdzie MIN (M, n) = k, oraz: 4

M > 0 k = min {i = 1, 2,..., M : M [i]}, M = 0 k = wartość nieokreślona, DELMIN : (M N) M, gdzie DELMIN (M, n) = M, oraz: M > 0 M = M \ {k}, dla k = MIN (M, n), M = 0 M = M, XOR : (M N M N) M, gdzie XOR (M1, n1, M2, n2) = M, oraz: M = M1 M2, M jest macierzą rozmiaru (n1 + n2) (n1 + n2). Zaprojektuj funkcje int INSERT(int M[][], int n, int k), int MIN(int M[][], int n), int [] DELMIN(int M[][], int n), int [][] XOR(int M1[][], int n1, int M2[][], int n2), implementujące w możliwie efektywny sposób kolejne operacje IN SERT, M IN, DELM IN, XOR, zdefiniowane dla przestrzeni macierzy dobrze ułożonych M. Zadbaj o następujące złożoności czasowe rozwiązania: W (INSERT(), n) = O (n), W (MIN(), n) = O (1), W (DELMIN(), n) = O (n), ( W (XOR(), n1, n2) = O (n1 + n2) 2). 5