• Nie Znaleziono Wyników

Wydział Matematyki i Informatyki Uniwersytet ŁódzkiZajęcia na DUM I w

N/A
N/A
Protected

Academic year: 2021

Share "Wydział Matematyki i Informatyki Uniwersytet ŁódzkiZajęcia na DUM I w"

Copied!
42
0
0

Pełen tekst

(1)

Wioletta Karpińska

Wydział Matematyki i Informatyki Uniwersytet Łódzki

Zajęcia na DUM I w 2017

(2)

Strona:

http://www.math.uni.lodz.pl/~karpinw Zaliczenie: do ustalenia.

Programowanie:

http://www.instalki.pl/programy/download/

Windows/srodowiska_programistyczne/Dev -C_5.html

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.

(3)

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 .

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.

(4)

Ogólnie o

algorytmach Podstawowe narzędzia matematyczne

Poprawność algorytmów

Złożoność obliczeniowa i pamięciowa

Algorytmy rekurencyjne Wybrane algorytmy

sortowania

Struktury danych Algorytmy przeszukiwania

Algorytmy numeryczne

(5)

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

(6)

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.

(7)

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

(8)

•Możliwe do wykonania przez

wykonawcę

•Dowolny,

zrozumiały dla wykonawcy

•Dowolny wykonawca algorytmu (w szczególności komputer)

Sprzęt

Język opisu algory-

tmu

Schemat przetwa-

rzania Operacje

składowe algory-

tmu

Obiekty

wejściowe Algorytm Obiekty wyjściowe

(9)

•22 dag twardej czekolady półsłodkiej, 2 łyżki wody, 1/4 filiżanki cukru pudru, 6 jajek, . . . .

Dane wejściowe

•bity krem czekoladowy (kuchnia francuska)

Dane wyjściowe

•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.

Opis

algorytmu

(10)

•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 wejściowe

•śliwowica (kuchnia polska)

Dane wyjściowe

•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.

Opis

algorytmu

(11)

Podstawowe koncepcje algorytmiczne:

 sekwencje czynności

 warunkowe wykonanie

 powtarzanie, aż zajdzie warunek

 zestawy czynności zdefiniowane wcześniej – poziom szczegółowości

CZAS!

(12)

•a, b – liczby naturalne większe od 1

Dane wejściowe

•c=NWD(a,b)

Dane wyjściowe

•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ę.

Opis

algorytmu

(13)

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.

(14)

•lista ankiet osobowych (nazwisko, płaca, inne)

Dane wejściowe

•suma zarobków wszystkich osób

Dane wyjściowe

•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

Opis

algorytmu

(15)

Ważna cecha przykładu:

 Wielkość programu taka sama dla dowolnie

długich list

(16)

Problem zatrzymania – algorytm ma orzekać, czy dany program komputerowy kiedykolwiek wykona wszystkie procedury i

zatrzyma się

•Program komputerowy

•Dane wejściowe dla tego programu

Dane wejściowe

•Odpowiedź „TAK” (program zatrzyma się po wykonaniu wszystkich zawartych w nim poleceń)

•Lub odpowiedź „NIE” (program nie zatrzyma się)

Dane wyjściowe

•Nie istnieje algorytm, który w

skończonym czasie orzeknie, czy

dany program dla określonych danych wejściowych zapętli się czy nie.

Rozwiązanie

(17)

 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)

(18)

 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

(19)

 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.

(20)

 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

(21)

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

(22)
(23)
(24)
(25)

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.

(26)

Zasoby

potrzebne do wykonania

algorytmu Inne

Szerokość kanału komunikacyj-

nego

Pamięć Czas

działania

(27)

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.

(28)

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?

(29)

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

(30)

Złożoność obliczeniowa – podstawowa wielkość stanowiąca miarę przydatności algorytmu.

Obejmuje problemy związane z implementacją i

efektywnością algorytmu.

(31)

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

(32)

Złożoność obliczeniowa

algorytmu

Złożoność pamięciowa P(n) –

pamięć, przestrzeń.

(Jaka ilość zasobów pamięci potrzebna jest do realizacji – liczba i rodzaj zmiennych,

rodzaj danych)

Złożoność czasowa T(n)- czas.

(Zależy od liczby operacji wykonanych podczas działania

algorytmu)

Zależność odwrotnie

proporcjonalna

(33)

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!

(34)

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

(35)
(36)

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)=n

2

dla 2n

2

+50, T(n)=n dla 100n

W pierwszym przypadku algorytm jest wolniejszy, bo dla „dużego” n funkcja kwadratowa rośnie szybciej niż liniowa.

(37)

Asymptotyczny czas działania – czas działania

algorytmu dla danych wejściowych, których

rozmiar dąży do nieskończoności.

(38)

Większość algorytmów ma złożoność czasową (asymptotyczny czas

działania) proporcjonalną do jednej z podanych poniżej funkcji:

(39)

Przykład. Tabelka przedstawiająca czas potrzebny do realizacji algorytmu, który wykonuje 2

n

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.

(40)

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

(41)

Algorytmy sortowania oparte na porównywaniu elementów mają teoretyczne dolne oszacowanie liczby operacji dominujących rzędu n lg n , a

trywialne dolne oszacowanie rzędu n.

Problem mnożenia dwóch macierzy wymiaru n x n ma trywialne dolne oszacowanie rzędu

kwadratowego.

(42)

Dla niektórych ważnych problemów

teoretyczne dolne oszacowanie nie zostało jeszcze wyznaczone.

W takim przypadku bierzemy pod uwagę

najszybszy istniejący algorytm rozwiązujący

dany problem.

Cytaty

Powiązane dokumenty

Fragment architektury systemu przedstawiający komponent odpowiedzialny za ekstrakcję godzin rozpoczęcia mszy świętych.. Na rysunku 1.14 został przedstawiony fragment

gdzie net to obiekt opisujący stworzoną sieć, PR macierz z wartościami minimalnymi i maksymalnymi dla kolejnych wejść, S i liczba neuronów w i-tej warstwie sieci, T fi definicja

Pozwala to całkowicie uniezależnić proces tworze- nia i odtwarzania kopii bezpieczeństwa od struktury archiwizowanych zbiorów, zastosowanego systemu plików czy też

Celem projektu projektu FOLA (the Friend of a Lazy Administrator) realizowa- nego w ramach seminarium magisterskiego było stworzenie modułowego syste- mu służącego do

Kod modułu, który jest przedmiotem niniejszej pracy rozpowszechniany jest na zasadach licencji GNU

Sformułowa´c definicj˛e szeregu pot˛egowego oraz przedziału zbie ˙zno´sci szeregu pot˛e- gowego.. Sformułowa´c

Sortowanie w miejscu nie wymaga wykorzystania dodatkowej pamięci zależnej od ilości sortowanych danych, lecz tylko pewną stałą jej ilość.. Sortowanie stabilne zapewnia, iż

Liczby Stirlinga drugiego rodzaju pojawiają się przy zupełnie innym, analitycznym, za- gadnieniu... Każdy wyraz w wierszu pierwszym i następnych jest po prostu różnicą