Algorytmy komputerowe. dr inż. Jarosław Forenc

Podobne dokumenty
Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Algorytm. a programowanie -

Informatyka 1. Wykład nr 7 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Struktura i funkcjonowanie komputera struktura połączeń, magistrala, DMA systemy pamięci komputerowych hierarchia pamięci, pamięć podręczna

Informatyka 1. Wykład nr 7 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Definicje. Algorytm to:

Algorytm. Krótka historia algorytmów

Matematyczne Podstawy Informatyki

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

1 Wprowadzenie do algorytmiki

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Podstawy programowania. Podstawy C# Przykłady algorytmów

Efektywność algorytmów

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

METODY OPISU ALGORYTMÓW KOMPUTEROWYCH

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Strategia "dziel i zwyciężaj"

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Technologie informacyjne Wykład VII-IX

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Algorytmy. Programowanie Proceduralne 1

Algorytm i złożoność obliczeniowa algorytmu

Technologie informacyjne - wykład 12 -

Algorytmy, reprezentacja algorytmów.

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Zaawansowane algorytmy i struktury danych

TEORETYCZNE PODSTAWY INFORMATYKI

MATERIAŁY POMOCNICZE NR 1 DO PRACOWNI Z PRZEMIOTU INFORMATYKA 1. Informacje podstawowe:

Algorytmika i pseudoprogramowanie

Wprowadzenie do algorytmiki

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

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

Algorytm. Krótka historia algorytmów

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

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Algorytmy. Programowanie Proceduralne 1

2.8. Algorytmy, schematy, programy

Algorytm. Algorytmy Marek Pudełko

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

Jeszcze o algorytmach

11. Blok ten jest blokiem: a. decyzyjnym b. końcowym c. operacyjnym

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Wstęp do programowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Sortowanie danych. Jolanta Bachan. Podstawy programowania

MATERIAŁY POMOCNICZE NR 1 DO PRACOWNI Z PRZEMIOTU INFORMATYKA 1. Informacje podstawowe:

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Podstawy Informatyki. Sprawność algorytmów

INFORMATYKA. Algorytmy.

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytmy i schematy blokowe

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Zadanie 1. Potęgi (14 pkt)

Algorytmy i struktury danych. wykład 2

Algorytmy w teorii liczb

1. Analiza algorytmów przypomnienie

MATERIAŁY POMOCNICZE NR 1 DO PRACOWNII Z PRZEMIOTU INFORMATYKA 1

dr inż. Jarosław Forenc

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

INFORMATYKA SORTOWANIE DANYCH.

Algorytmy i struktury danych

Wprowadzenie do złożoności obliczeniowej

Wstęp do Informatyki

Algorytmy i struktury danych

Sortowanie - wybrane algorytmy

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

Metodyki i techniki programowania

Analiza algorytmów zadania podstawowe

Programowanie dynamiczne

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Podstawy i języki programowania

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Język ludzki kod maszynowy

Metodyki i techniki programowania

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

POLITECHNIKA OPOLSKA

Definicja algorytmu brzmi:

Wstęp do informatyki- wykład 2

POLITECHNIKA OPOLSKA

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

Wstęp do informatyki

Algorytmy i Struktury Danych.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

ALGORYTMY I PROGRAMY

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

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

Podstawy Programowania Algorytmy i programowanie

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy Informatyki. Algorytmy i ich poprawność

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

Transkrypt:

Rok akademicki 2010/2011, Wykład nr 9/10 2/38 Plan wykładu nr 9/10 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2010/2011 Algorytmy komputerowe definicja algorytmu komputerowego sposoby opisu algorytmów klasyfikacje algorytmów rekurencja złożoność obliczeniowa algorytmu Wykład nr 9/10 (03/17.06.2011) Rok akademicki 2010/2011, Wykład nr 9/10 3/38 Rok akademicki 2010/2011, Wykład nr 9/10 4/38 Algorytm - definicje Definicja 1 Skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania Definicja 2 Metoda rozwiązania zadania Definicja 3 Ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych zwraca żądane dane wyjściowe zwane wynikiem działania algorytmu Algorytmy Słowo algorytm pochodzi od nazwiska Muhammada ibn-musy al-chuwarizmiego (po łacinie pisanego jako Algorismus), matematyka perskiego z IX wieku Badaniem algorytmów zajmuje się algorytmika Algorytm może zostać zaimplementowany w postaci programu komputerowego Przetłumaczenie algorytmu na wybrany język programowania nazywane jest też kodowaniem algorytmu Ten sam algorytm może być zaimplementowany (zakodowany) w różny sposób przy użyciu różnych języków programowania

Rok akademicki 2010/2011, Wykład nr 9/10 5/38 Rok akademicki 2010/2011, Wykład nr 9/10 6/38 Podstawowe cechy algorytmu Algorytm powinien: Posiadać dane wejściowe (w ilości większej lub równej zeru) pochodzące z dobrze zdefiniowanego zbioru Zwracać pewien wynik Być precyzyjnie zdefiniowany (każdy krok algorytmu musi być jednoznacznie określony) Być zawsze poprawny (dla każdego z założonego dopuszczalnego zestawu danych wejściowych) Sposoby opisu algorytmów 1. Opis słowny algorytmu (w języku naturalnym) 2. Opis w punktach (lista kroków) 3. Opis w postaci schematu blokowego 4. Z zastosowaniem pseudokodu, czyli niezbyt formalnej odmiany języka programowania 5. W wybranym języku programowania Zawsze kończyć się po skończonej liczbie kroków (powinna istnieć poprawnie działająca reguła stopu algorytmu) Być efektywny (jak najkrótszy czas wykonania i jak najmniejsze zapotrzebowanie na pamięć) Rok akademicki 2010/2011, Wykład nr 9/10 7/38 Rok akademicki 2010/2011, Wykład nr 9/10 8/38 Opis słowny algorytmu Polega na podaniu kolejnych czynności, które należy wykonać, aby otrzymać oczekiwany efekt końcowy Przypomina przepis kulinarny z książki kucharskiej lub instrukcję obsługi urządzenia, np. Algorytm: Tortilla ( Podróże kulinarne R. Makłowicza) Dane wejściowe: 0,5 kg ziemniaków, 100 g kiełbasy Chorizo, 8 jajek Dane wyjściowe: gotowa Tortilla Opis algorytmu: Ziemniaki obrać i pokroić w plasterki. Kiełbasę pokroić w plasterki. Ziemniaki wrzucić na gorącą oliwę na patelni i przyrumienić z obu stron. Kiełbasę wrzucić na gorącą oliwę na patelni i przyrumienić z obu stron. Ubić jajka i dodać do połączonych ziemniaków i kiełbasy. Dodać sól i pieprz. Usmażyć z obu stron wielki omlet nadziewany chipsami ziemniaczanymi z kiełbaską. Lista kroków Lista kroków jest to uporządkowany opis wszystkich czynności, jakie należy wykonać podczas realizacji algorytmu Krok jest to pojedyncza czynność realizowana w algorytmie Kroki w algorytmie są numerowane, operacje wykonywane są zgodnie z rosnącą numeracją kroków Jedynym odstępstwem od powyższej reguły są operacje skoku (warunkowe lub bezwarunkowe), w których jawnie określa się numer kolejnego kroku Przykład (instrukcja otwierania wózka-specerówki): Krok 1: Krok 2: Krok 3: Zwolnij element blokujący wózek Rozkładaj wózek w kierunku kółek Naciskając nogą dolny element blokujący aż do zatrzaśnięcia, rozłóż wózek do pozycji przewozowej

Rok akademicki 2010/2011, Wykład nr 9/10 9/38 Rok akademicki 2010/2011, Wykład nr 9/10 10/38 Schematy blokowe Schemat blokowy zawiera plan algorytmu przedstawiony w postaci graficznej struktury elementów zwanych blokami Każdy blok zawiera informację o operacji, która ma być w nim wykonana Pomiędzy blokami umieszczone są linie przepływu (strzałki) określające kolejność wykonywania bloków algorytmu Zależnie od typu wykonywanej operacji stosowane są różne kształty bloków Podstawowe symbole stosowane na schematach blokowych: linia przepływu (połączenie) występuje w postaci linii zakończonej strzałką określa kierunek przemieszczania się po schemacie Schematy blokowe Podstawowe symbole stosowane na schematach blokowych: STOP blok startowy, początek algorytmu wskazuje miejsce rozpoczęcia algorytmu może występować tylko jeden raz blok końcowy, koniec algorytmu wskazuje miejsce zakończenia algorytmu musi występować przynajmniej jeden raz blok wykonawczy, blok funkcyjny zawiera polecenie (elementarną instrukcję) instrukcją może być podstawienie, operacja arytmetyczna, wprowadzenie danych lub wyprowadzenie wyników Rok akademicki 2010/2011, Wykład nr 9/10 11/38 Rok akademicki 2010/2011, Wykład nr 9/10 12/38 Schematy blokowe Podstawowe symbole stosowane na schematach blokowych: blok warunkowy (decyzyjny, porównujący) sprawdza umieszczony w nim warunek i dokonuje wyboru tylko jednej drogi wyjściowej połączenia wychodzące z bloku: - T lub TAK - gdy warunek jest prawdziwy - N lub NIE - gdy warunek nie jest prawdziwy Czasami wprowadzanie i wyprowadzanie danych oznacza się dodatkowym blokiem wejścia-wyjścia Pseudokod Pseudokod (pseudojęzyk) - jest to uproszczona wersja języka programowania Symbole geometryczne występujące na schematach blokowych zastępowane są zdaniami w języku ojczystym Często pojawiają się w nim zwroty pochodzące z języków programowania Zapis w pseudokodzie może być łatwo przetłumaczony na wybrany język programowania blok wejścia-wyjścia poprzez ten blok wprowadzane są dane i wyprowadzane wyniki

Rok akademicki 2010/2011, Wykład nr 9/10 13/38 Rok akademicki 2010/2011, Wykład nr 9/10 14/38 Opis w języku programowania Zapis programu w konkretnym języku programowania Najczęściej stosowane języki to Pascal i C Przykłady opisu algorytmów Algorytm Euklidesa - największy wspólny dzielnik dwóch liczb Lista kroków: Dane wejściowe: niezerowe liczby naturalne a i b Dane wyjściowe: NWD(a,b) Kolejne kroki: 1. Czytaj liczby a i b 2. Dopóki a i b są większe od zera, powtarzaj krok 3, a następnie przejdź do kroku 4 3. Jeśli a jest większe od b, to weź za a resztę z dzielenia a przez b, w przeciwnym razie weź za b resztę z dzielenia b przez a 4. Przyjmij jako największy wspólny dzielnik tę z liczb a i b, która pozostała większa od zera 5. Drukuj NWD(a,b) Rok akademicki 2010/2011, Wykład nr 9/10 15/38 Rok akademicki 2010/2011, Wykład nr 9/10 16/38 Przykłady opisu algorytmów Algorytm Euklidesa - największy wspólny dzielnik dwóch liczb Przykłady opisu algorytmów Algorytm Euklidesa - największy wspólny dzielnik dwóch liczb Schemat blokowy: NWD(1675,3752) =? a b Dzielenie większej liczby przez mniejszą Zamiana 1675 3752 b/a = 3752/1675 = 2 reszta 402 b = 402 1675 402 a/b = 1675/402 = 4 reszta 67 a = 67 67 402 b/a = 402/67 = 6 reszta 0 b = 0 67 0 KONIEC NWD(1675,3752) = 67

Rok akademicki 2010/2011, Wykład nr 9/10 17/38 Rok akademicki 2010/2011, Wykład nr 9/10 18/38 Przykłady opisu algorytmów Algorytm Euklidesa - największy wspólny dzielnik dwóch liczb Pseudokod: Przykłady opisu algorytmów Algorytm Euklidesa - największy wspólny dzielnik dwóch liczb Język C: NWD(a,b) while a>0 i b>0 do if a>b then a a mod b b b mod a if a>0 then return a return b int NWD(int a, int b) { while (a>0 && b>0) if (a>b) a = a % b; b = b % a; if (a>0) return a; return b; } Rok akademicki 2010/2011, Wykład nr 9/10 19/38 Rok akademicki 2010/2011, Wykład nr 9/10 20/38 Klasyfikacje algorytmów Paradygmaty tworzenia programów komputerowych: strategia dziel i zwyciężaj programowanie dynamiczne algorytmy zachłanne programowanie liniowe algorytmy siłowe (brute force) algorytmy probabilistyczne heurystyka Strategia dziel i zwyciężaj Strategia dziel i zwyciężaj (ang. divide and conquer) jest strategią konstruowania algorytmów, jedną z najefektywniejszych metod w informatyce W strategii tej zazwyczaj rekurencyjnie dzielimy problem na dwa lub więcej mniejszych problemów tego samego (lub podobnego) typu tak długo, aż stanie się on wystarczająco prosty do bezpośredniego rozwiązania Rozwiązania otrzymane dla mniejszych podproblemów są scalane w celu uzyskania rozwiązania całego zadania Przykłady zastosowań: sortowanie szybkie (quicksort) wyszukiwanie binarne - sprawdzenie czy element znajduje się w uporządkowanej tablicy, jeśli tak, to zwraca jego indeks

Rok akademicki 2010/2011, Wykład nr 9/10 21/38 Rok akademicki 2010/2011, Wykład nr 9/10 22/38 Programowanie dynamiczne Konstrukcja programu sformułowana jest w trzech etapach: Koncepcja: Inicjacja: Progresja: stworzenie rekurencyjnego modelu rozwiązania problemu (wraz z jednoznacznym określeniem przypadków elementarnych) stworzenie tablicy, zawierającej rozwiązania przypadków elementarnych i obliczonych na ich podstawie podproblemów wpisanie do tablicy wartości dla przypadków elementarnych obliczenie i wpisanie do tablicy rozwiązania problemu wyższego rzędu (na podstawie formuły rekurencyjnej i już wpisanych wartości) postępowanie w ten sam sposób do osiągnięcia pożądanej wartości Programowanie dynamiczne - przykład Koncepcja: (F 10 w ciągu Fibonacciego) model rekurencyjny, przypadki elementarne, tablica z rozwiązaniem F 0 = 0, F1 = 1, Fn = Fn 1 + Fn 2 n 0 1 2 3 4 5 6 7 8 9 10 F n Inicjacja: Progresja: wpisanie do tablicy wartości dla przypadków elementarnych n 0 1 2 3 4 5 6 7 8 9 10 F n 0 1 obliczenie rozwiązań problemów wyższego rzędu aż do osiągnięcia pożądanej wartości i wpisanie ich do tablicy n 0 1 2 3 4 5 6 7 8 9 10 F n 0 1 1 2 3 5 8 13 21 34 55 Rok akademicki 2010/2011, Wykład nr 9/10 23/38 Rok akademicki 2010/2011, Wykład nr 9/10 24/38 Algorytmy zachłanne Algorytm zachłanny - w celu rozwiązania pewnego zadania w każdym kroku dokonuje się zachłannego, tj. najlepiej rokującego w danym momencie wyboru rozwiązania częściowego Algorytm podejmuje decyzję lokalnie optymalną, dokonując wyboru wydającego się w danej chwili najlepszym Dokonywany lokalnie najkorzystniejszy wybór ma w założeniu prowadzić do znalezienia globalnego optymalnego rozwiązania Algorytmy zachłanne stosowane są przede wszystkim w optymalizacji Programowanie liniowe Programowanie liniowe - warunki ograniczające oraz funkcja celu mają postać liniową, np. warunki ograniczające: a11 + a 2 2 + K+ a n n α a11 + a 2 2 + K+ a n n α a11 + a 2 2 + K + a n n = α Zadanie polega na zmaksymalizowaniu (zminimalizowaniu) funkcji celu: f = α + c11 + c22 + K+ c n n wiele problemów można sprowadzić do maksymalizacji lub minimalizacji pewnej funkcji celu, przy ograniczonych zasobach i antagonistycznych warunkach programowanie liniowe znalazło szerokie zastosowanie w teorii decyzji, np. do optymalizacji planu produkcyjnego

Rok akademicki 2010/2011, Wykład nr 9/10 25/38 Rok akademicki 2010/2011, Wykład nr 9/10 26/38 Programowanie liniowe Fabryka produkuje urządzenia A i B. W ciągu jednego dnia można wytworzyć łącznie 200 urządzeń. Wyprodukowanie urządzenia A zajmuje 3 roboczogodziny, a B - 4 roboczogodziny. Dzienna liczba dostępnych roboczogodzin wynosi 600. W ciągu jednego dnia należy wyprodukować min. 50 urządzeń A i min. 50 urządzeń B. Zysk ze sprzedaży urządzenia A to 1000 PLN, a B - 1200 PLN. Ile urządzeń A i B należy dziennie wyprodukować, aby zysk był jak największy? Warunki ograniczające: Funkcja celu: 3, A A 200 A + B f = 1000 A + 1200 B + 4 B B 50 600 Algorytmy siłowe Algorytm siłowy (brute force) - opiera się na sukcesywnym sprawdzaniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu Zazwyczaj nieoptymalny, ale najprostszy w implementacji W programowaniu termin ten odnosi się do dowolnego algorytmu, który rozwiązuje problem przez weryfikację i ocenę wszystkich wariantów postępowania Rok akademicki 2010/2011, Wykład nr 9/10 27/38 Rok akademicki 2010/2011, Wykład nr 9/10 28/38 Algorytmy probabilistyczne Algorytmy probabilistyczne - algorytm Monte Carlo Algorytmy można podzielić na deterministyczne i probabilistyczne Dane wejściowe Algorytm deterministyczny Dane wyjściowe Dane wejściowe Algorytm probabilistyczny Dane wyjściowe Generator liczb losowych Działanie algorytmu deterministycznego jest całkowicie zależne od warunków początkowych (wejście), tzn. dla takich samych danych wejściowych algorytm zawsze zwraca taki sam wynik Algorytm probabilistyczny albo randomizowany (randomized algorithm) do swojego działania używa losowości (generatora liczb pseudolosowych) Obliczanie przybliżonej wartości całki oznaczonej metodą Monte Carlo: Dla funkcji f(), której całkę chcemy obliczyć w przedziale [ p, k ] wyznaczamy prostokąt obejmujący pole pod wykresem tej funkcji o wysokości h i długości podstawy ( k - p ) Losujemy n punktów i zliczamy te punkty n w, które wpadają w pole pod wykresem funkcji Wartość całki obliczana jest na podstawie wzoru przybliżonego: I k = p k I = f ( ) d p nw f ( ) d h( k p ) n

Rok akademicki 2010/2011, Wykład nr 9/10 29/38 Rok akademicki 2010/2011, Wykład nr 9/10 30/38 Rekurencja Rekurencja - przykłady Rekurencja lub rekursja - jest to odwoływanie się np. funkcji do samej siebie Rozwiązanie danego problemu wyraża się za pomocą rozwiązań tego samego problemu, ale dla danych o mniejszych rozmiarach W matematyce mechanizm rekurencji stosowany jest dość często do definiowania lub opisywania algorytmów silnia liczby n 1 n! = n(n 1)! dla dla n = 0 n 1 Nie zawsze rozwiązanie rekurencyjne prowadzi do rozwiązania efektywnego, czasem prowadzi do obniżenia efektywności programu, np. zwiększenia zapotrzebowanie programu na pamięć int silnia(int n) { if (n==0) return 1; return n*silnia(n-1); } Rok akademicki 2010/2011, Wykład nr 9/10 31/38 Rok akademicki 2010/2011, Wykład nr 9/10 32/38 Rekurencja - przykłady Rekurencja - przykłady definicja ciągu Fibonacciego największy wspólny dzielnik - algorytm Euklidesa F n 0 dla n = 0 = 1 dla n = 1 Fn 1 + Fn 2 dla n > 1 NWD(a, b) a = NWD(b,a mod b) dla dla b = 0 b 1 int F(int n) { if (n==0) return 0; if (n==1) return 1; return F(n-1) + F(n-2); } int NWD(int a, int b) { if (b==0) return a; return NWD(b,a % b); }

Rok akademicki 2010/2011, Wykład nr 9/10 33/38 Rok akademicki 2010/2011, Wykład nr 9/10 34/38 Złożoność obliczeniowa W celu rozwiązania danego problemu obliczeniowego szukamy algorytmu najbardziej efektywnego, tzn.: najszybszego o możliwie małym zapotrzebowaniu na pamięć Do oceny efektywności programu służy złożoność obliczeniowa nazywana także kosztem algorytmu Złożoność obliczeniowa algorytmu jest to ilość zasobów (czas, pamięć) potrzebnych do jego działania Złożoność obliczeniowa algorytmu jest funkcją rozmiaru danych wejściowych (np. sortowanie tablicy - im większa tablica tym więcej zasobów jest potrzebnych do jej posortowania) Złożoność obliczeniowa Złożoność czasowa: Miarą złożoności czasowej jest liczba operacji podstawowych (dominujących) w zależności od rozmiaru danych wejściowych Operacje podstawowe to np. podstawienie, porównanie, operacja arytmetyczna Pomiar czasu zegarowego nie jest stosowany ze względu na silną zależność od implementacji algorytmu, zastosowanego kompilatora, komputera, doświadczenia programisty Złożoność pamięciowa: Złożoność pamięciowa jest miarą wykorzystania pamięci (liczba komórek pamięci) Rok akademicki 2010/2011, Wykład nr 9/10 35/38 Rok akademicki 2010/2011, Wykład nr 9/10 36/38 Złożoność obliczeniowa Złożoność obliczeniowa zależy od postaci danych na jakich algorytm operuje Dla pewnych, specyficznych danych algorytm może wykonać się bardzo szybko, dla innych zaś znacznie wolniej Złożoność pesymistyczna: Odpowiada najbardziej niesprzyjającym dla algorytmu danym Złożoność średnia: Złożoność uśredniona po wszystkich możliwych zestawach danych Złożoność dla typowych danych wejściowych Notacja O Wyraża złożoność matematyczną algorytmu Po literze O występuje wyrażenie w nawiasach zawierające literę n, która oznacza liczbę elementów, na której działa algorytm Za miarę dobroci algorytmu przyjmuje się liczbę wykonywanych w nim elementarnych operacji, np. dodawanie, porównywanie O(n) - złożoność algorytmu jest prostą funkcją liczby elementów (jeśli sortowanie 1000 elementów zajmuje 1 s, to sortowanie (2000 elementów zajmie 2 s) O(n 2 ) - czas konieczny do wykonania algorytmu rośnie wraz z kwadratem liczby elementów (przy podwojeniu liczby elementów ich obsługa będzie trwała cztery razy dłużej)

Rok akademicki 2010/2011, Wykład nr 9/10 37/38 Rok akademicki 2010/2011, Wykład nr 9/10 38/38 Notacja O Koniec wykładu nr 9/10 Porównanie najczęściej występujących złożoności: Elementy O(log n) O(n) O(n log n) O(n 2 ) O(2 n ) 10 3 10 33 100 1024 100 7 100 664 10 000 1,27 10 30 1 000 10 1 000 9 966 1 000 000 1,07 10 301 Dziękuję za uwagę! 10 000 13 10 000 132 877 100 000 000 1,99 10 3010 O(log n) - złożoność logarytmiczna O(n) - złożoność liniowa O(n log n) - złożoność liniowo-logarytmiczna O(n 2 ) - złożoność kwadratowa O(2 n ) - złożoność wykładnicza