ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Grażyna Mirkowska PJWSTK 15 listopad 2000
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Ekonometria WYKŁAD 10 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
Piłka Siatkowa Wykonał: Filip Babiec. Ogólne Informacje Podstawowe zasady Urządzenia i sprzęt Zawodnicy Podstawowe błędy Podział boiska Dalej  Dalej.
© Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Metody optymalizacji - Energetyka 2015/2016 Metody programowania liniowego.
Przemiany energii w ruchu harmonicznym. Rezonans mechaniczny Wyk. Agata Niezgoda Projekt współfinansowany przez Unię Europejską w ramach Europejskiego.
KAPITALIZACJA 1. Określenie procentu Procent jest to setna część z całości. 1 % = 0,01 z całości Aby zamienić liczbę na procent należy tą liczbę pomnożyć.
OBSŁUGA KARTY DILO. Karta diagnostyki i leczenia onkologicznego zawiera: - oznaczenie pacjenta, pozwalające na ustalenie jego tożsamości, - oznaczenie.
Funkcja liniowa Przygotował: Kajetan Leszczyński Niepubliczne Gimnazjum Przy Młodzieżowym Ośrodku Wychowawczym Księży Orionistów W Warszawie Ul. Barska.
Opodatkowanie spółek Podziały Spółek. Podziały spółek Rodzaje podziałów wg KSH Przewidziane są cztery sposoby podziału: 1) podział przez przejęcie, który.
KOMBINATORYKA.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Sieci przepływowe: algorytmy i ich zastosowania.
 Przedziałem otwartym ( a;b ) nazywamy zbiór liczb rzeczywistych x spełniających układ nierówności x a, co krócej zapisujemy a
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Geometria obliczeniowa Wykład 13
Metody Badań Operacyjnych
Minimalizacja automatu
Schematy blokowe.
Wyznaczanie miejsc zerowych funkcji
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
Szkolenie dla partnerów KSOW
Podstawowe polecenia systemu
Projektowanie wspomagane komputerem
Liczby pierwsze.
Przybliżenia dziesiętne liczb rzeczywistych
ALGORYTMY I STRUKTURY DANYCH
Projektowanie wspomagane komputerem
Funkcja – definicja i przykłady
Wstęp do Informatyki - Wykład 3
Opracowała: Monika Grudzińska - Czerniecka
Geometria obliczeniowa Wykład 7
KLASYFIKACJA CZWOROKĄTÓW
Tomasz Gizbert-Studnicki
Geometria obliczeniowa Wykład 8
Geometria obliczeniowa Wykład 8
Elementy fizyki kwantowej i budowy materii
Geometria obliczeniowa Wykład 11
Języki programowania.
Zagadnienie transportowe
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Problem Plecakowy (Problem złodzieja okradającego sklep)
ALGORYTMY I STRUKTURY DANYCH
Grafika i komunikacja człowieka z komputerem
Dobrobyt.
ALGORYTMY I STRUKTURY DANYCH
Statystyka i Demografia
MATEMATYKAAKYTAMETAM
ALGORYTMY I STRUKTURY DANYCH
ETO w Inżynierii Chemicznej
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Bufory.
ALGORYTMY I STRUKTURY DANYCH
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
ALGORYTMY I STRUKTURY DANYCH
Elementy Kombinatoryki
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Grazyna Mirkowska Matematyka Dyskretna PJWSTK 2001
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

ALGORYTMY I STRUKTURY DANYCH WYKŁAD 12 Algorytmy na grafach - drzewo rozpinające Grażyna Mirkowska PJWSTK, 2004

G. Mirkowska, ASD_12 Progamowanie dynamiczne Plan wykładu Drzewo rozpinające grafu Algorytmy BFS i DFS Algorytm Kruskala Struktura Find-Union 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

G. Mirkowska, ASD_12 Progamowanie dynamiczne Drzewa rozpinające Niech G będzie dowolnym grafem niezorientowanym <V, E>. Drzewem rozpinającym grafu G = <V, E> nazywamy graf G* =<V*, E*> taki, że (1) V* = V, E*  E (2) G* jest drzewem (tzn. grafem spójnym i acyklicznym). Definicja Graf i jego drzewa rozpinające 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Jak znaleźć drzewo rozpinające grafu (1)? BFS Włóż do kolejki wybrany wierzchołek grafu i zamarkuj go. Dopóki kolejka nie jest pusta 1. Weź pierwszy element z kolejki i dopisz do kolejki wszystkie wierzchołki z nim sąsiednie, o ile nie były zamarkowane i zamarkuj je. 2. Wypisz krawędzie, po których przeszedłeś do nowych wierzchołków. 3. Usuń pierwszy element z kolejki. a b c d e f a a b f f b c e c e f c e d ab af bc be c d e d Wynik: d 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Jak znaleźć drzewo rozpinające grafu(2)? DFS Włóż na stos wybrany wierzchołek grafu i zamarkuj go. Dopóki stos nie jest pusty : 1. Weź element ze szczytu stosu. 2 . Usuń ze stosu ten element. 3. Dopisz do stosu wszystkie wierzchołki z nim sąsiadujące, których jeszcze nie zamarkowano, a dopisane wierzchołki zamarkuj. 4. Wypisz krawędzie, po których przeszedłeś do wierzchołków zamarkowanych w p.3. a b c d e f e d f c b c b c a b b b ab a f e d f c fe Wynik: 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Minimalne drzewo rozpinające Niech będzie dany graf G = <V, E> spójny niezorientowany, skończony i niech c : E  R+ będzie funkcją kosztu określoną na krawędziach tego grafu. Problem Dla danego skończonego grafu G oraz danej funkcji kosztu c, znaleźć minimalne drzewo rozpinające, tzn. takie drzewo <V, T> rozpinające grafu G, że suma kosztów jego krawędzi S eT c (e) jest najmniejsza. 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Przykład: sieć wodociągowa 1 4 6 7 5 3 2 10 8 15 9 1 4 6 7 5 3 2 10 8 15 9 Jakieś drzewo rozpinające Minimalne drzewo rozpinające 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

G. Mirkowska, ASD_12 Progamowanie dynamiczne Lemat {Vi: 1 i  k}= V Ti  E dla 1 i  k Vi  Vj =  dla i j di - drzewo Niech G = <V, E> będzie grafem spójnym, skończonym i niech c będzie jego funkcją kosztu. Niech d1= <V1, T1>, d2= <V2, T2>,......, dk = <Vk, Tk> będzie danym lasem rozpinającym G Vi Niech e = (v,w) będzie krawędzią o minimalnym koszcie, oraz niech v i w należą do różnych drzew tego podziału. v Dowód przez sprowadzenie do sprzeczności: Przypuśćmy, że istnieje takie drzewo do ktorego krawędz e nie nalezy i którego koszt jest minimalny. Ponieważ w tym drzewie musi istniec droga od v do w to nie przechodzi ona przez krawędz e. Zatem weżmy na tej drodze dwa wierzchołki sąsiednie jeden ze zbioru Vi a drugi nie należący do Vi. Wtedy krawędź (v', w') ,która nie należała do żadnego z drzew danych musi mieć koszt większy niz e. Zastępując krawędź (v',w') krawędzią e otrzymamy drzewo rozpinające o koszcie mniejszym niż wybrane. Sprzeczność. v’ w Jeżeli drzewo rozpinające <V,T*> grafu G ma najmniejszy koszt wśród drzew rozpinających zawierających wszystkie Ti., to e T*. w’ Ale c(v’,w’) > c(v,w) 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

G. Mirkowska, ASD_12 Progamowanie dynamiczne Algorytm Kruskala Jeśli drzewo rozpinające ma mieć koszt minimalny i ma zawierać dany las drzew, to musi też zawierać krawędź e, której koszt jest najmniejszy wśród wszystkich krawędzi nie należących do żadnego z drzew i która łączy wierzchołki z różnych drzew. Utworzyć kolejkę priorytetową PQ z wszystkimi krawędziami grafu, uporządkowanymi ze względu na koszt. Utworzyć początkowy podział Po zbioru V jako rodzinę jednoelementowych zbiorów {x}, gdzie x V (stanowiący las początkowy). Przeglądać kolejno elementy kolejki i jeżeli końce rozważanej krawędzi należą do różnych zbiorów podziału, to krawędź dołączyć do tworzonego drzewa, a zbiory podziału połączyć. Algorytm 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

G. Mirkowska, ASD_12 Progamowanie dynamiczne Przykład 1. (1,2) 2. (1,4) 3.(2,3) 4. (1,3) 5.(4,5) 6. (3,5) 7. (1,5) 7. (6,7) 8. (1,6) 10. (7,4) 15. (4,3) + 5 2 3 4 7 1 6 15 8 10 1| 2| 3| 4| 5| 6| 7 + 1, 2| 3| 4| 5| 6| 7 + 1, 2, 4| 3| 5| 6| 7 1, 2, 3, 4| 5| 6| 7 + 1, 2, 3, 4, 5| 6| 7 + 1, 2, 3, 4, 5| 6, 7 + 1, 2, 3, 4, 5, 6, 7 + Kolejka Priorytetowa Podział 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Algorytm Zakładam, że 1. pq jest kolejką priorytetową wszystkich krawędzi danego grafu G = <V, E>, 2. P jest początkowym podziałem zbioru V, 3. T pustym stosem (będą tam krawędzie drzewa). { while (not empty (pq) and card(P)>1) do kr := min(pq); pq := delmin(pq); A := Find(P,kr.początek); B := Find(P,kr.koniec); if A B then P := Union(P,B,A); T := push(T,kr) fi od } Find (P,x) = ten zbiór podziału P, do którego należy x Union(P,B,A) = podział powstający z P przez usunięcie zbiorów A, B i dołączenie zbioru A B. 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Jak zapamiętać podział? Przykład Struktura Find-Union Niech U będzie skończonym zbiorem, a P podziałem zbioru U. Rozważamy strukturę, w której określone są dwie operacje Find(P,x), Union(P,A,B): Find(P,x) zwraca ten zbiór podziału P, do którego należy x, Union(P,A,B) zwraca nowy podział zbioru U, który powstaje z P przez zastąpienie zbiorów A, B ich suma teoriomnogościową . Zmień nazwę zbioru na np B, dla wszystkich elementów, które należały do zbioru o nazwie A . Koszt Find jest stały Jak zapamiętać podział? Przykład Niech U={1,2,3,4,5,6} i P ={{1,2},{3},{4,5,6}}. Do zapamiętania podziału wystarczy tablica np. R = [1,1,2,3,3,3]. Koszt Union -liniowy Wtedy Find(P,i)= R(i) Union(P,A,B) 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne

Implementacja na drzewach c.d. Struktura Find-Union Drzewa z balansowaniem i kompresją ścieżek A A A B Koszt Algorytmu Kruskala w tej implementacji: Koszt utworzenia kolejki priorytetowej = O(m lg m). Koszt 2m operacji Find = O(mlgn), każda operacja Find O(lg(n)) Koszt m operacji Union = O(m) , każda operacja Union O(1) Koszt Razem O(m lg n) 2019-02-17 G. Mirkowska, ASD_12 Progamowanie dynamiczne