ALGORYTMY I STRUKTURY DANYCH



Podobne dokumenty
Algorytmy i Struktury Danych

Teoretyczne podstawy informatyki

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

Teoretyczne podstawy informatyki

Sortowanie bąbelkowe

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

Sortowanie. Bartman Jacek Algorytmy i struktury

Sortowanie - wybrane algorytmy

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

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

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

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

Wstęp do programowania

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:

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

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

TEORETYCZNE PODSTAWY INFORMATYKI

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

TEORETYCZNE PODSTAWY INFORMATYKI

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Struktury Danych i Złożoność Obliczeniowa

Podstawy Informatyki. Metody dostępu do danych

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Poprawność semantyczna

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

ALGORYTMY I STRUKTURY DANYCH

Programowanie w VB Proste algorytmy sortowania

Tadeusz Pankowski

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

Algorytmy i struktury danych

Algorytm selekcji Hoare a. Łukasz Miemus

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

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

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

Algorytmy i struktury danych

Algorytmy i struktury danych. wykład 5

Matematyka dyskretna - 7.Drzewa

Drzewa poszukiwań binarnych

Programowanie obiektowe i C++ dla matematyków

Laboratorium nr 7 Sortowanie

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

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Definicja pliku kratowego

Stos LIFO Last In First Out

Struktury danych: stos, kolejka, lista, drzewo

Luty 2001 Algorytmy (4) 2000/2001

Drzewa czerwono-czarne.

Analiza algorytmów zadania podstawowe

Drzewa podstawowe poj

Programowanie Proceduralne

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Strategia "dziel i zwyciężaj"

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

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:

Listy, kolejki, stosy

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

dr inż. Paweł Myszkowski Wykład nr 11 ( )

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Struktury Danych i Złożoność Obliczeniowa

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Drzewa AVL definicje

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

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

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

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Drzewa poszukiwań binarnych

Laboratoria nr 1. Sortowanie

Wykład 3. Drzewa czerwono-czarne

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Drzewo binarne BST. LABORKA Piotr Ciskowski

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Laboratoria nr 1. Sortowanie

Bazy danych. Andrzej Łachwa, UJ, /15

Lista liniowa dwukierunkowa

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Podstawy Informatyki. Sprawność algorytmów

Wykład 2. Poprawność algorytmów

Metodyki i Techniki Programowania 2

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

Algorytmy i Struktury Danych.

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

PODSTAWY INFORMATYKI wykład 6.

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Algorytmy i Struktury Danych.

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.

. Podstawy Programowania 2. Algorytmy Quicksort i Heapsort. Arkadiusz Chrobot. 28 maja 2019

Transkrypt:

ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Drzewa zrównoważone, sortowanie drzewiaste Drzewo (dowolne) jest zrównoważone, jeżeli na wszystkich poziomach poza najniższym zawiera wszystkie możliwe węzły oraz liście na najniższym poziomie są ułożone od lewej strony. Własność: dla drzewa o liczbie węzłów równej n żadna droga od korzenia do któregokolwiek z węzłów nie jest dłuższa niż log 2 n. Zrównoważone drzewo binarne 2

Drzewa zrównoważone, sortowanie drzewiaste Drzewa częściowo uporządkowane (ang. Partially ordered tree) są to drzewa binarne spełniające następujące własności: Etykietami węzłów są elementy z przypisanymi priorytetami (jedno z pól rekordu opisującego węzeł drzewa); Element przechowywany w węźle musi mieć co najmniej tak duży priorytet, jak element znajdujący się w dzieciach tego węzła; Druga własność oznacza, że element w korzeniu dowolnego poddrzewa jest zawsze największym elementem tego poddrzewa. Własność ta nosi nazwę własności drzewa częściowo uporządkowanego; 3 Drzewa zrównoważone, sortowanie drzewiaste Przykład drzewa częściowo uporządkowanego. Korzeń Lewe poddrzewo Prawe poddrzewo 3 2 1

Drzewa zrównoważone, sortowanie drzewiaste Drzewo częściowo uporządkowane jest zrównoważone, jeżeli jest drzewem zrównoważonym. 2 1 3 0 Drzewa zrównoważone, sortowanie drzewiaste Zrównoważone drzewa częściowo uporządkowane można implementować za pomocą tablicy A zwanej stogiem (ang. heap). Cechy charakterystyczne: Korzeń znajduje się w A[1]; nie wykorzystujemy A[0]!!!; Po korzeniu zapisujemy w tablicy kolejne poziomy; Na każdym poziomie węzły porządkujemy od lewej do prawej; Zatem: lewe dziecko korzenia znajduje się w A[2], prawe dziecko korzenia w A[3] ; Ogólnie: lewe dziecko węzła zapisanego w A[i] znajduje się w A[2i], prawe dziecko w A[2i+1] (jeśli dzieci istnieją); 6

Drzewa zrównoważone, sortowanie drzewiaste przykład stogu w postaci drzewa i tablicy 2 1 3 0 1 2 3 10 2 1 3 0 7 Drzewa zrównoważone, sortowanie drzewiaste Przykład 1 Napisać program, który dodaje nowy element stogu oraz umieszcza go na właściwej dla niego pozycji.

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - rozwiązanie void swap(int A[], int i, int j) /*wymienia pozycjami elementy tablicy */ { int temp; temp = A[i]; A[i] = A[j]; A[j] = temp; void bubbleup(int A[], int i) /*umieszcza nowy element stogu na właściwej dla niego pozycji*/ { if (i > 1 && A[i] > A[i/2]) { swap(a, i, i/2); bubbleup(a, i/2); Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie void insert(int A[], int x, int *pn) /*wstawia nowy element do stogu */ { (*pn)++; A[*pn] = x; bubbleup(a, *pn); 10

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie void insert(inta[], intx, int*pn) { (*pn)++; A[*pn] = x; bubbleup(a, *pn); 2 1 3 0 1 2 3 10 2 1 3 0 Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie void insert(inta[], intx, int*pn) { (*pn)++; A[*pn] = x; bubbleup(a, *pn); *(pn)= A[*pn]= bubbleup(a, ) 2 1 3 0 1 2 3 10 2 1 3 0 12

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie void bubbleup(int A[], int i) { if (i > 1 && A[i] > A[i/2]) { swap(a, i, i/2); bubbleup(a, i/2); 2 1 3 0 1 2 3 10 2 1 3 0 13 Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a, ) { if ( > 1 && A[] > A[/2]) { swap(a,, /2); bubbleup(a, /2); 2 1 3 0 1 2 3 10 2 1 3 0 1

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a, ) { if ( > 1 && A[] > A[/2]) { swap(a,, /2); bubbleup(a, /2); 2 1 3 0 1 2 3 10 2 1 3 0 1 Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a, ) { if ( > 1 && A[] > A[/2]) { swap(a,, /2); bubbleup(a, /2); 2 1 3 0 1 2 3 10 2 1 3 0 16

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a,) { if ( > 1 && A[] > A[/2]) { swap(a,, /2); bubbleup(a, /2); 2 1 3 0 1 2 3 10 2 1 3 0 17 Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a,) { if ( > 1 && A[] > A[/2]) { 7 swap(a,, /2); bubbleup(a, /2); 6 2 1 3 0 1 2 3 10 7 6 2 1 3 0 1

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a,) { if ( > 1 && A[] > A[/2]) { 7 swap(a,, /2); bubbleup(a, /2); 6 2 1 3 0 1 2 3 10 7 6 2 1 3 0 1 Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie bubbleup(a,2) { if (2 > 1 && A[2] > A[2/2]) { 7 swap(a, 2, 2/2); bubbleup(a, 2/2); 6 2 1 3 0 1 2 3 10 7 6 2 1 3 0 20

Drzewa zrównoważone, sortowanie drzewiaste przykład 1 - zobrazowanie 7 bubbleup(a,2) { if (2 > 1 && A[2] > A[2/2]) { swap(a, 2, 2/2); bubbleup(a, 2/2); /* KONIEC */ 6 2 1 3 0 1 2 3 10 7 6 2 1 3 0 21 Drzewa zrównoważone, sortowanie drzewiaste Przypomnijmy, że w drzewie częściowo uporządkowanym element maksymalny Max znajduje się ZAWSZE w korzeniu drzewa (czyli przy reprezentacji za pomocą tablicy A, znajduje się na pozycji 1, tzn. Max=A[1] ). Aby usunąć element maksymalny z takiego drzewa (stogu) postępujemy dwuetapowo: Najpierw zamieniamy pierwszy element drzewa z ostatnim (tzn. wykonujemy swap(a, 1, n), gdzie n to rozmiar tablicy) i zmniejszamy rozmiar tablicy, tzn. n=n-1; Przywracamy naruszoną (być może) w ten sposób własność drzewa przebąbelkowując w dół elementy zmodyfikowanego drzewa poczynając od korzenia; 22

Drzewa zrównoważone, sortowanie drzewiaste Przebąbelkowanie w dół polega na tym, że : sprawdzamy korzeń A[i] z jego dziećmi (A[2i], A[2i+1] ) ; jeżeli wartość w korzeniu A[i] jest mniejsza niż NAJWIĘKSZA z wartości jego dzieci, tzn. zachodzi A[i] < max {A[2i], A[2i+1], to zamieniamy miejscami wartość A[i] z wartością max {A[2i], A[2i+1] ; Wywołujemy rekurencyjnie naszą funkcję bąbelkowania w dół podając jako korzeń 2i lub 2i+1 (w zależności od tego, na której z tych pozycji była wartość większa); Postępowanie kontynuujemy dopóki nie trafimy na koniec drzewa (tablicy A). 23 Drzewa zrównoważone, sortowanie drzewiaste Sortowanie drzewiaste (przez kopcowanie, ang. heapsort) dowolnej tablicy A składa się z dwóch etapów: Najpierw tablicę A przetwarzamy na tablicę reprezentującą stóg (patrz Zadanie ) po wykonaniu A reprezentuje stóg; Następnie w pętli od 1..n wywołujemy funkcję usuwania ze stogu A elementu największego; Po wykonaniu ostatniego punktu tablica A posortowana jest rosnąco! DLACZEGO??? - zadanie domowe 2

Dziękuję za uwagę