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

Podobne dokumenty
Programowanie dynamiczne i algorytmy zachłanne

Temat: Algorytmy zachłanne

Wstęp do programowania

Algorytmy zachłanne. dr inż. Urszula Gałązka

Strategia "dziel i zwyciężaj"

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

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

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Wykład 3. Metoda dziel i zwyciężaj

Wstęp do Programowania potok funkcyjny

Wstęp do programowania

Programowanie dynamiczne cz. 2

Wstęp do programowania

TEORETYCZNE PODSTAWY INFORMATYKI

Zaawansowane algorytmy i struktury danych

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

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

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

Algorytmy i Struktury Danych

Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Sortowanie przez scalanie

Analiza algorytmów zadania podstawowe

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Nierówność Krafta-McMillana, Kodowanie Huffmana

Algorytmy sortujące i wyszukujące

Programowanie dynamiczne

Programowanie w VB Proste algorytmy sortowania

Podejście zachłanne, a programowanie dynamiczne

Kompresja bezstratna. Entropia. Kod Huffmana

Sortowanie. Bartman Jacek Algorytmy i struktury

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Algorytmy i Struktury Danych

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

ALGORYTMY I STRUKTURY DANYCH

Sortowanie. LABORKA Piotr Ciskowski

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

Sortowanie bąbelkowe

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

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

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

0-0000, , , itd

Złożoność obliczeniowa zadania, zestaw 2

Projektowanie i analiza algorytmów

Algorytmy i Struktury Danych.

Wstęp do programowania

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

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

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

Luty 2001 Algorytmy (4) 2000/2001

Algorytmy i Struktury Danych, 2. ćwiczenia

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Algorytmy i Struktury Danych, 2. ćwiczenia

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Podstawy Informatyki. Sprawność algorytmów

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Ćwiczenie 3 Programowanie dynamiczne

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

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Jeszcze o algorytmach

Struktury Danych i Złożoność Obliczeniowa

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Zaawansowane algorytmy i struktury danych

Kody Tunstalla. Kodowanie arytmetyczne

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

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Teoretyczne podstawy informatyki

Algorytmy i struktury danych.

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Drzewa poszukiwań binarnych

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

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:

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Wstęp do programowania

Struktury Danych i Złożoność Obliczeniowa

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Wybrane algorytmy tablicowe

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Transkrypt:

Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na szereg podproblemów podobnych (identycznych co do meritum, mniejszych co do wielkości danych) 2. Podproblemysą rozwiązywane niezależnie (rekurencyjnie) 3. Rozwiązania wszystkich podproblemów są łączone Przykłady: # sortowanie przez scalanie # wyszukiwanie binarne (?) # quick sort # wyznaczanie przywódcy tablicy Przywódcą ciągu (tablicy) jest element, który występuje w ciągu więcej razy niż połowa długości tego ciągu. 3

Przywódca ciągu if( n == ) to jest to przywódca else podziel tablicę na dwie połowy rekurencyjnie znajdź przywódcę lewej i prawej połowy sprawdź który jest przywódcą całości O(n) int count = ; for( int i = ; i < n ; i++ ) { if ( count == ) { count++; j = i;} else if ( Tab[i] == Tab[j] ) count++; else count--; } return Tab[j]; 4 Algorytmy zachłanne Wykonuje zawsze takie działanie które w danej chwili jest najkorzystniejsze (optymalne: minimalne, maksymalne), w efekcie uzyskujemy rozwiązanie najkorzystniejsze (optymalne: minimalne, maksymalne). Zastosowanie gdy minimalizujemy (maksymalizujemy) jakąś wartość Nie zawsze otrzymujemy rozwiązanie optymalne! # dowód poprawności # kontrprzykład # niejednokrotnie znalezione rozwiązanie jest satysfakcjonujące (rozwiązania dokładniejsze są dużo kosztowniejsze) 5 Wieże na szachownicy #Problem: na szachownicy n * nsą porozstawiane monety; należy tak umieścić n wież, aby nie atakowały się i suma monet z pól na których stoją była największa. #Rozwiązanie: w każdym kroku wybieramy dopuszczalne pole z maksymalną monetą #Optymalność: algorytm nie jest optymalny, ale suma będzie zawsze większa od połowy maksymalnej sumy możliwej do uzyskania # Złożoność: O( N log(n) ) 6 2

Problem wyboru zajęć # Problem: mamy zbiór par opisujących zajęcia (początek, koniec) oraz zasób do którego dobieramy zajęcia (sala wykładowa); należy wybrać największy podzbiór zajęć tak, aby nie kolidowały ze sobą. # Rozwiązanie: ze zbioru zajęć wybieramy wg jakiegoś kryterium zajęcie które nie koliduje z już wybranymi: najdłuższe najkrótsze kolidujące z najmniejszą liczbą zajęć jeszcze nie wybranych wybór pierwszego z posortowanych wg początku wybór pierwszego z posortowanych wg końca # Które optymalne? 7 Wybór zajęć ID start end 5 5 2 3 5 2 3 6 6 4 5 7 2 5 3 8 5 6 5 9 4 7 6 4 8 8 3 9 8 2 4 2 3 2 4 2 ID start end 5 4 5 7 8 8 (?) 2 4 8 Problem wyboru zajęć # Problem: mamy zbiór par opisujących zajęcia (początek, koniec) oraz zasób do którego dobieramy zajęcia (sala wykładowa); należy wybrać największy podzbiór zajęć tak, aby nie kolidowały ze sobą. # Rozwiązanie: z posortowanego po zakończeniu zajęć zbioru zajęć wybieramy pierwszy taki który nie przeszkadza już wybranym # Optymalność: tak, jak dowieść że jest to rozwiązanie optymalne? # Złożoność: O(n log (n)) 9 3

Minimalne sklejenie par #Problem: mamy ciąg n nieujemnych liczb, pobieramy dwie liczby i zastępujemy je sumą; jeśli koszt akcji to suma, to należy tak wyznaczyć kolejność dodawania, aby sumaryczny koszt był najmniejszy #Rozwiązanie: wybierz dwa najmniejsze elementy i zastąp je przez ich sumę #Optymalność: tak # Złożoność: O( n log(n) ) Minimalne sklejenie par 5 9 2 3 6 45 4 2 3 6 45 4 2 3 4 6 45 25 4 6 45 39 4 6 25 45 3 25 45 69 25 3 45 55 45 24 45 55 224 Minimalne sklejenie sąsiadów #Problem: analogicznie do poprzedniego, wybieramy jednak tylko liczby sąsiednie # Rozwiązanie: również analogiczne #Optymalność: nie, kontrprzykład { 5, 4, 4, 5} 2 4

Problem doboru zajęć do sal #Problem: zajęcia i sale, jak najmniej sal, tak aby wszystkie zajęcia mogły się odbyć #Rozwiązanie: kolorowaniegrafu przedziałów, zajęcia to wierzchołki, krawędź jeśli zajęcia kolidują ze sobą; bierzemy najmniejszy kolor przyporządkowujemy wierzchołkowi jeśli można, jeśli nie to zwiększamy numer koloru #Optymalność: nie #Złożoność:O( (V + E) * V) 3 Problem plecakowy dyskretny i ciągły #Problem dyskretny: mamy przedmioty z ich wartością i wagą, chcemy mieć największy koszt, ale ogranicza nas waga # Problem ciągły: możemy ciąć przedmioty #Rozwiązanie: liczymy wartość masy jednostkowej i wybieramy największą możliwą ilość # Optymalność: dyskretny nie, ciągły tak #Złożoność:O( n log( n) ) 4 6 5 4 3 2/3=4 /2=5 6/=6 2 $6 $ $2 $22 $6 $8 $24 5 5

Wydawanie reszty (proste) #Problem: musimy wydać najmniejszą liczbę monet; nominały: PLN, 2PLN, 5PLN, PLN, itd. #Rozwiązanie: zawsze wybieramy największy dostępny nominał # Optymalność: tak, jaki warunek dla nominałów? # Złożoność: O( n ) [gdy nominały są posortowane] #dla takich działa: c, c, c 2,.., c k ; c > i k #dla takich nie:, 4, 9, 2 (9+++) (4+4+4) 6 Kody Huffmana metoda kompresji danych a b c d e f razem Częstość(tys.) 45 3 2 6 9 5 *8 Ustalona dłu. 3 Zmienna dłu. 224 Czy ten kod jest optymalny? Jak dobrać kody? 7 Drzewo dla kodu o stałej długości 86 4 58 28 4 a:45 b:3 c:2 d:6 e:9 f:5 8 6

Drzewo dla kodu o zmiennej długości a:45 55 25 c:2 b:3 e:9 4 3 f:5 d:6 9 Algorytm zachłanny: Kody Huffmana #łączymy w drzewo liście o najmniejszych wagach, powstaje nowa waga, prawy syn to, lewy to # złożoność budowy drzewa O( n log(n) ) Kody prefiksowe Kodowanie: zamiana liter na odpowiednie kody Rozkodowanie: wędrowaniepo drzewie 2 Kody Huffmana David A. Huffman, MIT, 952 Algorytm bezstratny Użycie: MP3, JPG, PNG, PKZIP (przeważnie jako jeden z ostatnich etapów) Warianty: # kodujemy nie pojedyncze litery ale zbitki liter #wersja dynamiczna 2 7

Algorytmy zachłanne Własność wybory zachłannego #za pomocą lokalnych optymalnych (zachłannych) wyborów można uzyskać globalne optymalne rozwiązanie #decyzja o lokalnym wyborze nie zależy od przyszłych wyborów, nie zależy również od rozwiązań podproblemów #w każdym kroku następuje redukcja problemu do problemu mniejszego # konieczność udowodnienia poprawności 22 Algorytmy zachłanne Optymalna podstruktura #problem wykazuje optymalną podstrukturę, jeśli jest funkcją optymalnych rozwiązań podproblemów 23 Pytania? KONIEC 24 8