Wstęp do informatyki. Algorytm. Innymi słowy, czym jest algorytm?



Podobne dokumenty
Algorytmy i struktury danych

Wstęp do informatyki. Algorytm. Algorytmika. Cezary Bolek. Uniwersytet Łódzki

Przepis na rozwiązanie określonego problemu za pomocą prostych czynności wykonywanych w ściśle określonej kolejności.

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Magistrala systemowa (System Bus)

Wykład z Technologii Informacyjnych. Piotr Mika

11. Blok ten jest blokiem: a. decyzyjnym b. końcowym c. operacyjnym

Definicje. Algorytm to:

1 Wprowadzenie do algorytmiki

Algorytm. Krótka historia algorytmów

Algorytmy i struktury danych

Algorytmy. Programowanie Proceduralne 1

Wprowadzenie do algorytmiki

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Programowanie komputerów

ECDL Podstawy programowania Sylabus - wersja 1.0

Algorytm. a programowanie -

Podstawy Programowania

Technologie informacyjne - wykład 12 -

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Co to jest algorytm? przepis prowadzący do rozwiązania zadania, problemu,

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Algorytmika i pseudoprogramowanie

METODY OPISU ALGORYTMÓW KOMPUTEROWYCH

Algorytm. Krótka historia algorytmów

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Algorytmy. Programowanie Proceduralne 1

Złożoność algorytmów. Wstęp do Informatyki

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Zapisywanie algorytmów w języku programowania

Efektywna metoda sortowania sortowanie przez scalanie

INFORMATYKA SORTOWANIE DANYCH.

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Informatyka 1. Złożoność obliczeniowa

Język ludzki kod maszynowy

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Metodyki i techniki programowania

POLITECHNIKA OPOLSKA

Programowanie w języku C++ Grażyna Koba

Programowanie i techniki algorytmiczne

ALGORYTMY I PROGRAMY

Algorytmy i struktury danych

Podstawy programowania

Programowanie w języku Python. Grażyna Koba

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Wykład 2: Arkusz danych w programie STATISTICA

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

POLITECHNIKA OPOLSKA

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Poprawność algorytmów

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Algorytmy i schematy blokowe

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Definicja algorytmu brzmi:

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania Algorytmy i programowanie

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

ZARZĄDZANIE PROJEKTAMI I PROCESAMI. Mapowanie procesów AUTOR: ADAM KOLIŃSKI ZARZĄDZANIE PROJEKTAMI I PROCESAMI. Mapowanie procesów

Podstawy i języki programowania

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Scenariusz zajęć z wykorzystaniem programu edukacyjnego ELI 2.0

Szczegółowy program kursów szkoły programowania Halpress

Język programowania C C Programming Language. ogólnoakademicki

Algorytmy i struktury danych Matematyka III sem.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Iteracja warunkowadopóki(while) Blok instrukcji. Pascal: begin instrukcja1; C: { end;

Podstawy Informatyki. Algorytmy i ich poprawność

Wstęp do informatyki. Pojęcie liczebności. Zapis liczb. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

Algorytmy i struktury danych

Algorytmy i struktury danych

Języki programowania zasady ich tworzenia

Metodyki i techniki programowania

Zapis algorytmów: schematy blokowe i pseudokod 1

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Informatyki. Sprawność algorytmów

Technologia informacyjna Algorytm Janusz Uriasz

PRZEWODNIK PO PRZEDMIOCIE

Zasady analizy algorytmów

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Przeglad podstawowych pojęć (3) Podstawy informatyki (3) dr inż. Sebastian Pluta. Instytut Informatyki Teoretycznej i Stosowanej

Algorytmy. dr Dariusz Banaś (UJK) Seminarium w ramach projektu Fascynujący Świat Nauki dla uczniów gimnazjów. wersja 0.9. Start.

Temat 20. Techniki algorytmiczne

Algorytmy od problemu do wyniku

Wstęp do informatyki. Pojęcie liczebności. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

Ćwiczenie 14. Maria Bełtowska-Brzezinska KINETYKA REAKCJI ENZYMATYCZNYCH

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Transkrypt:

Wstęp do informatyki Algorytmika Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki Algorytm 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 2 Innymi słowy, czym jest algorytm? 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 1

Rola algorytmu Dane wejściowe Algorytm Dane wyjściowe Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 4 Algorytm Przepis 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 5 Cechy dobrego algorytmu Dobry algorytm musi być: Skończony Kompletny Jednoznaczny Poprawny Prosty Zawierać poziomy abstrakcji Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 6 2

Cechy algorytmu 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: 3 5 7 9 x x x x sin x = x + + 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 7 Cechy algorytmu 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: 2 2 b 4ac > 0, b 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 8 Cechy algorytmu 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 9 3

Co jest złego w tym algorytmie? (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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 10 Terminologia 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 11 Dane algorytmu 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 12 4

Problem Program Algorytm Problem Struktury danych Program Algorytmizacja Kodowanie Programowanie Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 13 Sposoby opisu algorytmu Język naturalny (np. angielski) Opis graficzny (np. sieć działań) Pseudokod lub język programowania Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 14 Algorytm: Średnie zuŝycie paliwa w l/km 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 15 5

Zapis algorytmu - sieć działań 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. zaleŝ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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 16 Sieć działań: przykład Start Stwórz listęzajęćw których chcesz uczestniczyć Liczba Godzin = 0 Wybierz przedmiot o najwyŝszym priorytecie tak Czy sąwolne miejsca? nie tak Czy konflikt czasowy? nie Dodaj przedmiot do rozkładu zajęć. Dodaj czas przedmiotu do Liczba Godzin Usuńprzedmiot z listy tak Liczba Godzin >= 15? tak nie Sąjakieśprzedmioty na liście? nie Koniec Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 17 Sieć działań operacja blok operacyjny (obliczeniowy) dokładnie jedno wejście i jedno wyjście realizacja elementarnej czynności wartość1 warunek wartość2 blok decyzyjny (warunkowy) dokładnie jedno wejście, dwa lub więcej wyjść warunek jest zdaniem (wyraŝeniem arytmetycznym), które w danej sytuacji moŝe przyjmowaćróŝne wartości wartość1 warunek 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 18 6

Sieć działań dane blok wejścia-wyjścia (we/wy) dokładnie jedno wejście i jedno wyjście oznaczenia miejsca wymiany danych pomiędzy algorytmem a światem zewnętrznym, bez konkretyzowania źródła danych i metody tej operacji Start blok startu dokładnie jedno wyjście oznaczenia początku algorytmu Stop blok startu dokładnie jedno wejście oznaczenia końca algorytmu Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 19 Zmienne 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 20 Przykład A Znajdowanie największej z trzech liczb: max(a,b,c) Start a,b,c T a>b N T a>c N T c>b N drukuj a drukuj c drukuj b Stop Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 21 7

Przykład B Start a,b,c m a Znajdowanie największej z trzech liczb: max(a,b,c) m<b N m<c N drukuj m Stop T T m b m c Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 22 A max(a,b,c) rozmiar: 4 we/wy 3 dec. 0 op. szybkość: 2 we/wy 2 dec. 0 op. rozbudowa: trudna Sieci A vs B? Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 23 B max(a,b,c) rozmiar: 2 we/wy 2 dec. 3 op. szybkość: 2 we/wy 2 dec. 1..3 op. 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. Analiza algorytmów 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 24 8

Sieci strukturalne Podstawowe rodzaje konstrukcji strukturalnych: sekwencja selekcja s1 c s2 s1 s2 sn c selekcja wielokrotna s1 s2 sn Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 25 Sieci strukturalne Podstawowe rodzaje konstrukcji strukturalnych: cykl (pętla) s T c N N s c pre-check T post-check Instrukcja s będzie wykonana 0 lub więcej razy. Cykl jest powtarzany dopóki spełniony jest warunek c. Instrukcja s będzie wykonana 1 lub więcej razy. Cykl jest powtarzany aŝ do spełnienia warunku c. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 26 Algorytmy strukturalne 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 27 9

Struktura modułowa 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 28 Zalety stosowania struktury modularnej 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 29 Programowanie strukturalne 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 30 10

Programowanie strukturalne Języki strukturalne Pascal, C, Java... Języki niestrukturalne Fortran, Basic... (goto) siec strukturalna siec niestrukturalna (spaghetti programing) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 31 Błędy w algorytmach 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 32 Błędy... przykład nieskończone pętle: X = 0 Czy X=100? Czy X=1? X = X + 1 Co sięstanie gdy na początku cyklu X będzie równe 200 lub 10.5? X = X + 0.1 Co sięstanie przy załoŝeniu, Ŝe zmienna X liczbązmiennopozycyjną (IEEE754)? Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 33 11

Fragment algorytmu automatycznej analizy rachunków za energięelektryczną Błędy... przykład pobierz dane następnego klienta Odetnij prąd, skieruj sprawę do sądu Czy klient nie płaci dłuŝej niŝx miesięcy? dolicz odsetki i kolejny miesiąc opóźnienia Wyślij upomnienie kasuj dane o zaległościach czy wpłynęła opłata za ostatni miesiąc? czy zadłuŝenie klienta wynosi 0? 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? czy to ostatni klient? Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 34 Błędy... przykład 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) czy K jest kierownikiem P? drukuj dane pracownika (P) czy zarobki P > K? czy K jest ostatni na liście? czy P jest ostatni na liście? pobierz dane następnego pracownika (K) pobierz dane następnego pracownika (P) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 35 ZłoŜoność obliczeniowa 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(n 2 -n) liczba przesunięć = 0.75(n 2 -n) złoŝonośćobliczeniowa = O(n 2 ) np. 100n, 2n+4, 0.5n+n -1, 0.01n O(n) Big-Oh Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 36 12

ZłoŜoność... 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 operacje (czas) O(n 2 ) O(n) O(log(n)) n i n j n k n Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 37 ZłoŜoność... przykład Sortowanie zbioru n=1,000,000 (słowniki, ksiąŝki telefoniczne, bazy danych) Proste metody sortowania O(n 2 ) (wstawianie, wybieranie, bąbelkowe) Sprzęt Czas 1mln op/s 6 dni 100,000 op/s 2 miesiące 10,000 op/s 2 lata Zaawansowane metody sortowania O(n*log(n)) (Shell a, przez podział,... ) Sprzęt Czas 1mln op/s 012s 100,000 op/s 2min 10,000 op/s 20min (op/s dotyczy operacji na elementach sortowanego zbioru, które mogąbyćzłoŝone, a nie elementarnych operacji procesora. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 38 ZłoŜoność... przykład Sortowanie zbioru n=1,000,000,000 (symulacje fizyczne, astronomiczne, biologiczne) Proste metody sortowania O(n 2 ) (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 Czas 1mln op/s 0.5h 100,000 op/s 4.5h 10,000 op/s 2 dni (op/s dotyczy operacji na elementach sortowanego zbioru, które mogąbyćzłoŝone, a nie elementarnych operacji procesora. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 39 13

Poprawna interpretacja O() O(1) or Stopnia pierwszego 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 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 40 Klasy złoŝoności obliczeniowej log n logarytmiczna n liniowa n*log n liniowo-logarytmiczna n 2 kwadratowa n k wielomianowa 2 n wykładnicza n! silnia n n... Hierarchia funkcji: log n << n << n*log n << n 2 << n 3 << 2 n << n! Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 41 Ograniczenia złoŝoności np. O(n 5 ) O(n 3 ) 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) Ograniczenie dolne związane jest z matematycznym dowodem niemoŝliwości rozwiązania problemu za pomocąmniejszej niŝwykazana liczby operacji Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 42 14

Przykład - WieŜe Hanoi 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: wolno połoŝyć większego krąŝka na mniejszym Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 43 WieŜe Hanoi: Rozwiązanie Stan początkowy Ruch 1 Ruch 2 Ruch 3 Ruch 4 Ruch 5 Ruch 6 Ruch 7 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 44 WieŜe Hanoi - ZłoŜoność Dla trzech pierścieni naleŝy wykonać 7 operacji. W ogólnym przypadku: koszt wynosi 2 N 1 = O(2 N ) 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 45 15

WieŜe Hanoi (2 N ) Dla N = 64 2 N = 2 64 = 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 Cezary Bolek <cbolek@ki.uni.lodz.pl> 46 ZłoŜoność rozsądna i nierozsądna Algorytmy o rozsądnej złoŝoności obliczeniowej mają złoŝoność najwyŝej wielomianową : O (Log N) O (N) O (N K ) gdzie K jest stałą Algorytmy o nierozsądnej złoŝoności obliczeniowej mają złoŝoność wykładniczą i wyŝszą O (2 N ) O (N!) O (N N ) O( ) 10 50 100 300 1000 n log n 33 282 665 2469 9966 n 2 100 2500 10,000 90,000 1,000,000 n 3 1000 125000 1,000,000 27mln 1mld (10-cyfr) 2 n 1024 16-cyfr 31-cyfr 91-cyfr n! 3,6mld 65-cyfr 161-cyfr n n 10mld 85-cyfr 201-cyfr dla porównania: liczba protonów we wszechświecie 126-cyfr liczba mikrosekund od powstania wszechświata 24 cyfry Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 47 16