Algorytmy Wydział Matematyki i Informatyki Uniwersytet Łódzki

Slides:



Advertisements
Podobne prezentacje
Instrukcje - wprowadzenie
Advertisements

Metody numeryczne część 1. Rozwiązywanie układów równań liniowych.
METODY ANALIZY PROGRAMÓW
Algorytmika w szkole podstawowej
PROGRAMOWANIE STRUKTURALNE
ALGORYTM Co to jest algorytm?
Badania operacyjne. Wykład 2
Wykład no 11.
Teoretyczne podstawy informatyki
PODSUMOWANIE.
ZŁOŻONOŚĆ OBLICZENIOWA
Opracowała: Elżbieta Fedko
Macierze Maria Guzik.
ALGORYTMY.
Algorytmy.
Algorytmy i struktury danych
Matura z informatyki Arkusz I.
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
JAKO CZĘŚĆ NASZEGO ŻYCIA
Algorytmy i algorytmika Opracowanie: Teresa Szczygieł
Wstęp do interpretacji algorytmów
dr Anna Kwiatkowska Instytut Informatyki
Zapis informacji Dr Anna Kwiatkowska.
Algorytmy Marek Pudełko
Algorytmy i algorytmika Opracowanie: Maciej Karanowski
ALGORYTMY Opracowała: ELŻBIETA SARKOWICZ
Teoretyczne podstawy informatyki
ALGORYTMY.
Algorytmy.
Agata Łysakowska Klasa III „n”
Algorytmy Opracowanie: Maria Skalska na podstawie „Informatyka 2000” wydawnictwa Czarny Kruk.
ALGORYTMY Martyna K. Luiza K..
M. Muraszkiewicz Instytut Informatyki, Politechnika Warszawska
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Algorytmy.
PORZĄDEK WŚRÓD INFORMACJI KLUCZEM DO SZYBKIEGO WYSZUKIWANIA
20 września 2003r. Centrum Kształcenia Ustawicznego im. St. Staszica w Koszalinie Wstęp do algorytmiki Autor: Marek Magiera.
Prowadzący: Dr inż. Jerzy Szczygieł
Budowanie schematu blokowego
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Algorytmy i struktury danych
ALGORYTMY.
Algorytmy.
EXCEL Wykład 4.
A. Jędryczkowski – 2007 r.. Algorytmem nazwiemy ścisły przepis postępowania, którego wykonanie gwarantuje otrzymanie danych wynikowych z dostarczonych.
Źródła błędów w obliczeniach numerycznych
MS Excel - wspomaganie decyzji
Metody numeryczne metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane tą drogą wyniki są na ogół przybliżone, jednak.
Algorytmika.
Wprowadzenie do algorytmiki
ALGORYTMY Co to jest algorytm ? Cechy algorytmu Budowa algorytmów
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Obliczalność czyli co da się policzyć i jak Model obliczeń maszyna licznikowa dr Kamila Barylska.
Podstawowa wiedza o algorytmach
Algorytmy i struktury danych
Algorytmy- Wprowadzenie do programowania
opracowała: Anna Mikuć
ALGORYTMY-WPROWADZENIE. ALGORYTMY W ŻYCIU CODZIENNYM
EXCEL Wstęp do lab. 4. Szukaj wyniku Prosta procedura iteracyjnego znajdowania niewiadomej spełniającej warunek będący jej funkcją Metoda: –Wstążka Dane:
Złożoność obliczeniowa algorytmów
Algorytmy – wprowadzenie
Algorytmika Skąd wziąć przepis na sukces (w programowaniu)? Czyli: dlaczego warto planować poszczególne etapy rozwiązywania zadania programistycznego?
Wstęp do interpretacji algorytmów
Wstęp do programowania Wykład 1
Algorytmy. Co to jest algorytm? Przepis prowadzący do rozwiązania zadania.
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Algorytmy i algorytmika Opracowanie: Teresa Szczygieł
Efektywność algorytmów
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Algorytmy Wydział Matematyki i Informatyki Uniwersytet Łódzki Wioletta Karpińska Wydział Matematyki i Informatyki Uniwersytet Łódzki Wykład na ZUM I w 2010

Informacje wstępne Strona: http://www.math.uni.lodz.pl/~karpinw Egzamin: do ustalenia. Programowanie: http://www.instalki.pl/programy/download/programowanie/DevCpp5.php DevC++ jest w pełni funkcjonalnym darmowym środowiskiem programistycznym C/C++ zawierającym wielookienkowy edytor kodu źródłowego z podświetlaniem składni, kompilator, debbuger, linker. Środowisko posiada także narzędzie do tworzenia pakietów instalacyjnych napisanych programów. Instalacja jest prosta i ogranicza się do postępowania zgodnie z instrukcjami.

Literatura: Banachowski L., Kreczmar A.: Elementy analizy algorytmów. Banachowski L., Diks K., Rytter W.: Algorytmy i struktury danych. Cormen T.H., Leiserson Ch.E., Rivest R.L.: Wprowadzenie do algorytmów . http://math.uni.lodz.pl/~karpinw/zadania/Talgorytmiczne/Cormen.pdf Ross K.A., Wright Ch.R.B.: Matematyka dyskretna. Sedgewick R.: Algorytmy w C++. Sedgewick R., Flajolet P.: An Introduction to the Analysis of Algorithms.

Plan zajęć Ogólnie o algorytmach Podstawowe narzędzia matematyczne Poprawność algorytmów Złożoność obliczeniowa i pamięciowa Algorytmy rekurencyje Wybrane algorytmy sortowania Struktury danych Algorytmy przeszukiwania Algorytmy numeryczne

Co to jest algorytm? Algorytm – w matematyce oraz informatyce skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Słowo "algorytm" pochodzi od starego angielskiego słowa algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich (w odróżnieniu od abacism - przy pomocy abakusa), które z kolei wzięło się od nazwiska Muhammed ibn Musa Alchwarizmi (أبو عبد الله محمد بن موسى الخوارزمي) matematyka perskiego z IX wieku[1]. Źródło: Wikipedia

Co to jest algorytm? Algorytm -opis czynności składających się na proces przetwarzania zadanych obiektów początkowych (wejściowych) w celu otrzymania obiektów wynikowych (wyjściowych). Algorytm możemy również traktować jako sposób rozwiązywania konkretnego problemu. Postawienie problemu polega na sprecyzowaniu wymagań dotyczących relacji między danymi wejściowymi i wyjściowymi, a algorytm opisuje właściwą procedurę, która zapewnia, że ta relacja zostanie osiągnięta.

Co to jest algorytm? Algorytm – metoda rozwiązywania danego problemu, która spełnia warunki: Istnieje określony stan po-czątkowy Istnieje wyróżnio-ny koniec Warunek jednoznaczności - jednoznaczna interpretacja poszczególnych kroków metody Warunek efektywności – cel musi być osiągany w pewnym skończonym i możliwym do przyjęcia przez użytkownika czasie Warunek uniwersalności – możliwość stosowania metody do całej klasy zagadnień Warunek dyskretności – skończona ilość operacji potrzebnych do rozwiązania

Co to jest algorytm? Operacje składowe algory-tmu Sprzęt Dowolny wykonawca algorytmu (w szczególności komputer) Język opisu algory-tmu Dowolny, zrozumiały dla wykonawcy Schemat przetwa-rzania Operacje składowe algory-tmu Możliwe do wykonania przez wykonawcę Obiekty wejściowe Algorytm Obiekty wyjściowe

Przykład 1. Przepis kulinarny. Język opisu naturalny Dane wejściowe 22 dag twardej czekolady półsłodkiej, 2 łyżki wody, 1/4 filiżanki cukru pudru, 6 jajek, . . . . Dane wyjściowe bity krem czekoladowy (kuchnia francuska) Opis algorytmu Włóż czekoladę z dwiema łyżkami wody do garnka o podwójnym dnie. Kiedy czekolada się rozpuści domieszaj cukier puder; dodaj po trochu masło. Odstaw. Ubijaj żółtka około 5 minut, aż staną się gęste i nabiorą koloru cytrynowego. Delikatnie dołóż czekoladę. Ponownie lekko podgrzej, aby rozpuścić czekoladę, jeśli to będzie konieczne. Domieszaj rum i wanilię. Ubijaj białka aż do spienienia. Ubijając dodaj dwie łyżki cukru i ubijaj dalej, aż utworzą się sztywne pagórki. Delikatnie połącz białka z masą czekoladowo-żółtkową. Wylej do oddzielnych naczyń, które będą podane na stół. Ochładzaj przez co najmniej 4 godziny. Wedle życzenia, podawaj z bitą śmietaną. Wyjdzie z tego 6 do 8 porcji.

Przykład 2. Przepis kulinarny. Język opisu naturalny Dane wejściowe 1 kg świeżych węgierek , 10 dag suszonych śliwek bez pestek, 3 dag rodzynków, laska wanilii, 50 dag cukru, po pół litra spirytusu i wódki Dane wyjściowe śliwowica (kuchnia polska) Opis algorytmu Owoce umyć, osuszyć, wypestkować (1/10 zostawić) i wraz z umytymi rodzynkami, suszonymi śliwkami i odłożonymi pestkami włożyć do słoja. Zasypać owoce cukrem, a gdy puszczą sok, zalać spirytusem i odstawić na 3 tygodnie. Od czasu do czasu potrząsać słojem. Zlać alkohol do pustego słoja, zamknąć i odstawić. Do naczynia z owocami wlać wódkę, włożyć wanilię, zamknąć go i odstawić. Po 2 tygodniach zlać nalew, osączając owoce. Wymieszać oba nalewy, starannie przefiltrować, rozlać do butelek, zakorkować i odstawić na 6 miesięcy w zaciemnione chłodne miejsce.

Przykład 1 i 2. Przepis kulinarny Podstawowe koncepcje algorytmiczne: sekwencje czynności warunkowe wykonanie powtarzanie, aż zajdzie warunek zestawy czynności zdefiniowane wcześniej – poziom szczegółowości CZAS!

Przykład 3. NWD (algorytm szkolny) Przykład 3. NWD (algorytm szkolny). Język opisu: lista kroków z pojęciami abstrakcyjnymi. Dane wejściowe a, b – liczby naturalne większe od 1 Dane wyjściowe c=NWD(a,b) Opis algorytmu Wypisz czynniki pierwsze liczby a, powstaje lista A={a1,a2,...,an} (mogą wystąpić powtórzenia) Wypisz czynniki pierwsze liczby b, powstaje lista B={b1,b2,...,bm} (mogą wystąpić powtórzenia) Utwórz C jako listę wspólnych elementów list A i B (też z ewentualnymi powtórzeniami) Oblicz c jako iloczyn wszystkich elementów z C (jeśli C jest pusta to c=1) Wypisz c i zatrzymaj się.

Przykład 3. NWD (algorytm szkolny) Przykład 3. NWD (algorytm szkolny). Język opisu: lista kroków z pojęciami abstrakcyjnymi. Widać, jak algorytm działa dla małych liczb. Dla dużych: Jak znajdować dzielniki? Jak obliczać część wspólną list? Rozwiązanie problemu: Algorytm Euklidesa – ćw.

Przykład 4. Sumowanie listy płac Przykład 4. Sumowanie listy płac. Język opisu: lista kroków w języku naturalnym Dane wejściowe lista ankiet osobowych (nazwisko, płaca, inne) Dane wyjściowe suma zarobków wszystkich osób Opis algorytmu zanotuj “na boku” liczbę 0 przewertuj kolejno ankiety dodając zarobki każdej osoby do liczby “na boku” kiedy osiągniesz koniec listy przedstaw wartość liczby “na boku” jako wynik

Przykład 4. Sumowanie listy płac Przykład 4. Sumowanie listy płac. Język opisu: lista kroków w języku naturalnym Ważna cecha przykładu: Wielkość programu taka sama dla dowolnie długich list

Halting problem – bez rozwiązania algorytmicznego Problem zatrzymania – algorytm ma orzekać, czy dany program komputerowy kiedykolwiek wykona wszystkie procedury i zatrzyma się Dane wejściowe Program komputerowy Dane wejściowe dla tego programu Dane wyjściowe Odpowiedź „TAK” (program zatrzyma się po wykonaniu wszystkich zawartych w nim poleceń) Lub odpowiedź „NIE” (program nie zatrzyma się) Rozwiązanie Nie istnieje algorytm, który w skończonym czasie orzeknie, czy dany program dla określonych danych wejściowych zapętli się czy nie.

Krótka historia algorytmiki IV w. p.n.e. Euklides: znajdowanie największego wspólnego dzielnika VIII/IX w. n.e.: Muhammed Alchwarizmi: dodawanie, odejmowanie, mnożenie, dzielenie liczb dziesiętnych (Algorismus – nazwisko po łacinie) 1822 Charles Babbage: projekt “maszyny różnicowej”, mechaniczny kalkulator (budowa niedokończona)

Krótka historia algorytmiki 1849 Babbage: maszyna analityczna - projekt mechanicznego komputera, sterowanego kartami Jacquarda (zrealizowany ostatecznie w 1991 w Science Museum, Londyn), czyli maszyny wykonującej dowolne programy 1850 Ada Augusta hrabina Lovelace: programy dla maszyny analitycznej Babbage’a   1930-te – Alan Turing, Kurt Goedel, Emil Post, Alonzo Church, Stephen Kleene, Andriej Markow : teoria algorytmów, możliwości i ograniczenia algorytmiki

Krótka historia algorytmiki 1937 – maszyna MARK 1 – pierwsza działająca maszyna ze sterowaniem sekwencyjnym (przekaźniki elektromagnetyczne), sterowana za pomocą taśmy papierowej, 200 op./sek. 1946 – Maszyna Einiac –pierwsza maszyna elektroniczna (lampy elektronowe) – 6 tys. op./sek. 1958 – maszyny tranzystorowe, 20 tys. op./sek.

Krótka historia algorytmiki 1964 – maszyny mikroukładowe (układy scalone), 100 tys. op/sek 1970 – maszyny na zintegrowanych elementach scalonych, 10 mln. op/sek 1970-te do dzisiaj: rozkwit algorytmiki

Komputer = sprzęt + oprogramowanie Dane +algorytm = wyniki Realizacja algorytmu Uniwersalne urządzenie do wykonywania algorytmów związanych z przetwarzaniem informacji Komputer = sprzęt + oprogramowanie Obiekty przetwarzane przez program: Dane Dane +algorytm = wyniki Zapis algorytmu zrozumiały dla komputera w Języku programowania – U nas C++ Algorytmy zrozumiałe dla komputera: Programy

Pseudojęzyk

Pseudojęzyk

Pseudojęzyk

To zależy m.in. od przeznaczenia i oczekiwań użytkowników. Analiza algorytmów Dział informatyki teoretycznej zajmujący się poszukiwaniem najlepszych i najbardziej efektywnych algorytmów do zadań komputerowych. Efektywny algorytm: Najszybszy? Wymagający najmniejszych zasobów pamięci? Prostota algorytmu? To zależy m.in. od przeznaczenia i oczekiwań użytkowników.

Zasoby potrzebne do wykonania algorytmu Analiza algorytmów Zasoby potrzebne do wykonania algorytmu Inne Szerokość kanału komunikacyj-nego Pamięć Czas działania

Analiza algorytmów Nie możemy precyzyjnie przewidzieć ilości zasobów – zbyt dużo zmiennych czynników. Wyodrębniamy główne parametry i poddajemy je analizie. Pomijamy wiele szczegółów – analiza jest przybliżona. Cel osiągamy – obiektywne porównanie różnych algorytmów rozwiązania tego samego problemu i wybranie najlepszego.

Analiza algorytmów Badamy problem Czy możliwe jest rozwiązanie go na komputerze w skończonym i możliwym do zaakceptowania czasie Czy już istnieje algorytm rozwiązujący problem Czy mamy jeszcze czego szukać, czy już mamy algorytm optymalny Jeśli nie, to pracujemy nad lepszym rozwiązaniem Pytanie: Czy algorytm przez nas zaproponowany jest poprawny?

Analiza algorytmów Intuicja Poprawny jest, gdy: Dla każdego zestawu danych wejściowych zatrzymuje się i daje dobry wynik. Poprawność dokładniej zostanie omówiona na oddzielnym wykładzie. Intuicja

Ocena przydatności algorytmu Złożoność obliczeniowa – podstawowa wielkość stanowiąca miarę przydatności algorytmu. Obejmuje problemy związane z implementacją i efektywnością algorytmu.

Ocena przydatności algorytmu Złożoność obliczeniowa – funkcja zależna od danych wejściowych, a dokładnie od rozmiaru danych wejściowych. Rozmiar danych wejściowych – liczba pojedynczych danych wchodzących w skład całego zestawu danych wejściowych. Przykład: Problem Rozmiar danych wejściowych Wyznaczenie wartości wielomianu w punkcie Stopień wielomianu Wyznaczenie n-tej potęgi liczby rzeczywistej Wykładnik potęgi Mnożenie dwóch liczb całkowitych Całkowita liczba bitów potrzebnych do reprezentacji tych liczb w postaci binarnej Sortowanie ciągu elementów Liczba wyrazów ciągu Zagadnienie przechodzenia przez drzewo Liczba węzłów drzewa

Ocena przydatności algorytmu Zależność odwrotnie proporcjonalna Złożoność obliczeniowa algorytmu (Jaka ilość zasobów pamięci potrzebna jest do realizacji – liczba i rodzaj zmiennych, rodzaj danych) Złożoność pamięciowa P(n) – pamięć, przestrzeń. (Zależy od liczby operacji wykonanych podczas działania algorytmu) Złożoność czasowa T(n)- czas.

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Miara szybkości algorytmu powinna być: Niezależna od oprogramowania Niezależna od sprzętu Niezależna od umiejętności programisty Powinna to być cecha samego algorytmu!

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Problem Operacje dominujące Wyznaczenie wartości wielomianu w danym punkcie Operacje arytmetyczne Sortowanie Porównanie elementów ciągu wejściowego (czasem także przestawienie elementów ciągu) Przeglądanie drzewa Przejście między węzłami w drzewie

Ocena przydatności algorytmu – czas działania (złożoność czasowa)

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Liczbę operacji dominujących zwykle szacujemy z dokładnością do stałego czynnika. Dla małych rozmiarów danych wejściowych najlepsze są najprostsze rozwiązania – nie ma problemu. Jak zachowuje się algorytm, gdy rozmiar danych wejściowych dąży do nieskończoności? Podajemy najprostszą funkcję charakteryzującą rząd wielkości T(n). Np.: T(n)=n2 dla 2n2+50, T(n)=n dla 100n W pierwszym przypadku algorytm jest wolniejszy, bo dla „dużego” n funkcja kwadratowa rośnie szybciej niż liniowa.

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Asymptotyczny czas działania – czas działania algorytmu dla danych wejściowych, których rozmiar dąży do nieskończoności.

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Większość algorytmów ma złożoność czasową (asymptotyczny czas działania) proporcjonalną do jednej z podanych poniżej funkcji:

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Przykład. Tabelka przedstawiająca czas potrzebny do realizacji algorytmu, który wykonuje 2n operacji dominujących (dla danych wejściowych rozmiaru n) przez dwa komputery, przy założeniu, że jedna operacja na każdym z nich zajmuje odpowiednio 10-6 i 10-9 sekund.

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Mając algorytm, pytamy, czy możemy szybciej osiągnąć cel, czy też złożoność czasowa już osiągnęła wartość najmniejszą z możliwych. Zakres (przedział) czasów działania – przedział między teoretycznym dolnym oszacowaniem a najlepszym znanym algorytmem

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Algorytmy sortowania oparte na porównywaniu elementów mają teoretyczne dolne oszacowanie liczby operacji dominujących rzędu nlgn, a trywialne dolne oszacowanie rzędu n. Problem mnożenia dwóch macierzy wymiaru n x n ma trywialne dolne oszacowanie rzedu kwadratowego.

Ocena przydatności algorytmu – czas działania (złożoność czasowa) Dla niektórych ważnych problemów teoretyczne dolne oszacowanie nie zostałam jeszcze wyznaczone. W takim przypadku bierzemy pod uwagę najszybszy istniejący algorytm rozwiązujący dany problem.