Poprawność algorytmów

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

Podstawy Informatyki. Algorytmy i ich poprawność

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Poprawność semantyczna

Poprawność algorytmów wer. 1.3

Algorytmy i ich poprawność

Języki programowania zasady ich tworzenia

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Programowanie i techniki algorytmiczne

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

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

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

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

Zapisywanie algorytmów w języku programowania

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

Programowanie w języku Python. Grażyna Koba

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Definicje. Algorytm to:

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Wprowadzenie do algorytmiki

Zapisywanie w wybranej notacji algorytmów z warunkami i iteracyjnych

Wyszukiwanie. Wyszukiwanie binarne

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

ALGORYTMY I PROGRAMY

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

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

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

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

KARTA KURSU. Wstęp do programowania

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Temat 20. Techniki algorytmiczne

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Błędy leksykalne są na ogół nietrudne do znalezienia.

Wykład z Technologii Informacyjnych. Piotr Mika

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Algorytm. a programowanie -

TEORETYCZNE PODSTAWY INFORMATYKI

1 Wprowadzenie do algorytmiki

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Algorytmika i pseudoprogramowanie

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

EGZAMIN MATURALNY 2013 INFORMATYKA

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW /99

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

ECDL Podstawy programowania Sylabus - wersja 1.0

Metoda bisekcji (inaczej połowienia przedziału lub równych podziałów)

EGZAMIN MATURALNY 2013 INFORMATYKA

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Pętla for. Wynik działania programu:

2.1. Duszek w labiryncie

EGZAMIN MATURALNY 2012 INFORMATYKA

(1) Poprawność Algorytmów

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Indukcja matematyczna

6. Pętle while. Przykłady

Wprowadzenie do programowania

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

Trudne zadania. wer. 8. Wojciech Myszka, Maciej Panek styczeń 2015r.

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

Algorytm. Krótka historia algorytmów

Podstawy i języki programowania

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Algorytm. Krótka historia algorytmów

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Wstęp do informatyki- wykład 7

Teoretyczne podstawy informatyki

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

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

Złożoność obliczeniowa. Trudne zadania

Technologia informacyjna Algorytm Janusz Uriasz

START. Wprowadź (v, t) S:=v*t. Wyprowadź (S) KONIEC

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Rekurencja (rekursja)

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Język C zajęcia nr 5

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Programowanie komputerów

Teoretyczne podstawy informatyki

Rodzaje błędów w programach. Wykład9.UWAGIOGÓLNE,str.1

Wykład 2. Poprawność algorytmów

Algorytmy i struktury danych. Wykład 4

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

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

ze względu na jego zaokrąglony kształt musimy go umieścić w innych bloczkach np. ze zmienną: lub jeśli chcemy sprawdzić jaki właśnie znak odczytujemy:

Wskazówki dotyczące zmiennych, tablic i procedur 1

Techniki komputerowe w robotyce

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Technologie informacyjne - wykład 12 -

Matematyka Dyskretna 2/2008 rozwiązania. x 2 = 5x 6 (1) s 1 = Aα 1 + Bβ 1. A + B = c 2 A + 3 B = d

Transkrypt:

Poprawność algorytmów Jeśli uważasz, że jakiś program komputerowy jest bezbłędny, to się mylisz - po prostu nie zauważyłeś jeszcze skutków błędu, który jest w nim zawarty.

Jakie błędy można popełnić? Błędy językowe np. zamiast for i : = 1 to N do X[i] : = i ; napisano for i : = 1 do N do X[i] : = i ; Powstają w wyniku naruszenia składni języka (programowania), którego używamy do zapisania algorytmu. Możliwe skutki i znaczenie: zatrzymanie kompilacji lub interpretacji z komunikatem lub bez, przerwanie realizacji programu nawet jeśli kompilator błędu nie wykrył, błędy nieprzyjemne, ale zwykle niezbyt poważne - są względnie łatwe do poprawienia.

Jakie błędy można popełnić? Błędy semantyczne np. sądziliśmy, że po zakończeniu iteracji for i : = 1 to N do X[i] : = i zmienna i ma wartość N, a nie N + 1 Wynikają z niezrozumienia semantyki używanego języka programowania. Możliwe skutki i znaczenie: program nie realizuje poprawnie algorytmu, błędy trudne do przewidzenia i potencjalnie groźne, ale są do uniknięcia przy większej wiedzy i starannym sprawdzaniu znaczenia używanych instrukcji.

Jakie błędy można popełnić? Błędy logiczne np. w algorytmie zliczania zdań, w których występuje słowo algorytm nie zauważyliśmy, że sekwencja znaków. może występować także wewnątrz zdania ( Na rys. 2 pokazano schemat... ), a używaliśmy jej do wyszukiwania jego końca. Możliwe skutki i znaczenie: algorytm przestaje być poprawnym rozwiązaniem zadania algorytmicznego, dla pewnych zestawów danych wejściowych algorytm podaje wyniki niezgodne z oczekiwanymi, procesor może nie być w stanie wykonać pewnych instrukcji (np. żądamy dzielenia przez 0), błędy bardzo groźne - mogą być trudne do znalezienia i pozostawać długo w ukryciu nawet w trakcie używania programu w postaci kodu.

Jakie błędy można popełnić? Błędy algorytmiczne wynikają z wadliwie skonstruowanych struktur sterujących np. niewłaściwych zakresów iteracji, niewłaściwych warunków użytych do zatrzymywania iteracji warunkowych lub przeniesienia sterowania w niewłaściwe miejsce procesu w wyniku zastosowania wyboru warunkowego (lub instrukcji skoku). Możliwe skutki i znaczenie: algorytm dla pewnych dopuszczalnych danych wejściowych daje niepoprawny wynik, wykonanie programu realizującego algorytm jest przerywane w trybie awaryjnym, program realizujący algorytm nie kończy w normalnym trybie swego działania.

Co to oznacza? Rozmaitość źródeł błędów różnych typów Złożone programy wymagają: testowania na licznych danych (zestawy testowe) uruchamiania (badanie wyników końcowych i pośrednich) DEBUGGING - odpluskwianie

Przykład błędu algorytmicznego ITERACJA WEWNĘTRZNA J J + 1 NIE TAK start S 0; I 1 J 1 Czy J jest bezpośrednim kierownikiem I? NIE Czy J = N? TAK Czy I = N? TAK NIE NIE ITERACJA ZEWNĘTRZNA Czy P(I) > P(J)? TAK S S + P(I) I I + 1 Algorytm sumowania zarobków pracowników, którzy zarabiają więcej niż ich bezpośredni przełożeni: N jest zmienną o wartości równej liczbie pracowników, zmienne (indeksowe) I i J wskazują pracowników (kolejne elementy tablicy jednowymiarowej P(X), która zawiera płace pracowników), a zmienna S zawiera sumę zarobków; Wypisz wartość S stop

Przykład błędu algorytmicznego Pętla nieskończona: Na tym etapie działania algorytmu X = 3,1415 Czy X = 100? TAK NIE stop X X + 1

Algorytmy poprawne częściowo i całkowicie (ścisła definicja) Dowolne dopuszczalne dane Dowolne dopuszczalne dane ALGORYTM częściowo poprawny? Poprawny wynik Prawdziwa jest implikacja: jeśli to miejsce osiągnięto, to wynik jest poprawny ALGORYTM całkowicie poprawny! Poprawny wynik Prawdziwe jest stwierdzenie: to miejsce osiągnięto i wynik jest poprawny

Metoda niezmienników i zbieżników Częściowej poprawności algorytmu można dowodzić poprzez: wybranie punktów kontrolnych związanie z każdym punktem asercji (funkcji logicznej reprezentującej przypuszczenie) ustalenie niezmienników w obrębie iteracji dowiedzenie, że z prawdziwość jednej asercji wynika prawdziwość następnej, że niezmiennik pozostaje prawdziwy w kolejnych iteracjach i pociąga za sobą prawdziwość ostatniej asercji. Całkowitej poprawności algorytmu można dowodzić poprzez: dodatkowe ustalenie zbieżnika (wielkości zależnej od zmiennych i danych, która jest zbieżna) dowiedzenie, że po skończonej liczbie iteracji algorytm się zatrzyma w ostatnim punkcie kontrolnym.

Przykład zastosowania metody Algorytm odwracający dowolny napis (procedura odwrócone): odwrócone( alama2koty ) = ytok2amala - pomocnicze funkcje: głowa( alama2koty ) = a i ogon( alama2koty ) = lama2koty - operator konkatenacji (złożenia napisów): alama & 2koty = alama2koty czyli dla dowolnego napisu T zachodzi: głowa(t) & ogon(t) = T

Przykład zastosowania metody start X T Y przydział asercji start X T Y Asercja 1: T jest napisem Asercja 2: T = odwrócone(y) & X Czy X =? NIE Y głowa(x) & Y TAK stop Czy X =? NIE Y głowa(x) & Y TAK stop Asercja 3: Y = odwrócone(t) X ogon(x ) X ogon(x )

Przykład zastosowania metody cd Aby wykazać częściową poprawność algorytmu należy udowodnić: 1. Jeśli asercja 1 jest prawdziwa, to 2 też jest prawdziwa (przed rozpoczęciem iteracji) start X T Y Asercja 1: T jest napisem Asercja 2: T = odwrócone(y) & X 2. Jeśli w pewnym kroku iteracji asercja 2 jest prawdziwa, to w następnym kroku też jest ona prawdziwa (warunek z asercji 2 jest niezmiennikiem iteracji) TAK Czy X =? NIE Y głowa(x) & Y X ogon(x ) stop Asercja 3: Y = odwrócone(t) 3. Jeśli w ostatnim kroku iteracji asercja 2 jest prawdziwa, to 3 jest też prawdziwa

Przykład zastosowania metody cd Ad 1.: oczywiście zachodzi równość odwrócone( ) & T = T Ad 2.: trzeba sprawdzić czy odwrócone(y) & X = odwrócone(głowa(x) & Y) & ogon(x) dla każdego Y i X Y: AMALA X: 2KOTY odwrócone(y) & X: ALAMA 2KOTY odwrócone(głowa(x) & Y) & ogon(x): ALAMA2 KOTY głowa(x) & Y: 2AMALA ogon(x): KOTY głowa(x): 2 Y: AMALA Ad 3.: oczywiście zachodzi równość odwrócone(odwrócone(y) & ) = Y

Przykład zastosowania metody cd Aby wykazać całkowitą poprawność algorytmu należy jeszcze dodatkowo udowodnić, że dla każdego napisu T punkt kontrolny 2 jest przechodzony tylko skończoną liczbę razy tzn. 3 punkt kontrolny jest zawsze osiągany. długość napisu X jest zbieżnikiem, który może być w tym celu wykorzystany - w każdej iteracji długość X maleje o jeden znak i nie może stać się mniejsza od 0!

Problem z 1852 r.: Rozwiązanie z 1976 r.: Twierdzenie: Cztery barwy wystarczą do pokolorowania dowolnej płaskiej mapy, tak aby każdy z dwóch sąsiadujących obszarów różnił się kolorem. Dowód Algorytmiczne rozwiązanie bardzo wielu podprzypadków szczególnych, które wyczerpują wszystkie możliwości. Nikt formalnie nie dowodził poprawności tych algorytmów!

Co z rekurencją? Metoda niezmienników i zbieżników może być zastosowana także dla dowodzenia poprawności algorytmów rekurencyjnych Ale łatwiej jest skorzystać z tej metody po usunięciu rekurencji i zastąpieniu jej iteracją. procedura przenieś N z X na Y używając Z; (1) jeśli N = 1, to wypisz X Y ; (2) w przeciwnym razie (tj. jeśli N > 1) wykonaj co następuje: (2.1) wywołaj przenieś N - 1 z X na Z używając Y; (2.2) wypisz X Y ; (2.3) wywołaj przenieś N -1 z Z na Y używając X; (3) wróć do poziomu wywołania

Wieże Hanoi (raz jeszcze) Algorytm iteracyjny równoważny algorytmowi rekurencyjnemu! Ustaw trzy kołki w kółko. 1. powtarzaj co następuje, aż do uzyskania po kroku 1.1 rozwiązania problemu: 1.1. przenieś najmniejszy z dostępnych krążków z kołka, na którym się znajduje, na kołek następny w kierunku ruchu wskazówek zegara, 1.2. wykonaj jedyne możliwe przeniesienie nie zmieniające położenia najmniejszego krążka, który został przeniesiony w kroku 1.1.

Wieże Hanoi (raz jeszcze) A A A A 1. 2. 3. 4. C B C (1.1) A B B C (1.2) A C B C (1.1) B C B A A A A 5. 6. 7. 8. C (1.2) A B B C (1.1) C A B C (1.2) C B B C (1.1) A B B