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

Podobne dokumenty
Dynamiczne struktury danych

Listy, kolejki, stosy

Struktury danych: stos, kolejka, lista, drzewo

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

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


ALGORYTMY I STRUKTURY DANYCH

Dynamiczne struktury danych

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

Algorytmy i Struktury Danych.

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

Struktury dynamiczne

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

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

Stos LIFO Last In First Out

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

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

Wstęp do programowania

Porządek symetryczny: right(x)

Drzewa wyszukiwań binarnych (BST)

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:

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

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

Teoretyczne podstawy informatyki

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

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

Struktury Danych i Złożoność Obliczeniowa

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

Kurs programowania. Wykład 9. Wojciech Macyna

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

Algorytmy i struktury danych. wykład 5

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)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wstęp do Programowania potok funkcyjny

Algorytm selekcji Hoare a. Łukasz Miemus

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

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych.

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

Drzewa poszukiwań binarnych

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

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

Algorytmy i Struktury Danych.

Teoretyczne podstawy informatyki

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Teoretyczne podstawy informatyki

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

Algorytmy i Struktury Danych.

Podstawowe struktury danych

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

Podstawy informatyki 2

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

Java Collections Framework

Algorytmy i Struktury Danych.

Wstęp do Programowania potok funkcyjny

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

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

Wykład 4. Klasa List Kolejki Stosy Słowniki

Programowanie obiektowe i C++ dla matematyków

Rekurencyjne struktury danych

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

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych.

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

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Algorytmy i Struktury Danych.

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

Podstawy Programowania. Listy i stosy

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

Programowanie i struktury danych

Wykład 6. Dynamiczne struktury danych

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

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

Programowanie obiektowe

Programowanie i struktury danych 1 / 44

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

int tab_a [ 2 ] [ 3 ];

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Struktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.

Paradygmaty programowania. Paradygmaty programowania

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Lista liniowa dwukierunkowa

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

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

Programowanie obiektowe

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

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

Sortowanie przez scalanie

Struktury. Przykład W8_1

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

Sztuczna Inteligencja i Systemy Doradcze

Transkrypt:

Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy #stos, kolejki 2 Drzewo decyzyjne A[1]:A[2] > A[2]:A[3] A[1]:A[3] 1,2,3 A[1]:A[3] 2,1,3 A[2]:A[3] 1,3,2 3,1,2 2,3,1 3,2,1 3 1

Minimum i maksimum min lub max -liniowe przeszukanie O(n) #n-1 porównań min i max linowe przeszukanie O(n) #2n-2 porównań #3(n/2) -porówań 4 Wybór i tego elementu Algorytm Hoare a # oczekiwany czas liniowy Algorytm magicznych piątek # pesymistyczny czas liniowy 1. podziel n elementów na zbiory 5 elementowe 2. wyznacz medianę z każdej piątki 3. wywołaj rekurencyjnie dla znalezienia mediany median 4. podziel tablicę względem znalezionej mediany 5. wywołaj rekurencyjnie dla mniejszych lub większych elementów 5 Warstwa implementacji Możliwości # tablica # wskaźniki (odsyłacze, pointery) # obiekty (referencje) Deklaracje # statyczne # dynamiczne Różnice # szybkość # rodzaje pamięci # moment alokacji 6 2

Tablica Tablica statyczna Tablica dynamiczna #realokacja Złożoność # O(1) <-> O(n) Indeks to liczby całkowite -> arytmetyka na pointerach + rzutowanie Ograniczenia #deklaracja #dostępna pamięć 7 int taba[10]; int * tabb = (int*)malloc( 10 * sizeof (int) ); int * tabc = new int[10]; tabb = (int*)realloc( tabb, 20 * sizeof (int) ); taba[0] = *(taba + 0); free( tabb ); delete []tabc; Wskaźniki Lista (łańcuch odsyłaczowy) # jednokierunkowa # dwukierunkowa # cykliczna # z wartownikami # drzewa Złożoność # listy O(1) <-> O(n) # drzewa O(1) <-> O(log(n)) <-> O(n) Ograniczenia # dostępna pamięć 9 3

Wskaźniki 10 Wskaźniki 11 Wskaźniki - wartownik 12 4

void foo( pele * head )... void foo( pele ** head )... void foo( pele *& head ) pele * foo( pele * head )... // tail, root void foo( pele * firstele )... while( ele )... while( ele->next )... if ( ele && ele->key ==??? while ( ele && ele->key ==??? if ( ele && ele->next... Drzewa 14 bool foo( pnode * node ) if ( node->key ==??? if ( node->left ) return foo( node->left ); if ( node->right ) return foo( node->right ); if ( node->left ) i = foo( node->left ); if ( node->right ) i += foo( node->right ); 5

Drzewo? 16 Drzewo? 17 Inne 18 6

Inne 19 Inne 20 Warstwa abstrakcji Abstrakcyjne struktury danych struktury # tablica lub wskaźniki #dodatkowe elementy indeks maksymalny, indeks bieżący głowa listy, ogon, element wyróżniony Interfejs struktury # metody, funkcje, operatory #zachowanie 21 7

Warstwa abstrakcji Rodzaje metod # zapytania # operacje modyfikujące Dane i klucz Rozpatrywanie złożoności dopiero przy implementacji jednaj struktury przy pomocy zaimplementowanego interfejsu innej struktury # kolejka priorytetowa -> kopiec -> tablica 22 Metody uniwersalne #search( key ), search( x ) #insert( x ) #delete( x ) #min() #max() #successor( x ) #predecessor( x ) 23 Tablica # set # get # size # bezpośredni dostęp do każdego elementu, określona długość(?) # tablica # lista jedno (dwu) kierunkowa 24 8

Lista jednokierunkowa # insert # search # delete # isempty # next # podstawowa cecha to brak ograniczenia na ilość elementów # tablica # lista jednokierunkowa 25 Lista 7 0 1 2 3 4 5 6 7 next 2 * 1 4 key 34 22 12 56 prev 4 1 7 * 6 34 * 12 22 3 * 12 6 26 Stos (LIFO) # push # pop # isempty # element ostatnio położony jest pierwszy ściągany, kładziemy elementy na wierzchołek stosu i z niego ściągamy # tablica # lista jednokierunkowa 27 9

Kolejka (FIFO) # isempty # put(insert) # get(extract) # element ostatnio położony musi czekać na swoją kolej, pobieramy elementy z początku, a wstawiamy na koniec # tablica # lista jednokierunkowa, dwukierunkowa 28 Kolejka dwukierunkowa (talia) # isempty # putfirst, -last(insert, head-tail) # getfirs, -last(extract, head-tail) # wstawiamy na początek i na koniec, pobieramy elementy z początku lub z końca # tablica # lista jednokierunkowa, dwukierunkowa 29 Zbiór # add # delete # isin # union # wszystkie elementy są różne, każdy element występuje jedne raz # tablica # lista ASD 05 30 10

Zbiory rozłączne # makeset # union # findset # zbiór jest reprezentowany przez reprezentanta, reprezentantem jest korzeń, element zbioru wskazuje na swojego ojca # prosta implementacja odsyłaczowa # drzewa ukorzenione # drzewa ukorzenione + Heurystyki łączenie wg rangi kompresja ścieżki ASD 05 31 MakeSet(X x) x.parent = x; x.rank = 0; Union(X x,x y) Link( FindSet(x), FindSet(y) ); Link(x,y) if (x.rank > y.rank) y.parent = x; else x.parent = y; if (x.rank == y.rank ) y.rank++; X FindSet( X x ) if ( x.parent!= x ) x.parent = FindSet(x.parent); return x.parent; Kolejka priorytetowa # put (insert) # get (extract) # isempty # element wstawiamy nie na koniec, ale w zależności od key # lista O(n) # tablica posortowana O(n) # kopiec O(log(n)) ASD 05 33 11

void heap(int i) int l = 2 * i + 1; int r = 2 * i + 2; int maxi,t; if ( l < max && A[l] > A[i] ) // MAX maxi = l; else maxi = i; if ( r < max && A[r] > A[maxi] ) maxi = r; if ( maxi!= i ) t = A[i]; A[i] = A[maxi]; A[maxi] = t; heap( maxi ); void heap(int i) while(1) int l = 2 * i + 1; int r = 2 * i + 2; int maxi,t; if ( l < max && A[l] > A[i] ) maxi = l; else maxi = i; if ( r < max && A[r] > A[maxi] ) maxi = r; if ( maxi!= i ) t = A[i]; A[i] = A[maxi]; A[maxi] = t; i = maxi; else break; int put( int ele ) if ( max + 1 == MAX ) // == return error; //??? int i = max++; while( i > 0 && A[(i-1)/2] < ele ) A[i] = A[(i-1)/2]; i = (i-1)/2; A[i] = ele; 12

class Heap protected: data* A; int max; public: data get(); void put(data a); Heap(); ~Heap(); data Heap::get() if ( max == 0 ) // return error;??? throw errorheapemptyexception; data ret = A[0]; A[0] = A[--max]; heap( 0 ); return data; Jeszcze o kopcu Kopiec binarny Kopiec rzędu d #d-arny #zamiast 2 synów, każdy węzeł ma ich d Złożoność struktury #O( log(n)) == O( log d (n)) # szybkość vs łatwość implementacji ASD 05 39 13

Pytania? KONIEC 40 14