Przepis na rozwiązanie określonego problemu za pomocą prostych

Transkrypt

Przepis na rozwiązanie określonego problemu za pomocą prostych
tƐƚħƉĚŽ/ŶĨŽƌŵĂƚLJŬŝ
ůŐŽƌLJƚŵŝŬĂ
Cezary Bolek
[email protected]
Uniwersytet Łódzki
Wydział Zarządzania
Katedra Informatyki
ůŐŽƌLJƚŵ
Przepis na rozwiązanie określonego problemu za
pomocą prostych czynności wykonywanych w ściśle
określonej kolejności.
Czynności:
1. muszą być znacznie prostsze od realizowanego algorytmu
2. muszą być wykonywalne dla danego „sprzętu”
(prostota czynności jest sprawą względną)
Kolejność:
1. określenie kolejności wykonywania czynności jest krytyczne dla
osiągnięcia celu algorytmu;
2. musi istnieć mechanizm rozgałęziania algorytmu,
tj. decydowania o kolejności w trakcie wykonywania algorytmu
na podstawie zaistniałych warunków.
Wstęp do Informatyki
[email protected]
1
/ŶŶLJŵŝƐųŽǁLJ͕ĐnjLJŵũĞƐƚĂůŐŽƌLJƚŵ ͍
• Zbiór logicznie powiązanych kroków
prowadzących do określonego celu
• Sposób rozwiązania problemu
• "Przepis"
• Sposób opisu zachowania
Algorytm zawiera:
• Dane
• Instrukcje
Wstęp do Informatyki
[email protected]
ZŽůĂĂůŐŽƌLJƚŵƵ
Dane wejściowe
Algorytm
Dane wyjściowe
Wstęp do Informatyki
[email protected]
2
ůŐŽƌLJƚŵ ͞WƌnjĞƉŝƐ͟
Ciasteczka czekoladowe
DANE (składniki)
2 1/4 szklanki mąki
1 łyŜeczka soli
1 łyŜeczki proszku do pieczenia
2 jajka
3/4 szklanki brązowego cukru
1 łyŜeczki wanilii
3/4 szklanki cukru
1 paczka masła
30 dag startej na tarce czekolady
INSTRUKCJE (czynności)
Rozgrzać piekarnik do temperatury 375°C.
W misie zmieszać mąkę, sól, proszek do pieczenia.
Utrzeć razem cukier, masło i wanilię aŜ do uzyskania jednolitej
konsystencji.
Dodać jajka i utrzeć.
Dodać zmieszaną wcześniej mąkę, sól itd., utrzeć.
Dodać kawałki czekolady
NałoŜyć łyŜeczką niewielkie porcje ciasta na blachę przykrytą
papierem do pieczenia.
Piec 8 do 10 minut.
Wstęp do Informatyki
[email protected]
ĞĐŚLJĚŽďƌĞŐŽĂůŐŽƌLJƚŵƵ
Dobry algorytm musi być:
Skończony
Kompletny
Jednoznaczny
Poprawny
Prosty
Zawierać poziomy abstrakcji
Wstęp do Informatyki
[email protected]
3
ĞĐŚLJĂůŐŽƌLJƚŵƵ
Skończoność:
algorytm musi zapewnić osiągnięcie
do rozwiązania w skończonej liczbie
kroków (a więc teŜ w skończonym czasie).
Skończona liczba kroków nie oznacza, ze z góry wiadomo po ilu krokach
algorytm się zakończy.
Komunikat o błędzie lub braku rozwiązania teŜ jest jednym z moŜliwych
poprawnych zakończeń realizacji algorytmu.
np.
Obliczanie wartości sin(x) moŜna wykonać numerycznie za pomocą
sumowania kolejnych wyrazów szeregu:
sin x = x −
x3 x5 x7 x9
+ − + −K
3! 5! 7! 9!
Algorytm taki musi posiadać warunek zakończenie tej operacji (np. kryterium
dokładności) aby nie wykonywał się, mimo Ŝe poprawnie, w nieskończoność.
Wstęp do Informatyki
[email protected]
ĞĐŚLJĂůŐŽƌLJƚŵƵ
Kompletność:
algorytm musi uwzględniać wszystkie
moŜliwe przypadki, które mogą pojawić
się podczas jego realizacji.
Uwzględnienie róŜnych przypadków oznacza zapewnienie dalszej realizacji
algorytmu, zgodnie z przewidzianymi na taką okoliczność instrukcjami.
W praktyce programistycznej oznacza to przewidzenie wystąpienia błędów
numerycznych i logicznych oraz opracowanie systemu reakcji (komunikaty
o błędach, odpowiednie zakończenie działania).
np.
Obliczanie rozwiązań równania kwadratowego wymaga uwzględnienia przypadków:
b 2 − 4ac > 0, b 2 − 4ac < 0
Brak sprawdzenia trzeciego warunku (=0) i wartości parametru a jest przypadkiem
niekompletności algorytmu i moŜe spowodować jego błędne działanie.
Wstęp do Informatyki
[email protected]
4
ĞĐŚLJĂůŐŽƌLJƚŵƵ
Jednoznaczność:
dla tych samych danych wejściowych
algorytm musi zawsze dawać te same wyniki.
Jednoznaczność w praktyce oznacza niezaleŜność działania programu od
momentu jego wykonania, wpływu innych programów realizowanych
równocześnie przez system operacyjny oraz, co najtrudniejsze, od sprzętu
realizującego dany algorytm.
np.
Algorytmy wykonujące obliczenia arytmetyczne powinny dawać dokładnie takie same wyniki na
róŜnych komputerach i systemach operacyjnych - jest to bardzo trudne do spełnienia (róŜne
kodowanie liczb, róŜne algorytmy ich przetwarzania)
Algorytmy formatujące tekst (procesory tekstu) powinny dawać taki sam wygląd strony (układ tekstu,
łamanie wyrazów, etc.) zgodny z informacją zapisaną w pliku, niezaleŜnie od typu komputera i wersji
systemu operacyjnego ☺
Wstęp do Informatyki
[email protected]
ŽũĞƐƚnjųĞŐŽǁƚLJŵĂůŐŽƌLJƚŵŝĞ͍
(Z etykiety szamponu)
Sposób uŜycia:
•
•
•
•
•
Zmoczyć włosy
NałoŜyć niewielką ilość szamponu na włosy
Wetrzeć
Spłukać
Czynności powtórzyć
Wstęp do Informatyki
[email protected]
5
dĞƌŵŝŶŽůŽŐŝĂ
• Algorytm moŜe być wykonany przez kaŜdego (człowieka lub
maszynę), kto zna język, w którym zapisano algorytm.
• Wykonawca algorytmu musi umieć wykonywać jego instrukcje, ale nie
musi znać jego istoty algorytmu lub jego przeznaczenia, aby osiągnąć
poŜądany wynik.
• Języki przeznaczone do zapisu algorytmów w postaci instrukcji
zrozumiałych przez maszynę cyfrową noszą nazwę „języków
programowania”.
• Algorytm zapisany w języku programowania nosi nazwę: „programu”.
• Języki programowania (wysokiego poziomu) są kompromisem
pomiędzy językiem naturalnym (zrozumiałym dla człowieka) a
pojęciami bliskimi konstrukcji maszyny cyfrowej (bity, bajty, etc.)
Wstęp do Informatyki
[email protected]
ĂŶĞĂůŐŽƌLJƚŵƵ
KaŜdy algorytm wykonuje operacje na obiektach: liczbach i ich bardziej
złoŜonych strukturach.
liczby, wektory, tablice, rekordy, struktury, unie, stosy
kolejki, listy, drzewa, grafy ...
Liczby są zwykle modelami obiektów rzeczywistych, w aspekcie tych cech,
którymi zajmuje się algorytm.
• wartość pojedynczej liczby moŜe być modelem wysokości
zarobku w programie finansowym,
• wektor trzech liczb moŜe być modelem punktu w przestrzeni
w programie grafiki trójwymiarowej,
• kolejka moŜe być modelem zgłoszeń zapytań w programie
bazy danych, etc.
Konstrukcja kaŜdego algorytmu „stoi na dwóch nogach”:
- algorytmizacji problemu (rozbiciu na elementarne operacje),
- doborze właściwych struktur danych, stosownych do zadania, którego
dotyczy algorytm.
Wstęp do Informatyki
[email protected]
6
WƌŽďůĞŵ→ WƌŽŐƌĂŵ
Algorytm
Problem
Program
Struktury
danych
Algorytmizacja
Kodowanie
Programowanie
Wstęp do Informatyki
[email protected]
^ƉŽƐŽďLJŽƉŝƐƵĂůŐŽƌLJƚŵƵ
• Język naturalny (np. angielski)
• Opis graficzny (np. sieć działań)
• Pseudokod lub język programowania
Wstęp do Informatyki
[email protected]
7
ůŐŽƌLJƚŵ͗_ƌĞĚŶŝĞnjƵǏLJĐŝĞƉĂůŝǁĂǁůͬŬŵ
1. Pobierz wartości: zuŜyte paliwo w litrach,
początkowy i końcowy stan licznika w kilometrach
2. Ustaw wartość: przejechany dystans na wartość
(końcowy stan licznika - początkowy stan licznika)
3. Ustaw wartość: średnie zuŜycie paliwa na wartość
(zuŜyte paliwo / przejechany dystans)
4. Wydrukuj wartość: średnie zuŜycie paliwa
5. Koniec
Wstęp do Informatyki
[email protected]
ĂƉŝƐĂůŐŽƌLJƚŵƵͲ ƐŝĞđ ĚnjŝĂųĂŷ
Zwięzłość, czytelność i wysoki poziom abstrakcji
Sieć działań (schemat blokowy):
1.
Elementarne czynności oznaczone są blokami (węzły sieci), a kolejność
wyznaczona jest poprzez gałęzie sieci, łączące węzły.
2.
Kształt bloków odpowiada rodzajowi operacji, a strzałki gałęzi identyfikują
jednoznacznie ich kolejność.
3.
NiezaleŜność struktury algorytmu od architektury konkretnej maszyny i
rodzaju kodowania liczb.
Za pomocą sieci działań moŜliwe jest zapisanie
kaŜdego poprawnego algorytmu!
KaŜdy algorytm moŜna zapisać za pomocą wielu
róŜnych sieci działań!
Wstęp do Informatyki
[email protected]
8
^ŝĞđ ĚnjŝĂųĂŷ͗
ƉƌnjLJŬųĂĚ
Start
Stwórz listę zajęć w których chcesz uczestniczyć
Liczba Godzin = 0
Wybierz przedmiot o najwyŜszym priorytecie
Czy są wolne miejsca ?
nie
Czy
konflikt
czasowy ?
tak
nie
Dodaj przedmiot do rozkładu zajęć. Dodaj czas przedmiotu do Liczba Godzin
tak
Usuń przedmiot z listy
tak
Liczba Godzin >= 15 ?
tak
nie
Są jakieś przedmioty na liście ?
nie
Koniec
Wstęp do Informatyki
[email protected]
^ŝĞđ ĚnjŝĂųĂŷ
blok operacyjny (obliczeniowy)
dokładnie jedno wejście i jedno
wyjście
operacja
realizacja elementarnej czynności
wartość 1
warunek
blok decyzyjny (warunkowy)
dokładnie jedno wejście, dwa
lub więcej wyjść
wartość 2
warunek jest zdaniem (wyraŜeniem
arytmetycznym), które w danej sytuacji
moŜe przyjmować róŜne wartości
warunek
wartość 1
Wstęp do Informatyki
wartość 2 ...
wartość n
blok warunkowy jest miejscem rozgałęziania
programu: kolejna instrukcja do wykonania
jest wyznaczana przez gałąź z opisem wartości
równym wartości testowanego wyraŜenia
[email protected]
9
^ŝĞđ ĚnjŝĂųĂŷ
blok wejścia-wyjścia (we/wy)
dokładnie jedno wejście i jedno
wyjście
dane
oznaczenia miejsca wymiany danych
pomiędzy algorytmem a światem
zewnętrznym, bez konkretyzowania
źródła danych i metody tej operacji
blok startu
dokładnie jedno wyjście
Start
oznaczenia początku algorytmu
blok startu
dokładnie jedno wejście
Stop
oznaczenia końca algorytmu
Wstęp do Informatyki
[email protected]
ŵŝĞŶŶĞ
Liczby (i struktury danych) występują w algorytmach i programach
komputerowych w postaci zmiennych.
Zmienna jest obiektem, który posiada dwa atrybuty:
- nazwę, czyli symbol poprzez który odwołujemy się do zmiennej,
- wartość, czyli liczbę przypisaną do danego symbolu.
Podstawowe operacje wykonywane na zmiennych:
arytmetyczne :
a+4
b-a
a+d*5
przypisanie :
a←5
b←a
c←a+b
porównanie :
a=5
b>a
c<=a+b
Symbole operatorów przypisania i porównania zaleŜą od języka programowania,
ale zawsze operator przypisania zmienia wartość zmiennej, a operatory
porównania nie.
WyraŜenie zawierające operatory porównania moŜna oceniać w sensie logiki
matematycznej (prawda lub fałsz).
Wstęp do Informatyki
[email protected]
10
WƌnjLJŬųĂĚ
Znajdowanie największej z trzech liczb: max(a,b,c)
Start
a,b,c
T
T
drukuj a
a>c
N
a>b
N
T
c>b
drukuj c
N
drukuj b
Stop
Wstęp do Informatyki
[email protected]
WƌnjLJŬųĂĚ
Start
a,b,c
Znajdowanie największej z
trzech liczb: max(a,b,c)
m←a
m<b
T
m←b
T
m←c
N
m<c
N
drukuj m
Stop
Wstęp do Informatyki
[email protected]
11
^ŝĞĐŝǀƐ ͍
A
B
max(a,b,c)
max(a,b,c)
rozmiar:
rozmiar:
4 we/wy
3 dec.
0 op.
2 we/wy
2 dec.
3 op.
szybkość:
2 we/wy
2 dec.
0 op.
szybkość:
2 we/wy
2 dec.
1..3 op.
rozbudowa:
trudna
rozbudowa:
łatwa
Rozwiązanie problemu moŜliwe jest za pomocą róŜnych sieci działań.
Optymalizacja algorytmu polega na znalezieniu sieci najlepszej według
określonego kryterium: np. rozmiaru, szybkości, rozbudowy.
Wstęp do Informatyki
[email protected]
ŶĂůŝnjĂĂůŐŽƌLJƚŵſǁ
we
wy
???
Analiza poprawności sieci działań jest zadaniem skomplikowanym.
Prześledzenie wszystkich ścieŜek przejścia przez sieć dla wszystkich
moŜliwych danych jest zwykle niemoŜliwe.
W praktyce testowanie algorytmów dotyczy sytuacji:
•
typowych
•
krytycznych
Techniki konstrukcji sieci wspomagające analizę poprawności to:
•
podział na moduły (podprogramy)
•
tworzenie sieci strukturalnych (programowanie strukturalne)
Wstęp do Informatyki
[email protected]
12
^ŝĞĐŝƐƚƌƵŬƚƵƌĂůŶĞ
Podstawowe rodzaje konstrukcji strukturalnych:
sekwencja
selekcja
s1
c
s2
s1
s2
sn
c
selekcja
wielokrotna
Wstęp do Informatyki
s1
s2
sn
[email protected]
^ŝĞĐŝƐƚƌƵŬƚƵƌĂůŶĞ
Podstawowe rodzaje konstrukcji strukturalnych:
cykl (pętla)
s
s
T
c
N
N
pre-check
c
T
post-check
Instrukcja s będzie wykonana
0 lub więcej razy. Cykl jest
powtarzany dopóki spełniony
jest warunek c.
Wstęp do Informatyki
Instrukcja s będzie wykonana
1 lub więcej razy. Cykl jest
powtarzany aŜ do spełnienia
warunku c.
[email protected]
13
ůŐŽƌLJƚŵLJƐƚƌƵŬƚƵƌĂůŶĞ
KaŜda konstrukcja strukturalna (sekwencja, selekcja, cykl) posiada
dokładnie jedno wejście i jedno wyjście.
Sekwencja
składa się z instrukcji, które są wykonywane w danej
konstrukcji tylko jedne raz w ściśle określonej kolejności.
Selekcja
musi uwzględniać wszystkie moŜliwe wartości, które
moŜe przyjmować warunek selekcji (kompletność).
Cykl
nie moŜe być nieskończony (skończoność), a zmienna
występująca w warunku (zmienna sterująca cyklu) musi
być modyfikowana wewnątrz cyklu.
Za pomocą sekwencji, selekcji i cykli moŜna zapisać kaŜdy algorytm.
Algorytmy zapisane jedynie za pomocą sekwencji, selekcji i cykli nazywają się
algorytmami strukturalnymi (sieci strukturalne)
Wstęp do Informatyki
[email protected]
^ƚƌƵŬƚƵƌĂŵŽĚƵųŽǁĂ
≡
≡
Algorytmy strukturalne moŜna redukować, zastępując złoŜone fragmenty blokami
o wyŜszym stopniu funkcjonalności.
Podział na moduły ułatwia testowanie całego programu, gdyŜ moŜna zapewnić
oddzielnie poprawność modułów (black box), a następnie całej, zredukowanej
sieci.
Wstęp do Informatyki
[email protected]
14
ĂůĞƚLJƐƚŽƐŽǁĂŶŝĂƐƚƌƵŬƚƵƌLJŵŽĚƵůĂƌŶĞũ
•
Szczegóły algorytmu są ukryte w "pod-algorytmach" co
poprawia czytelność całości poprzez "ukrycie" mało czytelnych
fragmentów
•
Ułatwia tworzenie algorytmu poprzez podział problemu na
części o prostszej konstrukcji (pozwala pracować zespołom
nad jednym projektem)
•
Oszczędzanie czasu, nakładu pracy ale takŜe rozmiaru
algorytmu - moduły mogą być "wywoływane" z dowolnego
miejsca wewnątrz algorytmu
•
UmoŜliwia ponowne wykorzystanie raz utworzonych modułów
w innych, nowo tworzonych algorytmach - reusing
•
Ułatwia wyszukiwanie błędów i późniejsze "utrzymanie" kodu
Wstęp do Informatyki
[email protected]
WƌŽŐƌĂŵŽǁĂŶŝĞƐƚƌƵŬƚƵƌĂůŶĞ
Konstrukcja strukturalne (sekwencje, selekcje, cykle) są realizowane w
językach programowania jako tzw. instrukcje sterujące.
Programowanie strukturalne polega na konstruowaniu programów
wykorzystując jedynie struktur sekwencji, selekcji i cykli.
Zalety programowania strukturalnego:
•
•
•
•
•
hierarchiczna i modułowa struktura programu
moŜliwość tworzenia programu w stylu top-down lub bottom-up
moŜliwość analizy poprawności programu
łatwość modyfikacji, redukcja błędów i czasu pisania programu
moŜliwość wykorzystania modułów do innych programów
Wstęp do Informatyki
[email protected]
15
WƌŽŐƌĂŵŽǁĂŶŝĞƐƚƌƵŬƚƵƌĂůŶĞ
Języki strukturalne
Języki niestrukturalne
Fortran, Basic ... (goto)
siec strukturalna
siec niestrukturalna
(spaghetti programing)
Pascal, C, Java ...
Wstęp do Informatyki
[email protected]
ųħĚLJǁĂůŐŽƌLJƚŵĂĐŚ
Systemowe –
polegające na nieporozumieniu pomiędzy załoŜonymi
zadaniami algorytmu a sposobem ich realizacji,
lub błędnej ich interpretacji.
Logiczne –
polegające na błędnej interpretacji analizowanej
w algorytmie sytuacji lub nie uwzględnieniu
moŜliwości zaistnienia sytuacji dodatkowych.
np. a∉(x,y) ⇒ a<x i a>y
czy a<x lub a>y
Składniowe –
polegają na niewłaściwym uŜyciu składni danego języka,
w taki sposób, Ŝe nie powoduje to błędu składniowego,
tylko inne znaczenie zapisu (poprawne językowo, ale
niezgodne z intencją autora).
x/y/z ⇒ x/(y*z) czy x/(y/z)
Komputery są nieomylne ! –
błędy tkwią w danych wejściowych lub konstrukcji algorytmu.
Wstęp do Informatyki
[email protected]
16
ųħĚLJ͘͘͘ƉƌnjLJŬųĂĚ
nieskończone pętle:
X=0
Nie
Czy X=100 ?
Tak
Nie
X=X+1
Czy X=1 ?
Tak
X = X + 0.1
Co się stanie przy załoŜeniu, Ŝe
zmienna X liczbą zmiennopozycyjną
(IEEE754) ?
Co się stanie gdy na początku
cyklu X będzie równe 200 lub 10.5?
Wstęp do Informatyki
[email protected]
ųħĚLJ͘͘͘ƉƌnjLJŬųĂĚ
Fragment algorytmu automatycznej
analizy rachunków za energię elektryczną
pobierz dane
następnego klienta
dolicz odsetki
i kolejny miesiąc
opóźnienia
Nie
czy wpłynęła
opłata za ostatni
miesiąc?
Tak
Tak
Czy klient nie
płaci dłuŜej niŜ x
miesięcy ?
Odetnij prąd,
skieruj sprawę
do sądu
Nie
Wyślij
upomnienie
Tak
kasuj dane o
zaległościach
Jaka będzie reakcja na nieterminowe spłaty rachunku?
Jaka będzie reakcja na częściową spłatę zadłuŜenia?
Jaka będzie reakcja na brak zapłaty rachunku zerowego?
Wstęp do Informatyki
Nie
czy zadłuŜenie
klienta wynosi 0 ?
czy to ostatni
klient ?
Nie
Tak
[email protected]
17
ųħĚLJ͘͘͘ƉƌnjLJŬųĂĚ
Algorytm wykrywający pracowników,
których zarobki są większe od ich
kierowników
pobierz dane
pierwszego
pracownika (P)
pobierz dane
pierwszego
pracownika (K)
Tak
Tak
czy K jest
kierownikiem P?
Nie
czy zarobki
P>K?
Nie
Nie
czy K jest
ostatni na liście ?
drukuj dane
pracownika (P)
pobierz dane
następnego
pracownika (K)
Tak
Nie
czy P jest
ostatni na liście ?
pobierz dane
następnego
pracownika (P)
Tak
Wstęp do Informatyki
[email protected]
ųŽǏŽŶŽƑđ ŽďůŝĐnjĞŶŝŽǁĂ
ZłoŜoność obliczeniowa – miara efektywności algorytmu
Podawana jako liczba operacji potrzebnych do wykonania algorytmu, wyraŜona
w stosunku do liczby elementów zbioru (n), na którym działa dany algorytm.
PoniewaŜ dokładna liczba operacji zaleŜy od konkretnych danych wejściowych,
złoŜoność obliczeniową podaje się dla najgorszego moŜliwego przypadku
ZłoŜoność obliczeniową wyraŜa się za pomocą tzw. notacji O(•), która określa
dominującą tendencję zaleŜności liczby operacji od n.
np. algorytm sortowania bąbelkowego zbioru n-elementowego:
liczba porównań
= 0.5(n2-n)
liczba przesunięć
= 0.75(n2-n)
złoŜoność obliczeniowa = O(n2)
h
O
Big
np. 100n, 2n+4, 0.5n+n-1, 0.01n ⇒ O(n)
Wstęp do Informatyki
[email protected]
18
ųŽǏŽŶŽƑđ͘͘͘
Realne ulepszenie algorytmu następuje tylko wówczas, gdy uda się
osiągnąć mniejszą złoŜoność w notacji O(•)
Wpływ złoŜoności obliczeniowej uwidacznia się dla odpowiednio duŜych
wartości n
O(n2)
operacje
(czas)
O(n)
O(log(n))
ni
Wstęp do Informatyki
nj nk
n
[email protected]
ųŽǏŽŶŽƑđ͘͘͘ƉƌnjLJŬųĂĚ
Sortowanie zbioru n=1,000,000
(słowniki, ksiąŜki telefoniczne, bazy danych)
Proste metody sortowania O(n2) (wstawianie, wybieranie, bąbelkowe)
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
Czas
⇒ 6 dni
⇒ 2 miesiące
⇒ 2 lata
Zaawansowane metody sortowania O(n*log(n)) (Shell’a, przez podział, ... )
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
⇒ 012s
⇒ 2min
⇒ 20min
Czas
(op/s – dotyczy operacji na elementach sortowanego zbioru, które mogą być złoŜone, a nie
elementarnych operacji procesora.
Wstęp do Informatyki
[email protected]
19
ųŽǏŽŶŽƑđ͘͘͘ƉƌnjLJŬųĂĚ
Sortowanie zbioru n=1,000,000,000
(symulacje fizyczne, astronomiczne, biologiczne)
Proste metody sortowania O(n2) (wstawianie, wybieranie, bąbelkowe)
Sprzęt
1mln op/s
Czas
⇒ 160 lat
Zaawansowane metody sortowania O(n*log(n)) (Shell’a, przez podział, ... )
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
⇒ 0.5h
⇒ 4.5h
⇒ 2 dni
Czas
(op/s – dotyczy operacji na elementach sortowanego zbioru, które mogą być złoŜone, a nie
elementarnych operacji procesora.
Wstęp do Informatyki
[email protected]
WŽƉƌĂǁŶĂŝŶƚĞƌƉƌĞƚĂĐũĂ K;Ϳ
O(1) or “Stopnia pierwszego”
– Nie znaczy, Ŝe algorytm wykona tylko jedną operację
– Znaczy, Ŝe nakład pracy nie zmienia się gdy zmienia się N
– Oznaczenie “stałych nakładów pracy”
O(n) or “Stopnia n”
– Nie znaczy, Ŝe algorytm wykona n operacji
– Znaczy, Ŝe nakłady pracy zmieniają się w sposób
proporcjonalny do n
– Oznaczenie "liniowo rosnących nakładów pracy"
Wstęp do Informatyki
[email protected]
20
<ůĂƐLJnjųŽǏŽŶŽƑĐŝŽďůŝĐnjĞŶŝŽǁĞũ
•
•
•
•
•
•
•
•
log n
n
n*log n
n2
nk
2n
n!
nn
logarytmiczna
liniowa
liniowo-logarytmiczna
kwadratowa
wielomianowa
wykładnicza
silnia
...
Hierarchia funkcji:
log n << n << n*log n << n2 << n3 << 2n << n!
Wstęp do Informatyki
[email protected]
KŐƌĂŶŝĐnjĞŶŝĂnjųŽǏŽŶŽƑĐŝ
np.
O(n5)
O(n3)
Ograniczenie górne związane
jest z najlepszym znanym
algorytmem rozwiązania
danego problemu.
luka algorytmiczna
problem otwarty – ogr.górne > ogr. dolne
problem zamknięty – ogr.górne = ogr. dolne
O(n)
O(n*log n)
Wstęp do Informatyki
Ograniczenie dolne związane
jest z matematycznym dowodem
niemoŜliwości rozwiązania problemu
za pomocą mniejszej niŜ wykazana
liczby operacji
[email protected]
21
WƌnjLJŬųĂĚͲ tŝĞǏĞ,ĂŶŽŝ
A
B
C
Cel: Przenieść wszystkie krąŜki z jednego drąŜka na inny
– Zasada 1: Wolno przenosić tylko jeden krąŜek za kaŜdym razem
– Zasada 2: Nie wolno połoŜyć większego krąŜka na mniejszym
Wstęp do Informatyki
[email protected]
tŝĞǏĞ,ĂŶŽŝ͗ZŽnjǁŝČnjĂŶŝĞ
Stan początkowy
Ruch 1
Ruch 2
Wstęp do Informatyki
Ruch 3
Ruch 4
Ruch 5
Ruch 6
Ruch 7
[email protected]
22
tŝĞǏĞ ,ĂŶŽŝͲ ųŽǏŽŶŽƑđ
• Dla trzech pierścieni naleŜy wykonać 7 operacji.
• W ogólnym przypadku: koszt wynosi 2N – 1 = O(2N)
• Przy kaŜdym zwiększeniu N o jeden, nakłady pracy
zwiększają się dwukrotnie.
• Przyrost pracy rośnie bardzo szybko!
Wstęp do Informatyki
[email protected]
tŝĞǏĞ ,ĂŶŽŝ;ϮEͿ
Dla N = 64
2N = 264 = 18,450,000,000,000,000,000
Dysponując komputerem mogącym wykonywać milion
instrukcji na sekundę…
• Wykonanie zajęłoby 584,000 lat !
Ale moŜe być jeszcze gorzej…
Wstęp do Informatyki
[email protected]
23
ųŽǏŽŶŽƑđ ƌŽnjƐČĚŶĂŝŶŝĞƌŽnjƐČĚŶĂ
Algorytmy o nierozsądnej
złoŜoności obliczeniowej mają
złoŜoność wykładniczą i wyŜszą
O (2N)
O (N!)
O (NN)
Algorytmy o rozsądnej złoŜoności
obliczeniowej mają złoŜoność
najwyŜej wielomianową :
– O (Log N)
– O (N)
– O (NK) gdzie K jest stałą
O(•)
n log n
n2
10
50
100
300
1000
33
100
282
2500
665
10,000
2469
90,000
9966
1,000,000
n3
2n
1000
125000
1,000,000
27mln
1mld (10-cyfr)
16-cyfr
65-cyfr
31-cyfr
161-cyfr
91-cyfr
n!
1024
3,6mld
nn
10mld
85-cyfr
201-cyfr
dla porównania:
Wstęp do Informatyki
☺
☺
☺
☺
☺
liczba protonów we wszechświecie – 126-cyfr
liczba mikrosekund od powstania wszechświata – 24 cyfry
[email protected]
24

Podobne dokumenty