Algorytmy i struktury danych

Podobne dokumenty
Elementy teorii grafów, sposoby reprezentacji grafów w komputerze

Elementy teorii grafów, sposoby reprezentacji grafów w komputerze

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

c Marcin Sydow Spójno± Grafy i Zastosowania Grafy Eulerowskie 2: Drogi i Cykle Grafy Hamiltonowskie Podsumowanie

10a: Wprowadzenie do grafów

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

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

Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2

Teoria grafów i jej zastosowania. 1 / 126

Podstawowepojęciateorii grafów

Teoria grafów i sieci 1 / 58

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA. W obu podpunktach zakªadamy,»e kolejno± ta«ców jest wa»na.

Minimalne drzewa rozpinaj ce

Egzaminy i inne zadania. Semestr II.

Podstawowe algorytmy grafowe i ich zastosowania

Listy i operacje pytania

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

Porządek symetryczny: right(x)

c Marcin Sydow Podstawy Grafy i Zastosowania Kod Prüfera 3: Drzewa Drzewa ukorzenione * Drzewa binarne Zastosowania Podsumowanie

Grafy i Zastosowania. 1: Wprowadzenie i poj cia podstawowe. c Marcin Sydow. Wprowadzenie. Podstawowe poj cia. Operacje na grafach.

Podstawowe algorytmy grafowe i ich zastosowania

Drzewa Gomory-Hu Wprowadzenie. Drzewa Gomory-Hu. Jakub Š cki. 14 pa¹dziernika 2009

Minimalne drzewo rozpinaj ce

c Marcin Sydow Wst p Grafy i Zastosowania Wierzchoªki 8: Kolorowanie Grafów Mapy Kraw dzie Zliczanie Podsumowanie

Wykªad 1. Wprowadzenie do teorii grafów

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

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

Egzaminy i inne zadania. Semestr II.

Skrypt do Algorytmów i Struktur Danych

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

Mosty królewieckie, chi«ski listonosz i... kojarzenie maª»e«stw

Algorytmy i struktury danych

Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow. Digrafy. Porz dki cz ±ciowe * Euler i Hamilton. Turnieje

Analiza algorytmów zadania podstawowe

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

W poprzednim odcinku... Podstawy matematyki dla informatyków. Relacje równowa»no±ci. Zbiór (typ) ilorazowy. Klasy abstrakcji

Drzewa poszukiwań binarnych

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

Sortowanie przez scalanie

Algorytmy zwiazane z gramatykami bezkontekstowymi

Algorytmy i struktury danych. wykład 5

c Marcin Sydow Grafy i Zastosowania BFS DFS 4: Przeszukiwanie Grafów (BFS, DFS i zastosowania) DFS nieskierowane DFS skierowane Podsumowanie

Najkrótsze drogi w grafach z wagami

Teoria grafów i sieci 1 / 188

Twierdzenie Wainera. Marek Czarnecki. Warszawa, 3 lipca Wydziaª Filozoi i Socjologii Uniwersytet Warszawski

Minimalne drzewo rozpinaj ce

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Algorytmy i Struktury Danych.

12: Znajdowanie najkrótszych ±cie»ek w grafach

Najkrótsze drogi w grafach z wagami

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

Rekurencyjne struktury danych

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

c Marcin Sydow Planarno± Grafy i Zastosowania Tw. Eulera 7: Planarno± Inne powierzchnie Dualno± Podsumowanie

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

Listy, kolejki, stosy

Lab. 02: Algorytm Schrage

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska

ELEMENTARNA TEORIA LICZB. 1. Podzielno±

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

Metodydowodzenia twierdzeń

Metoda tablic semantycznych. 1 Metoda tablic semantycznych

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Geometria Algebraiczna

Matematyka dyskretna dla informatyków

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

Szukanie najkrótszych dróg z jednym ródłem

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

Drzewa wyszukiwań binarnych (BST)

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Sortowanie bąbelkowe

Wektory w przestrzeni

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

Programowanie funkcyjne. Wykªad 13

Zdzisªaw Dzedzej, Katedra Analizy Nieliniowej pok. 611 Kontakt:

Drzewa czerwono-czarne.

1 Granice funkcji wielu zmiennych.

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

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

Wykªad 4. Funkcje wielu zmiennych.

Algorytmy i Struktury Danych, 9. ćwiczenia

r = x x2 2 + x2 3.

STRUKTURY DANYCH. dane wej±ciowe problemu, ewentualne dane po±rednie, dane wynikowe (czyli rozwi zanie problemu).

Grafy i Zastosowania. 5: Drzewa Rozpinaj ce. c Marcin Sydow. Drzewa rozpinaj ce. Cykle i rozci cia fundamentalne. Zastosowania

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Temat: Problem najkrótszych cieek w grafach waonych, cz. I: Algorytmy typu label - setting.

Programowanie i struktury danych 1 / 44

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Strategia "dziel i zwyciężaj"

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Egzaminy i inne zadania. Semestr II.

1 Bª dy i arytmetyka zmiennopozycyjna

Drzewa poszukiwań binarnych

Programowanie wspóªbie»ne

Analiza algorytmów zadania podstawowe

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Grafy i Zastosowania. 11: Twierdzenia Minimaksowe. c Marcin Sydow. Wst p: Tw. Halla. Dualno± Zbiory niezale»ne. Skojarzenia c.d.

Transkrypt:

Algorytmy i struktury danych Cz ± druga Prowadz cy: dr Andrzej Mróz, Wydziaª Matematyki i Informatyki, Uniwersytet Mikoªaja Kopernika 1 / 82

Rekurencja Procedura (funkcja) rekurencyjna wywoªuje sam siebie. Jest to odpowiednik indukcji w matematyce. 2 / 82

Rekurencja Procedura (funkcja) rekurencyjna wywoªuje sam siebie. Jest to odpowiednik indukcji w matematyce. Najprostszy schemat procedury rekurencyjnej: procedure nazwa(...);... begin nazwa(...); end; 2 / 82

Rekurencja Procedura (funkcja) rekurencyjna wywoªuje sam siebie. Jest to odpowiednik indukcji w matematyce. Najprostszy schemat procedury rekurencyjnej: procedure nazwa(...);... begin nazwa(...); end; Najprostszy schemat funkcji rekurencyjnej: function nazwa(...) : typ-danych;... begin nazwa := nazwa(...); end; 2 / 82

Rekurencja Procedura (funkcja) rekurencyjna wywoªuje sam siebie. Jest to odpowiednik indukcji w matematyce. Najprostszy schemat procedury rekurencyjnej: procedure nazwa(...);... begin nazwa(...); end; Najprostszy schemat funkcji rekurencyjnej: function nazwa(...) : typ-danych;... begin nazwa := nazwa(...); end; Uwaga. Nale»y zadba, aby procedura (funkcja) rekurencyjna nie tworzyªa niesko«czonej p tli. 2 / 82

Rekurencja Przykªad: przypomnijmy,»e silni liczby n deniujemy wzorem: n! = { 1, n = 0, n i=1 i, n 1. 3 / 82

Rekurencja Przykªad: przypomnijmy,»e silni liczby n deniujemy wzorem: n! = { 1, n = 0, n i=1 i, n 1. Silni mo»emy równowa»nie zdeniowa w sposób indukcyjny (rekurencyjny): n! = { 1, n = 0, n (n 1)!, n 1. 3 / 82

Rekurencja Kod funkcji realizuj cej obliczanie silni w sposób rekurencyjny mo»e wygl da nast puj co: function silnia(n : Integer) : Integer; begin if n = 0 then silnia := 1 else silnia := silnia(n 1) n; end; 4 / 82

Rekurencja Innym typowym przykªadem rekurencji w matematyce jest ci g Fibonacciego {f n } n=0 zdeniowany: 0, n = 0, f n = 1, n = 1, f n 1 + f n 2, n 2. 5 / 82

Rekurencja Innym typowym przykªadem rekurencji w matematyce jest ci g Fibonacciego {f n } n=0 zdeniowany: 0, n = 0, f n = 1, n = 1, f n 1 + f n 2, n 2. function b(n : Integer) : Integer; begin if n = 0 then b := 0 else if n = 1 then b := 1 else b := b(n 1) + b(n 2); end; 5 / 82

Rekurencja - wady Procedury rekurencyjne mimo,»e s eleganckie i ªatwe w zaprogramowaniu, czasami s maªo wydajne. 6 / 82

Rekurencja - wady Procedury rekurencyjne mimo,»e s eleganckie i ªatwe w zaprogramowaniu, czasami s maªo wydajne. Prze±led¹my, jakie obliczenia s wykonywane przez funkcj b dla n = 4: b(4) = b(3) + b(2) = (b(2) + b(1)) + (b(1) + b(0)) = ((b(1) + b(0)) + b(1)) + (b(1) + b(0)) = ((1 + 0) + 1) + (1 + 0) = 3 6 / 82

Rekurencja - wady Procedury rekurencyjne mimo,»e s eleganckie i ªatwe w zaprogramowaniu, czasami s maªo wydajne. Prze±led¹my, jakie obliczenia s wykonywane przez funkcj b dla n = 4: b(4) = b(3) + b(2) = (b(2) + b(1)) + (b(1) + b(0)) = ((b(1) + b(0)) + b(1)) + (b(1) + b(0)) = ((1 + 0) + 1) + (1 + 0) = 3 Zauwa»my,»e warto± b(2) jest wyliczana dwa razy. Wraz ze wzrostem n liczba nadmiarowych oblicze«wzrasta drastycznie. 6 / 82

Rekurencja - wady Procedury rekurencyjne mimo,»e s eleganckie i ªatwe w zaprogramowaniu, czasami s maªo wydajne. Prze±led¹my, jakie obliczenia s wykonywane przez funkcj b dla n = 4: b(4) = b(3) + b(2) = (b(2) + b(1)) + (b(1) + b(0)) = ((b(1) + b(0)) + b(1)) + (b(1) + b(0)) = ((1 + 0) + 1) + (1 + 0) = 3 Zauwa»my,»e warto± b(2) jest wyliczana dwa razy. Wraz ze wzrostem n liczba nadmiarowych oblicze«wzrasta drastycznie. wiczenie: napisz procedur licz c n-ty wyraz ci gu Fibonacciego bez wykorzystania rekurencji. Wskazówka: wystarczy jedna p tla przebiegaj ca od 2 do n i wykorzystuj ca dwie pomocnicze zmienne które w ka»dym kroku przechowuj (i 1) i (i 2) wyraz ci gu. 6 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. 7 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Sortrek(A, n) begin if n > 1 then Sortrek(A, n-1); wstaw A[n] w odpowiednie miejsce A[1..n 1]; end; Sortrek(A, n); 7 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Sortrek(A, n) begin if n > 1 then Sortrek(A, n-1); wstaw A[n] w odpowiednie miejsce A[1..n 1]; end; Koszt T (n) Sortrek(A, n); 7 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Koszt Sortrek(A, n) T (n) begin if n > 1 then Sortrek(A, n-1); 1 + T (n 1) wstaw A[n] w odpowiednie miejsce A[1..n 1]; end; Sortrek(A, n); 7 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Koszt Sortrek(A, n) T (n) begin if n > 1 then Sortrek(A, n-1); 1 + T (n 1) wstaw A[n] w odpowiednie miejsce A[1..n 1]; O(n) end; Sortrek(A, n); 7 / 82

Sortowanie przez wstawianie rekurencyjnie Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Koszt Sortrek(A, n) T (n) begin if n > 1 then Sortrek(A, n-1); 1 + T (n 1) wstaw A[n] w odpowiednie miejsce A[1..n 1]; O(n) end; Sortrek(A, n); Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 1 + T (n 1) + O(n), n > 1. 7 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = T (n 2)+(n 1)+n = 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = T (n 2)+(n 1)+n = T (n 3)+(n 2)+(n 1)+n 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = T (n 2)+(n 1)+n = T (n 3)+(n 2)+(n 1)+n =... = 1 + 2 +... + (n 2) + (n 1) + n = 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = T (n 2)+(n 1)+n = T (n 3)+(n 2)+(n 1)+n =... = 1 + 2 +... + (n 2) + (n 1) + n = 1 + n 2 n 8 / 82

Sortowanie przez wstawianie rekurencyjnie Uproszczenie: T (n) = { 1, n = 1, T (n 1) + n, n > 1. Wówczas T (n) = T (n 1)+n = T (n 2)+(n 1)+n = T (n 3)+(n 2)+(n 1)+n =... = 1 + 2 +... + (n 2) + (n 1) + n = 1 + n 2 n = O(n2 ). 8 / 82

Dziel i zwyci»aj Projektowanie algorytmu metod dziel i zwyci»aj: 9 / 82

Dziel i zwyci»aj Projektowanie algorytmu metod dziel i zwyci»aj: Dziel: dzielimy problem na podproblemy. 9 / 82

Dziel i zwyci»aj Projektowanie algorytmu metod dziel i zwyci»aj: Dziel: dzielimy problem na podproblemy. Zwyci»aj: rozwi zujemy podproblemy rekurencyjnie lub, gdy s maªe i nie wymagaj u»ycia rekurencji stosujemy bezpo±rednie metody (dno rekursji). 9 / 82

Dziel i zwyci»aj Projektowanie algorytmu metod dziel i zwyci»aj: Dziel: dzielimy problem na podproblemy. Zwyci»aj: rozwi zujemy podproblemy rekurencyjnie lub, gdy s maªe i nie wymagaj u»ycia rekurencji stosujemy bezpo±rednie metody (dno rekursji). Poª cz: ª czymy rozwi zane podproblemy, aby otrzyma rozwi zanie caªego problemu. 9 / 82

Mergesort Mergesort = sortowanie przez scalanie tablicy A[1..n]. 10 / 82

Mergesort Mergesort = sortowanie przez scalanie tablicy A[1..n]. Dziel: dzielimy tablic na dwie podtablice A[1.. n ] 2 i A[ n + 1..n], np. 2 [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6]. 10 / 82

Mergesort Mergesort = sortowanie przez scalanie tablicy A[1..n]. Dziel: dzielimy tablic na dwie podtablice A[1.. n ] 2 i A[ n + 1..n], np. 2 [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6]. Zwyci»aj: sortujemy otrzymane podtablice u»ywaj c rekurencyjnie sortowania przez scalanie: [2, 4, 5, 6], [1, 2, 3, 6]. 10 / 82

Mergesort Mergesort = sortowanie przez scalanie tablicy A[1..n]. Dziel: dzielimy tablic na dwie podtablice A[1.. n ] 2 i A[ n + 1..n], np. 2 [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6]. Zwyci»aj: sortujemy otrzymane podtablice u»ywaj c rekurencyjnie sortowania przez scalanie: [2, 4, 5, 6], [1, 2, 3, 6]. Poª cz: ª czymy posortowane podtablice w jedn posortowan tablic (scalenie, merge): [1, 2, 2, 3, 4, 5, 6, 6]. 10 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] [5, 2], [4, 6], [1, 3], [2, 6] 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] [5, 2], [4, 6], [1, 3], [2, 6] [5], [2], [4], [6], [1], [3], [2], [6] dno 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] [5, 2], [4, 6], [1, 3], [2, 6] [5], [2], [4], [6], [1], [3], [2], [6] dno [2, 5], [4, 6], [1, 3], [2, 6] scal 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] [5, 2], [4, 6], [1, 3], [2, 6] [5], [2], [4], [6], [1], [3], [2], [6] dno [2, 5], [4, 6], [1, 3], [2, 6] scal [2, 4, 5, 6] [1, 2, 3, 6] scal 11 / 82

Mergesort Peªen przebieg rekurencji: [5, 2, 4, 6, 1, 3, 2, 6] [5, 2, 4, 6], [1, 3, 2, 6] [5, 2], [4, 6], [1, 3], [2, 6] [5], [2], [4], [6], [1], [3], [2], [6] dno [2, 5], [4, 6], [1, 3], [2, 6] scal [2, 4, 5, 6] [1, 2, 3, 6] scal [1, 2, 2, 3, 4, 5, 6, 6] scal 11 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. 12 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Mergesort(A, p, r) begin if p < r then begin q := (p + r)/2 ; Mergesort(A, p, q); Mergesort(A, q+1, r); Merge(A, p, q, r); end end; MergeSort(A, 1, n); Merge(A,p,q,r) scala podtablice A[p..q] i A[q + 1..r] w jedn A[p..r]. Implementacja wiczenie. 12 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Mergesort(A, p, r) begin if p < r then begin q := (p + r)/2 ; Mergesort(A, p, q); Mergesort(A, q+1, r); Merge(A, p, q, r); end end; Koszt dla p=1, r=n T (n) MergeSort(A, 1, n); Merge(A,p,q,r) scala podtablice A[p..q] i A[q + 1..r] w jedn A[p..r]. Implementacja wiczenie. 12 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Mergesort(A, p, r) begin if p < r then begin q := (p + r)/2 ; Mergesort(A, p, q); Mergesort(A, q+1, r); Merge(A, p, q, r); end end; Koszt dla p=1, r=n T (n) T (n/2) MergeSort(A, 1, n); Merge(A,p,q,r) scala podtablice A[p..q] i A[q + 1..r] w jedn A[p..r]. Implementacja wiczenie. 12 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Mergesort(A, p, r) begin if p < r then begin q := (p + r)/2 ; Mergesort(A, p, q); Mergesort(A, q+1, r); Merge(A, p, q, r); end end; Koszt dla p=1, r=n T (n) T (n/2) T (n/2) MergeSort(A, 1, n); Merge(A,p,q,r) scala podtablice A[p..q] i A[q + 1..r] w jedn A[p..r]. Implementacja wiczenie. 12 / 82

Mergesort Wej±cie: tablica (ci g) n liczb A[1..n], Wyj±cie: tablica A[1..n] skªadaj ca si z elementów tablicy wej±ciowej, ale uporz dkowana tak,»e A[1] A[2]... A[n]. Mergesort(A, p, r) begin if p < r then begin q := (p + r)/2 ; Mergesort(A, p, q); Mergesort(A, q+1, r); Merge(A, p, q, r); end end; Koszt dla p=1, r=n T (n) T (n/2) T (n/2) O(n) MergeSort(A, 1, n); Merge(A,p,q,r) scala podtablice A[p..q] i A[q + 1..r] w jedn A[p..r]. Implementacja wiczenie. 12 / 82

Mergesort Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 2T (n/2) + O(n), n > 1. 13 / 82

Mergesort Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 2T (n/2) + O(n), n > 1. Uproszczenie: T (n) = { 2, n = 2, 2T (n/2) + n, n = 2 k, k > 1. 13 / 82

Mergesort Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 2T (n/2) + O(n), n > 1. Uproszczenie: T (n) = { 2, n = 2, 2T (n/2) + n, n = 2 k, k > 1. Lemat. Rozwi zaniem powy»szego równania rekurencyjnego jest funkcja T (n) = n logn. 13 / 82

Mergesort Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 2T (n/2) + O(n), n > 1. Uproszczenie: T (n) = { 2, n = 2, 2T (n/2) + n, n = 2 k, k > 1. Lemat. Rozwi zaniem powy»szego równania rekurencyjnego jest funkcja T (n) = n logn. Dowód. Indukcja wzgl dem k 1. 13 / 82

Mergesort Funkcja kosztu speªnia równanie: { O(1), n = 1, T (n) = 2T (n/2) + O(n), n > 1. Uproszczenie: T (n) = { 2, n = 2, 2T (n/2) + n, n = 2 k, k > 1. Lemat. Rozwi zaniem powy»szego równania rekurencyjnego jest funkcja T (n) = n logn. Dowód. Indukcja wzgl dem k 1. Wniosek. Zªo»ono± algorytmu Mergesort wynosi Θ(n logn). 13 / 82

Teoria grafów Def. Graf niezorientowany (nieskierowany) = para G = (V, E) zbiorów sko«czonych: V nazywamy zbiorem wierzchoªków (w zªów) G, E { {u, v} : u, v V, u v} nazywamy zbiorem kraw dzi G. 14 / 82

Teoria grafów Def. Graf niezorientowany (nieskierowany) = para G = (V, E) zbiorów sko«czonych: V nazywamy zbiorem wierzchoªków (w zªów) G, E { {u, v} : u, v V, u v} nazywamy zbiorem kraw dzi G. Def. Graf zorientowany (skierowany) = para G = (V, E) zbiorów sko«czonych: V nazywamy zbiorem wierzchoªków (w zªów) G, E { (u, v) : u, v V } = V V nazywamy zbiorem kraw dzi (strzaªek) G. 14 / 82

Teoria grafów Def. Graf niezorientowany (nieskierowany) = para G = (V, E) zbiorów sko«czonych: V nazywamy zbiorem wierzchoªków (w zªów) G, E { {u, v} : u, v V, u v} nazywamy zbiorem kraw dzi G. Def. Graf zorientowany (skierowany) = para G = (V, E) zbiorów sko«czonych: V nazywamy zbiorem wierzchoªków (w zªów) G, E { (u, v) : u, v V } = V V nazywamy zbiorem kraw dzi (strzaªek) G. W denicji grafu zorientowanego dopuszczamy strzaªki postaci (v, v). Nazywamy je p tlami (zaczepionymi w wierzchoªku v). 14 / 82

Teoria grafów Ustalmy graf niezorientowany G = (V, E) (dla grafu zorientowanego denicje analogiczne). 15 / 82

Teoria grafów Ustalmy graf niezorientowany G = (V, E) (dla grafu zorientowanego denicje analogiczne). Def. wierzchoªki u, v V s s siednie, gdy {u, v} E, 15 / 82

Teoria grafów Ustalmy graf niezorientowany G = (V, E) (dla grafu zorientowanego denicje analogiczne). Def. wierzchoªki u, v V s s siednie, gdy {u, v} E, kraw dzie e 1, e 2 E s s siednie, gdy e 1 e 2 (maj wspólny wierzchoªek), 15 / 82

Teoria grafów Ustalmy graf niezorientowany G = (V, E) (dla grafu zorientowanego denicje analogiczne). Def. wierzchoªki u, v V s s siednie, gdy {u, v} E, kraw dzie e 1, e 2 E s s siednie, gdy e 1 e 2 (maj wspólny wierzchoªek), wierzchoªek v V jest incydentny z kraw dzi e E, gdy v e, 15 / 82

Teoria grafów Ustalmy graf niezorientowany G = (V, E) (dla grafu zorientowanego denicje analogiczne). Def. wierzchoªki u, v V s s siednie, gdy {u, v} E, kraw dzie e 1, e 2 E s s siednie, gdy e 1 e 2 (maj wspólny wierzchoªek), wierzchoªek v V jest incydentny z kraw dzi e E, gdy v e, gdy G jest zorientowany, to dla strzaªki e = (u, v) E (oznaczanej czasem u v), u nazywamy pocz tkiem, a v ko«cem e. 15 / 82

Teoria grafów Def. Stopniem wierzchoªka v V nazywamy liczb deg G (v) := #{e E : v E} 16 / 82

Teoria grafów Def. Stopniem wierzchoªka v V nazywamy liczb deg G (v) := #{e E : v E} Gdy G jest grafem zorientowanym to rozró»nia si stopie«wyj±ciowy wierzchoªka v V : out.deg G (v) = deg + G (v) := #{w V : v w E} oraz stopie«wej±ciowy wierzchoªka v V : in.deg G (v) = deg G (v) := #{u V : u v E}. 16 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. Def. Droga w grae zorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) (piszemy czasem P = (e 1,..., e k )). 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. Def. Droga w grae zorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) (piszemy czasem P = (e 1,..., e k )). v 0 pocz tek, v k koniec drogi P, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. Def. Droga w grae zorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) (piszemy czasem P = (e 1,..., e k )). v 0 pocz tek, v k koniec drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. Def. Droga w grae zorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) (piszemy czasem P = (e 1,..., e k )). v 0 pocz tek, v k koniec drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, 17 / 82

Teoria grafów Def. Droga w grae niezorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = {v j 1, v j }. v 0, v k - ko«ce drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. Def. Droga w grae zorientowanym G = (V, E) ci g wierzchoªków i kraw dzi P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) (piszemy czasem P = (e 1,..., e k )). v 0 pocz tek, v k koniec drogi P, dopuszczamy drogi trywialne postaci P = (v 0 ), v 0 V, czasem zakªada si,»e e j e l, dla j l, k = dªugo± drogi. 17 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). 18 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). Def. Niech P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ) b dzie drog w grae (zorientowanym lub nie). Wówczas 18 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). Def. Niech P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ) b dzie drog w grae (zorientowanym lub nie). Wówczas je»eli v i v j dla ka»dych i j, to P nazywamy drog prost, 18 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). Def. Niech P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ) b dzie drog w grae (zorientowanym lub nie). Wówczas je»eli v i v j dla ka»dych i j, to P nazywamy drog prost, je»eli v 0 = v k to P nazywamy drog zamkni t lub cyklem, 18 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). Def. Niech P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ) b dzie drog w grae (zorientowanym lub nie). Wówczas je»eli v i v j dla ka»dych i j, to P nazywamy drog prost, je»eli v 0 = v k to P nazywamy drog zamkni t lub cyklem, cykl prosty = cykl + droga prosta. 18 / 82

Teoria grafów Def. cie»ka (inaczej droga niezorientowana) w grae zorientowanym G = (V, E) ci g W = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ), v i V, e j E, k 0, taki,»e e j = (v j 1, v j ) lub e j = (v j, v j 1 ) (piszemy czasem W = (e 1,..., e k )). Def. Niech P = (v 0, e 1, v 1, e 2, v 2,..., e k, v k ) b dzie drog w grae (zorientowanym lub nie). Wówczas je»eli v i v j dla ka»dych i j, to P nazywamy drog prost, je»eli v 0 = v k to P nazywamy drog zamkni t lub cyklem, cykl prosty = cykl + droga prosta. Podobnie deniujemy ±cie»k prost i ±cie»k zamkni t (=cykl niezorientowany) oraz niezorientowany cykl prosty. 18 / 82

Teoria grafów Def. Graf niezorientowany G = (V, E) jest spójny, o ile dla ka»dych u, v V istnieje droga P o ko«cach u i v. 19 / 82

Teoria grafów Def. Graf niezorientowany G = (V, E) jest spójny, o ile dla ka»dych u, v V istnieje droga P o ko«cach u i v. Def. Graf zorientowany G = (V, E) jest sªabo spójny, o ile dla ka»dych u, v V istnieje ±cie»ka P o ko«cach u i v. 19 / 82

Teoria grafów Def. Graf niezorientowany G = (V, E) jest spójny, o ile dla ka»dych u, v V istnieje droga P o ko«cach u i v. Def. Graf zorientowany G = (V, E) jest sªabo spójny, o ile dla ka»dych u, v V istnieje ±cie»ka P o ko«cach u i v. Def. Graf zorientowany G = (V, E) jest silnie spójny, o ile dla ka»dych u, v V istnieje droga P o pocz tku u i ko«cu v. 19 / 82

Teoria grafów Def. Graf H = (V, E ) nazywamy podgrafem grafu G = (V, E), o ile V V oraz E E. 20 / 82

Teoria grafów Def. Graf H = (V, E ) nazywamy podgrafem grafu G = (V, E), o ile V V oraz E E. Def. Podgraf H = (V, E ) grafu G = (V, E) nazywamy peªnym, o ile u,v V {u, v} E {u, v} E lub w wersji zorientowanej u,v V (u, v) E (u, v) E. 20 / 82

Teoria grafów Def. Graf H = (V, E ) nazywamy podgrafem grafu G = (V, E), o ile V V oraz E E. Def. Podgraf H = (V, E ) grafu G = (V, E) nazywamy peªnym, o ile u,v V {u, v} E {u, v} E lub w wersji zorientowanej u,v V (u, v) E (u, v) E. Def. Dwa grafy G = (V, E) oraz H = (V, E ) s izomorczne, gdy istnieje bijekcja f : V V taka,»e dla ka»dych u, v V, mamy {u, v} E {f (u), f (v)} E (analogicznie dla wersji zorientowanej). 20 / 82

Teoria grafów Ustalmy graf nieskierowany G = (V, E). Def. Mówimy,»e v V jest osi galny z u V, gdy w G istnieje droga P o ko«cach u, v. 21 / 82

Teoria grafów Ustalmy graf nieskierowany G = (V, E). Def. Mówimy,»e v V jest osi galny z u V, gdy w G istnieje droga P o ko«cach u, v. Obserwacja: Jest osi galny jest relacj zwrotn, symetryczn i przechodni, czyli relacj równowa»no±ci w V. 21 / 82

Teoria grafów Ustalmy graf nieskierowany G = (V, E). Def. Mówimy,»e v V jest osi galny z u V, gdy w G istnieje droga P o ko«cach u, v. Obserwacja: Jest osi galny jest relacj zwrotn, symetryczn i przechodni, czyli relacj równowa»no±ci w V. Def. Spójn skªadow (inaczej skªadow spójno±ci w grae G) nazywamy peªny podgraf grafu G o wierzchoªkach z dowolnej klasy abstrakcji relacji jest osi galny. 21 / 82

Teoria grafów Ustalmy graf nieskierowany G = (V, E). Def. Mówimy,»e v V jest osi galny z u V, gdy w G istnieje droga P o ko«cach u, v. Obserwacja: Jest osi galny jest relacj zwrotn, symetryczn i przechodni, czyli relacj równowa»no±ci w V. Def. Spójn skªadow (inaczej skªadow spójno±ci w grae G) nazywamy peªny podgraf grafu G o wierzchoªkach z dowolnej klasy abstrakcji relacji jest osi galny. Uwaga. Spójna skªadowa jest maksymalnym spójnym podgrafem peªnym grafu G. 21 / 82

Teoria grafów Ustalmy graf nieskierowany G = (V, E). Def. Mówimy,»e v V jest osi galny z u V, gdy w G istnieje droga P o ko«cach u, v. Obserwacja: Jest osi galny jest relacj zwrotn, symetryczn i przechodni, czyli relacj równowa»no±ci w V. Def. Spójn skªadow (inaczej skªadow spójno±ci w grae G) nazywamy peªny podgraf grafu G o wierzchoªkach z dowolnej klasy abstrakcji relacji jest osi galny. Uwaga. Spójna skªadowa jest maksymalnym spójnym podgrafem peªnym grafu G. Wniosek. Graf G jest spójny posiada jedn spójn skªadow. 21 / 82

Teoria grafów Def. Graf peªny K n (dla n N) = graf taki,»e V (K n ) = n oraz dla ka»dych u, v V (K n ), {u, v} E(K n ). 22 / 82

Teoria grafów Def. Graf peªny K n (dla n N) = graf taki,»e V (K n ) = n oraz dla ka»dych u, v V (K n ), {u, v} E(K n ). Def. Graf G = (V, E) nazywamy dwudzielnym, je»eli istnieje podziaª V na dwa rozª czne niepuste podzbiory V 1, V 2 (tj. V 1 V 2 = V ) taki,»e {u,v} E [(u V 1 v V 2 ) (v V 1 u V 2 )]. 22 / 82

Teoria grafów Def. Graf peªny K n (dla n N) = graf taki,»e V (K n ) = n oraz dla ka»dych u, v V (K n ), {u, v} E(K n ). Def. Graf G = (V, E) nazywamy dwudzielnym, je»eli istnieje podziaª V na dwa rozª czne niepuste podzbiory V 1, V 2 (tj. V 1 V 2 = V ) taki,»e {u,v} E [(u V 1 v V 2 ) (v V 1 u V 2 )]. Def. Graf G = (V, E) nazywamy peªnym dwudzielnym, je»eli istnieje podziaª V na dwa rozª czne niepuste podzbiory V 1, V 2 (tj. V 1 V 2 = V ) taki,»e u V1 v V2 {u, v} E. 22 / 82

Reprezentacja grafu Ustalmy graf nieskierowany G = (V, E), V = {1,..., n}, E = {e 1,..., e m }. Sposoby reprezentowania grafu w komputerze: 23 / 82

Reprezentacja grafu Ustalmy graf nieskierowany G = (V, E), V = {1,..., n}, E = {e 1,..., e m }. Sposoby reprezentowania grafu w komputerze: Macierz s siedztwa: A = A(G) M n n (Z), { 0, {i, j} / E, A i,j = 1, {i, j} E. 23 / 82

Reprezentacja grafu Ustalmy graf nieskierowany G = (V, E), V = {1,..., n}, E = {e 1,..., e m }. Sposoby reprezentowania grafu w komputerze: Macierz s siedztwa: A = A(G) M n n (Z), { 0, {i, j} / E, A i,j = 1, {i, j} E. Listy s siedztwa: tablica L[1..n], gdzie L[i] = wska¹nik do listy s siadów wierzchoªka i. 23 / 82

Reprezentacja grafu Ustalmy graf nieskierowany G = (V, E), V = {1,..., n}, E = {e 1,..., e m }. Sposoby reprezentowania grafu w komputerze: Macierz s siedztwa: A = A(G) M n n (Z), { 0, {i, j} / E, A i,j = 1, {i, j} E. Listy s siedztwa: tablica L[1..n], gdzie L[i] = wska¹nik do listy s siadów wierzchoªka i. Lista kraw dzi: [[v1 1, v 2 1], [v 1 2, v 2 2],..., [v 1 m, v 2 m ]], gdzie e i = {v1 i, v 2 i }. 23 / 82

Reprezentacja grafu Ustalmy graf nieskierowany G = (V, E), V = {1,..., n}, E = {e 1,..., e m }. Sposoby reprezentowania grafu w komputerze: Macierz s siedztwa: A = A(G) M n n (Z), { 0, {i, j} / E, A i,j = 1, {i, j} E. Listy s siedztwa: tablica L[1..n], gdzie L[i] = wska¹nik do listy s siadów wierzchoªka i. Lista kraw dzi: [[v1 1, v 2 1], [v 1 2, v 2 2],..., [v 1 m, v 2 m ]], gdzie e i = {v1 i, v 2 i }. Macierz incydencji: B = B(G) M n m (Z), { 0, i / ej, B i,j = 1, i e j. 23 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, dla ka»dych u, v V istnieje dokªadnie jedna droga P o ko«cach u, v, 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, dla ka»dych u, v V istnieje dokªadnie jedna droga P o ko«cach u, v, G jest spójny, a po usuni ciu dowolnej kraw dzi nie jest spójny, 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, dla ka»dych u, v V istnieje dokªadnie jedna droga P o ko«cach u, v, G jest spójny, a po usuni ciu dowolnej kraw dzi nie jest spójny, G jest spójny i E = V 1, 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, dla ka»dych u, v V istnieje dokªadnie jedna droga P o ko«cach u, v, G jest spójny, a po usuni ciu dowolnej kraw dzi nie jest spójny, G jest spójny i E = V 1, G jest acykliczny i E = V 1, 24 / 82

Drzewa Def. Graf acykliczny = graf nie zawieraj cy cykli. Def. Drzewo (drzewo wolne) = graf spójny i acykliczny. Twierdzenie. G = (V, E) graf niezorientowany. Nast puj ce warunki s równowa»ne: G jest drzewem, dla ka»dych u, v V istnieje dokªadnie jedna droga P o ko«cach u, v, G jest spójny, a po usuni ciu dowolnej kraw dzi nie jest spójny, G jest spójny i E = V 1, G jest acykliczny i E = V 1, G jest acykliczny, lecz po dodaniu do E jakiejkolwiek kraw dzi powstaªy graf posiada cykl. 24 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, brat wierzchoªka, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, brat wierzchoªka, li±cie drzewa, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, brat wierzchoªka, li±cie drzewa, stopie«wierzchoªka = liczba synów, 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, brat wierzchoªka, li±cie drzewa, stopie«wierzchoªka = liczba synów, gª boko± (poziom) wierzchoªka v = dªugo± drogi od r do v (ozn. h(v) = h T (v)), 25 / 82

Drzewa Def. Drzewo z korzeniem = para (T, r), gdzie T = (V, E) jest drzewem, a r V wyró»nionym wierzchoªkiem, zwanym korzeniem. Podstawowe poj cia: przodek (poprzednik) wierzchoªka, potomek (nast pnik) wierzchoªka, syn (bezpo±redni nast pnik) wierzchoªka, ojciec (bezpo±redni poprzednik) wierzchoªka, brat wierzchoªka, li±cie drzewa, stopie«wierzchoªka = liczba synów, gª boko± (poziom) wierzchoªka v = dªugo± drogi od r do v (ozn. h(v) = h T (v)), wysoko± drzewa = h(t ) := max{h(v) : v V }, 25 / 82

Drzewa Def. Drzewo uporz dkowane = drzewo z korzeniem, w którym synowie ka»dego wierzchoªka s uporz dkowani. 26 / 82

Drzewa Def. Drzewo uporz dkowane = drzewo z korzeniem, w którym synowie ka»dego wierzchoªka s uporz dkowani. Def. Drzewo binarne = drzewo uporz dkowane, w którym ka»dy wierzchoªek ma stopie«2 (wyró»niony lewy i prawy syn). 26 / 82

Drzewa Def. Drzewo uporz dkowane = drzewo z korzeniem, w którym synowie ka»dego wierzchoªka s uporz dkowani. Def. Drzewo binarne = drzewo uporz dkowane, w którym ka»dy wierzchoªek ma stopie«2 (wyró»niony lewy i prawy syn). Def. Peªne drzewo binarne = drzewo binarne takie,»e ka»dy wierzchoªek oprócz li±ci ma stopie«2. 26 / 82

Drzewa Def. Drzewo uporz dkowane = drzewo z korzeniem, w którym synowie ka»dego wierzchoªka s uporz dkowani. Def. Drzewo binarne = drzewo uporz dkowane, w którym ka»dy wierzchoªek ma stopie«2 (wyró»niony lewy i prawy syn). Def. Peªne drzewo binarne = drzewo binarne takie,»e ka»dy wierzchoªek oprócz li±ci ma stopie«2. Def. Poddrzewo o korzeniu x drzewa (T, r) = peªny podgraf grafu T rozpi ty na wierzchoªku x i wszystkich potomkach x. 26 / 82

Drzewa Def. Drzewo uporz dkowane = drzewo z korzeniem, w którym synowie ka»dego wierzchoªka s uporz dkowani. Def. Drzewo binarne = drzewo uporz dkowane, w którym ka»dy wierzchoªek ma stopie«2 (wyró»niony lewy i prawy syn). Def. Peªne drzewo binarne = drzewo binarne takie,»e ka»dy wierzchoªek oprócz li±ci ma stopie«2. Def. Poddrzewo o korzeniu x drzewa (T, r) = peªny podgraf grafu T rozpi ty na wierzchoªku x i wszystkich potomkach x. Def. Lewe (odp. prawe) poddrzewo drzewa binarnego (T, r) = poddrzewo drzewa T o korzeniu b d cym lewym (odp. prawym) synem korzenia x. 26 / 82

Drzewo jako struktura danych type wskdrzewa = ^eldrzewa; eldrzewa = record klucz : typ-danych; lewy, prawy : wskdrzewa end; 27 / 82

Drzewo jako struktura danych type wskdrzewa = ^eldrzewa; eldrzewa = record klucz : typ-danych; lewy, prawy : wskdrzewa end; lub type wskdrzewa = ^eldrzewa; eldrzewa = record ojciec : wskdrzewa; klucz : typ-danych; lewy, prawy : wskdrzewa end; 27 / 82

Drzewo jako struktura danych Przegl danie drzewa metod poprzeczn. procedure Przejrzyj(korzen : wskdrzewa); begin if korzen <> nil then begin Przejrzyj(korzen^.lewy); Wypisz(korzen^.klucz); Przejrzyj(korzen^.prawy)); end end; 28 / 82

Drzewo jako struktura danych Metody przegl dania drzewa: poprzeczna (inorder): lewe, korze«, prawe, wzdªu»na (preorder): korze«, lewe, prawe, wsteczna (postorder): lewe, prawe, korze«. 29 / 82

Drzewo jako struktura danych Metody przegl dania drzewa: poprzeczna (inorder): lewe, korze«, prawe, wzdªu»na (preorder): korze«, lewe, prawe, wsteczna (postorder): lewe, prawe, korze«. Przegl danie drzewa mo»e posªu»y tak»e do wyszukania wska¹nika do wierzchoªka (zawieraj cego dany klucz). 29 / 82

Drzewo jako struktura danych Metody przegl dania drzewa: poprzeczna (inorder): lewe, korze«, prawe, wzdªu»na (preorder): korze«, lewe, prawe, wsteczna (postorder): lewe, prawe, korze«. Przegl danie drzewa mo»e posªu»y tak»e do wyszukania wska¹nika do wierzchoªka (zawieraj cego dany klucz). Zªo»ono±. Je»eli nic nie zaªo»ymy dodatkowo o ksztaªcie drzewa ani o zwi zkach mi dzy kluczami, to zªo»ono± wyszukiwania wynosi O(n), gdzie n = liczba wierzchoªków. 29 / 82

Drzewa poszukiwa«binarnych Def. Drzewo poszukiwa«binarnych (BST binary search tree) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). 30 / 82

Drzewa poszukiwa«binarnych Def. Drzewo poszukiwa«binarnych (BST binary search tree) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). Ponadto klucze maj wªasno± BST: dla ka»dego v V klucze w wierzchoªkach lewego poddrzewa wierzchoªka v s k(v), 30 / 82

Drzewa poszukiwa«binarnych Def. Drzewo poszukiwa«binarnych (BST binary search tree) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). Ponadto klucze maj wªasno± BST: dla ka»dego v V klucze w wierzchoªkach lewego poddrzewa wierzchoªka v s k(v), klucze w wierzchoªkach prawego poddrzewa wierzchoªka v s k(v). 30 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie w drzewie BST elementu o danym kluczu. function Search(korzen : wskdrzewa; klucz : Integer) : wskdrzewa; begin if (korzen = nil) or (korzen^.klucz = klucz) then Search := korzen else if klucz < korzen^.klucz then Search := Search(korzen^.lewy, klucz) else Search := Search(korzen^.prawy, klucz) end; 31 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie w drzewie BST elementu o danym kluczu. function Search(korzen : wskdrzewa; klucz : Integer) : wskdrzewa; begin if (korzen = nil) or (korzen^.klucz = klucz) then Search := korzen else if klucz < korzen^.klucz then Search := Search(korzen^.lewy, klucz) else Search := Search(korzen^.prawy, klucz) end; Zªo»ono±. O(h), gdzie h = wysoko± drzewa. Gdy drzewo BST jest dokªadnie wywa»one (ma najmniejsz mo»liw wysoko± dla danej liczby wierzchoªków), to h logn, gdzie n = liczba wierzchoªków. 31 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie w drzewie BST elementu o danym kluczu. function Search(korzen : wskdrzewa; klucz : Integer) : wskdrzewa; begin if (korzen = nil) or (korzen^.klucz = klucz) then Search := korzen else if klucz < korzen^.klucz then Search := Search(korzen^.lewy, klucz) else Search := Search(korzen^.prawy, klucz) end; Zªo»ono±. O(h), gdzie h = wysoko± drzewa. Gdy drzewo BST jest dokªadnie wywa»one (ma najmniejsz mo»liw wysoko± dla danej liczby wierzchoªków), to h logn, gdzie n = liczba wierzchoªków. Zadanie. Napisz iteracyjn wersj funkcji Search. 31 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie minimum. function Minimum(korzen : wskdrzewa) : wskdrzewa; begin while korzen^.lewy <> nil do korzen := korzen^.lewy; Minimum := korzen; end; 32 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie minimum. function Minimum(korzen : wskdrzewa) : wskdrzewa; begin while korzen^.lewy <> nil do korzen := korzen^.lewy; Minimum := korzen; end; Wyszukiwanie maksimum. function Maximum(korzen : wskdrzewa) : wskdrzewa; begin while korzen^.prawy <> nil do korzen := korzen^.prawy; Maximum := korzen; end; 32 / 82

Drzewa poszukiwa«binarnych Wyszukiwanie minimum. function Minimum(korzen : wskdrzewa) : wskdrzewa; begin while korzen^.lewy <> nil do korzen := korzen^.lewy; Minimum := korzen; end; Wyszukiwanie maksimum. function Maximum(korzen : wskdrzewa) : wskdrzewa; begin while korzen^.prawy <> nil do korzen := korzen^.prawy; Maximum := korzen; end; Zªo»ono±. O(h), gdzie h = wysoko± drzewa. 32 / 82

Drzewa poszukiwa«binarnych Dodawanie elementu do drzewa BST w taki sposób, by zachowa wªasno± BST. 33 / 82

Drzewa poszukiwa«binarnych Dodawanie elementu do drzewa BST w taki sposób, by zachowa wªasno± BST. procedure Insert(var korzen : wskdrzewa; klucz : Integer); begin if korzen = nil then begin New(korzen); korzen^.klucz := klucz; korzen^.lewy := nil; korzen^.prawy := nil end else begin if klucz >= korzen^.klucz then Insert(korzen^.prawy, klucz); if klucz < korzen^.klucz then Insert(korzen^.lewy, klucz); end end; 33 / 82

Drzewa poszukiwa«binarnych Dodawanie elementu do drzewa BST w taki sposób, by zachowa wªasno± BST. procedure Insert(var korzen : wskdrzewa; klucz : Integer); begin if korzen = nil then begin New(korzen); korzen^.klucz := klucz; korzen^.lewy := nil; korzen^.prawy := nil end else begin if klucz >= korzen^.klucz then Insert(korzen^.prawy, klucz); if klucz < korzen^.klucz then Insert(korzen^.lewy, klucz); end end; Zªo»ono±. O(h), gdzie h = wysoko± drzewa. 33 / 82

Drzewa poszukiwa«binarnych Usuwanie elementu v drzewa tak, by zachowa wªasno± BST. Rozpatrujemy trzy przypadki: 34 / 82

Drzewa poszukiwa«binarnych Usuwanie elementu v drzewa tak, by zachowa wªasno± BST. Rozpatrujemy trzy przypadki: 1 v nie ma synów w jego ojcu zast pujemy wska¹nik na v warto±ci nil, 34 / 82

Drzewa poszukiwa«binarnych Usuwanie elementu v drzewa tak, by zachowa wªasno± BST. Rozpatrujemy trzy przypadki: 1 v nie ma synów w jego ojcu zast pujemy wska¹nik na v warto±ci nil, 2 v ma tylko jednego syna ustalamy wska¹nik mi dzy jego ojcem a jedynym synem, 34 / 82

Drzewa poszukiwa«binarnych Usuwanie elementu v drzewa tak, by zachowa wªasno± BST. Rozpatrujemy trzy przypadki: 1 v nie ma synów w jego ojcu zast pujemy wska¹nik na v warto±ci nil, 2 v ma tylko jednego syna ustalamy wska¹nik mi dzy jego ojcem a jedynym synem, 3 v ma dwóch synów szukamy jego nast pnika y (mo»na pokaza,»e y ma co najwy»ej jednego syna!) i wycinamy y jak w 1 lub 2, zast pujemy zawarto± v zawarto±ci y. Nast pnik v = nast pny wierzchoªek po v odwiedzany w czasie przechodzenia drzewa w porz dku inorder. 34 / 82

Drzewa poszukiwa«binarnych Usuwanie elementu v drzewa tak, by zachowa wªasno± BST. Rozpatrujemy trzy przypadki: 1 v nie ma synów w jego ojcu zast pujemy wska¹nik na v warto±ci nil, 2 v ma tylko jednego syna ustalamy wska¹nik mi dzy jego ojcem a jedynym synem, 3 v ma dwóch synów szukamy jego nast pnika y (mo»na pokaza,»e y ma co najwy»ej jednego syna!) i wycinamy y jak w 1 lub 2, zast pujemy zawarto± v zawarto±ci y. Nast pnik v = nast pny wierzchoªek po v odwiedzany w czasie przechodzenia drzewa w porz dku inorder. Zªo»ono±. O(h), gdzie h = wysoko± drzewa. 34 / 82

Drzewa poszukiwa«binarnych Wszystkie podstawowe operacje na drzewach BST maj zªo»ono± O(h). 35 / 82

Drzewa poszukiwa«binarnych Wszystkie podstawowe operacje na drzewach BST maj zªo»ono± O(h). Wysoko± h drzewa ulega ci gªym zmianom podczas wstawiania i usuwania elementów. 35 / 82

Drzewa poszukiwa«binarnych Wszystkie podstawowe operacje na drzewach BST maj zªo»ono± O(h). Wysoko± h drzewa ulega ci gªym zmianom podczas wstawiania i usuwania elementów. W pesymistycznych przypadkach wysoko± mo»e by liczbie wierzchoªków n zªo»ono± O(n), jak dla zwykªych list. 35 / 82

Drzewa poszukiwa«binarnych Wszystkie podstawowe operacje na drzewach BST maj zªo»ono± O(h). Wysoko± h drzewa ulega ci gªym zmianom podczas wstawiania i usuwania elementów. W pesymistycznych przypadkach wysoko± mo»e by liczbie wierzchoªków n zªo»ono± O(n), jak dla zwykªych list. Im mniejsza wysoko± drzewa, tym lepsza zªo»ono±. Najlepiej, jak drzewo jest dokªadnie wywa»one. Wówczas h logn. 35 / 82

Drzewa poszukiwa«binarnych Wszystkie podstawowe operacje na drzewach BST maj zªo»ono± O(h). Wysoko± h drzewa ulega ci gªym zmianom podczas wstawiania i usuwania elementów. W pesymistycznych przypadkach wysoko± mo»e by liczbie wierzchoªków n zªo»ono± O(n), jak dla zwykªych list. Im mniejsza wysoko± drzewa, tym lepsza zªo»ono±. Najlepiej, jak drzewo jest dokªadnie wywa»one. Wówczas h logn. Metoda utrzymanie drzewa w postaci bliskiej dokªadnie wywa»onej drzewa czerwono-czarne. 35 / 82

Kopce Def. Kopiec (heap) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). 36 / 82

Kopce Def. Kopiec (heap) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). Ponadto: klucze maj wªasno± kopca: dla ka»dego v V, k(v) k(o(v)), gdzie o(v) := ojciec v, 36 / 82

Kopce Def. Kopiec (heap) = drzewo binarne T = (V, E, r) z kluczami, tj. ka»demu v V jest przyporz dkowany klucz k(v) (element zbioru liniowo uporz dkowanego, np. Z). Ponadto: klucze maj wªasno± kopca: dla ka»dego v V, k(v) k(o(v)), gdzie o(v) := ojciec v, drzewo T jest dokªadnie wywa»one (zakªadamy,»e jest wypeªnione od lewej). 36 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. Oznaczenia: ojciec(i) = i 2, 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. Oznaczenia: ojciec(i) = i 2, lewy(i) = 2i, 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. Oznaczenia: ojciec(i) = i 2, lewy(i) = 2i, prawy(i) = 2i + 1, 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. Oznaczenia: ojciec(i) = i 2, lewy(i) = 2i, prawy(i) = 2i + 1, length(a) = rozmiar tablicy A, 37 / 82

Kopce Kopiec mo»na zaimplementowa w tablicy, np.: A = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Wówczas dla i-tego elementu tablicy: Oznaczenia: klucz ojca = A[ i 2 ], klucz lewego syna = A[2i], klucz prawego syna = A[2i + 1]. ojciec(i) = i 2, lewy(i) = 2i, prawy(i) = 2i + 1, length(a) = rozmiar tablicy A, heapsize(a) = (aktualny) rozmiar kopca implementowanego na tablicy A. 37 / 82

Kopce Przywracanie wªasno±ci kopca poddrzewu o korzeniu A[i]. 38 / 82

Kopce Przywracanie wªasno±ci kopca poddrzewu o korzeniu A[i]. Zaªo»enie: drzewa zaczepione w lewy(i) i prawy(i) s kopcami! 38 / 82

Kopce Przywracanie wªasno±ci kopca poddrzewu o korzeniu A[i]. Zaªo»enie: drzewa zaczepione w lewy(i) i prawy(i) s kopcami! Heapify(A, i) begin l := lewy(i); r := prawy(i); if ( l <= heapsize(a) ) and ( A[l] > A[i] ) then max := l else max := i; if ( r <= heapsize(a) ) and ( A[r] > A[max] ) then max := r; if max <> i then begin zamie«a[i] z A[max]; Heapify(A, max) end end; 38 / 82

Kopce Przywracanie wªasno±ci kopca poddrzewu o korzeniu A[i]. Zaªo»enie: drzewa zaczepione w lewy(i) i prawy(i) s kopcami! Heapify(A, i) begin l := lewy(i); r := prawy(i); if ( l <= heapsize(a) ) and ( A[l] > A[i] ) then max := l else max := i; if ( r <= heapsize(a) ) and ( A[r] > A[max] ) then max := r; if max <> i then begin zamie«a[i] z A[max]; Heapify(A, max) end end; Zªo»ono±. O(logn). 38 / 82

Kopce Przeksztaªcenie tablicy A[1..n], n = length(a) w kopiec. 39 / 82

Kopce Przeksztaªcenie tablicy A[1..n], n = length(a) w kopiec. Elementy A[ n + 1],..., A[n] s li± mi 1-elementowymi 2 kopcami. 39 / 82

Kopce Przeksztaªcenie tablicy A[1..n], n = length(a) w kopiec. Elementy A[ n + 1],..., A[n] s li± mi 1-elementowymi 2 kopcami. Wystarczy przywróci wªasno± kopca drzewom o korzeniach A[ n ],..., A[1]. 2 39 / 82

Kopce Przeksztaªcenie tablicy A[1..n], n = length(a) w kopiec. Elementy A[ n + 1],..., A[n] s li± mi 1-elementowymi 2 kopcami. Wystarczy przywróci wªasno± kopca drzewom o korzeniach A[ n ],..., A[1]. 2 BuildHeap(A) begin heapsize(a) := length(a); for i := length(a)/2 downto 1 do Heapify(A, i); end; 39 / 82