Wyklad1 - Wydział Matematyki i Informatyki

Download Report

Transcript Wyklad1 - Wydział Matematyki i Informatyki

Wioletta Karpińska
Wydział Matematyki i Informatyki Uniwersytet Łódzki
Wykład na ZUM I w 2010
Strona:
http://www.math.uni.lodz.pl/~karpinw
Egzamin: do ustalenia.
Programowanie:
http://www.instalki.pl/programy/download/prog
ramowanie/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.

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.
Ogólnie o
algorytmach
Wybrane algorytmy
sortowania
Struktury
danych
Podstawowe narzędzia
matematyczne
Algorytmy
rekurencyje
Algorytmy
przeszukiwania
Poprawność
algorytmów
Złożoność obliczeniowa
i pamięciowa
Algorytmy
numeryczne
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
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.
Warunek
dyskretności –
skończona ilość
operacji
potrzebnych do
rozwiązania
Istnieje
określony
stan początkowy
Algorytm – metoda
rozwiązywania
danego problemu,
która spełnia
warunki:
Warunek
uniwersalności –
możliwość
stosowania metody
do całej klasy
zagadnień
Istnieje
wyróżniony 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
•Dowolny
wykonawca
algorytmu (w
szczególności
komputer)
•Możliwe do
wykonania
przez
wykonawcę
•Dowolny,
zrozumiały dla
wykonawcy
Sprzęt
Język
opisu
algorytmu
Operacje
składowe
algorytmu
Schemat
przetwarzania
Obiekty
wejściowe
Algorytm
Obiekty
wyjściowe
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.
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.
Podstawowe koncepcje algorytmiczne:
 sekwencje czynności
 warunkowe wykonanie
 powtarzanie, aż zajdzie warunek
 zestawy czynności zdefiniowane wcześniej –
poziom szczegółowości
CZAS!
Dane wejściowe
•a, b – liczby naturalne większe od 1
Dane wyjściowe
•c=NWD(a,b)
•Wypisz czynniki pierwsze liczby a, powstaje lista
A={a1,a2,...,an} (mogą wystąpić powtórzenia)
Opis
algorytmu
•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ę.
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.
Dane wejściowe
•lista ankiet osobowych (nazwisko, płaca, inne)
Dane wyjściowe
•suma zarobków wszystkich osób
• zanotuj “na boku” liczbę 0
Opis
algorytmu
• 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
Ważna cecha przykładu:
 Wielkość programu taka sama dla dowolnie
długich list
Problem zatrzymania – algorytm ma orzekać, czy dany program
komputerowy kiedykolwiek wykona wszystkie procedury i
zatrzyma się
Dane wejściowe
Dane wyjściowe
Rozwiązanie
•Program komputerowy
•Dane wejściowe dla tego programu
•Odpowiedź „TAK” (program zatrzyma się po
wykonaniu wszystkich zawartych w nim poleceń)
•Lub odpowiedź „NIE” (program nie zatrzyma się)
•Nie istnieje algorytm, który w
skończonym czasie orzeknie, czy
dany program dla określonych danych
wejściowych zapętli się czy nie.


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)



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
 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.
 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
 Uniwersalne
urządzenie do wykonywania algorytmów
związanych z przetwarzaniem informacji
Komputer = sprzęt + oprogramowanie
Obiekty
Zapis
przetwarzane przez program: Dane
Dane +algorytm = wyniki
algorytmu zrozumiały dla komputera w
Języku programowania – U nas C++
Algorytmy
zrozumiałe dla komputera:
Programy
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.
Inne
Czas
działania
Zasoby
potrzebne do
wykonania
algorytmu
Pamięć
Szerokość
kanału
komunikacyjnego
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.
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?
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
Złożoność obliczeniowa – podstawowa wielkość
stanowiąca miarę przydatności algorytmu.
Obejmuje problemy związane z implementacją i
efektywnoś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
Zależność odwrotnie
proporcjonalna
Złożoność pamięciowa P(n) –
pamięć, przestrzeń.
Złożoność czasowa T(n)- czas.
(Zależy od liczby operacji
wykonanych podczas działania
algorytmu)
(Jaka ilość zasobów pamięci
potrzebna jest do realizacji –
liczba i rodzaj zmiennych,
rodzaj danych)
Złożoność
obliczeniowa
algorytmu
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!
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
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.
Asymptotyczny czas działania – czas działania
algorytmu dla danych wejściowych, których
rozmiar dąży do nieskończoności.
Większość algorytmów ma złożoność czasową (asymptotyczny czas
działania) proporcjonalną do jednej z podanych poniżej funkcji:
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.
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
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.
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.