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