Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 13/10/06 Teoretyczne podstawy informatyki.

Podobne prezentacje


Prezentacja na temat: "Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 13/10/06 Teoretyczne podstawy informatyki."— Zapis prezentacji:

1 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 13/10/06 Teoretyczne podstawy informatyki Wykład 2b Poprawność programu Złożoność obliczeniowa

2 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 2 13/10/06 1.Weryfikacja poprawności programu Niezmienniki pętli Problem STOP-u 2.Złożoność obliczeniowa i asymptotyczna Notacja wielkie O Notacja i Przykłady rzędów złożoności Znajdowanie złożoności asymptotycznej Poprawność programu Złożoność obliczeniowa

3 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 3 13/10/06 Weryfikacja poprawności programu Weryfikacja opiera się o sprawdzenie specyfikacji, która jest czymś niezależnym od kodu programu. Specyfikacja wyraża, co program ma robić, i określa związek miedzy jego danymi wejściowymi i wyjściowymi. Sprawdzenie częściowej poprawności: W specyfikacji definiujemy warunek dotyczący danych wejściowych, który musi być spełniony na początku programu, tzw. warunek wstępny. Jeżeli dane nie spełniają tego warunku, to nie ma gwarancji że program będzie działał poprawnie ani nawet że się zatrzyma. W specyfikacji definiujemy również warunek końcowy, czyli co oblicza program przy założeniu że się zatrzyma. Warunek końcowy jest zawsze prawdziwy jeżeli zachodzi warunek wstępny.

4 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 4 13/10/06 Aby wykazać, że program jest zgodny ze specyfikacją, trzeba podzielić ją na wiele kroków, podobnie jak dzieli się na kroki sam program. Każdy krok programu ma swój warunek wstępny i warunek końcowy. Prosta instrukcja przypisania warunek wstępny:x 0 wyrażenie:x = x+1 warunek końcowy:x 1 Dowodzimy poprawności specyfikacji przez podstawienie wyrażenia x+1 pod każde wystąpienie x w warunku końcowym. Otrzymujemy formułę x+1 1, która wynika z warunku wstępnego x 0 Zatem specyfikacja tej instrukcji podstawienia jest poprawna, x-zmienna, v-wyrażenie x = v Weryfikacja poprawności programu

5 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 5 13/10/06 Aby wykazać prawdziwość specyfikacji instrukcji wyboru, należy dowieść, że warunek końcowy wynika z warunku wstępnego i warunku testu w każdym z przypadków instrukcji wyboru. Funkcje też mają swoje warunki wstępne i warunki końcowe; musimy sprawdzić że warunek wstępny funkcji wynika z warunku wstępnego kroku wywołania, a warunek końcowy pociąga za sobą warunek końcowy kroku wywołania. Wykazanie poprawności programowania dla pętli wymaga użycia niezmiennika pętli. Weryfikacja poprawności programu Istnieją cztery sposoby łączenia prostych kroków w celu otrzymania kroków bardziej złożonych. 1. stosowanie instrukcji złożonych (bloków instrukcji wykonywanych sekwencyjnie) 2. stosowanie instrukcji wyboru 3. stosowanie instrukcji powtarzania (pętli) 4. wywołania funkcji Każdej z tych metod budowania kodu odpowiada metoda przekształcania warunku wstępnego i końcowego w celu wykazania poprawności specyfikacji kroku złożonego:

6 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 6 13/10/06 Niezmienniki pętli Niezmiennik pętli określa warunki jakie muszą być zawsze spełnione przez zmienne w pętli, a także przez wartości wczytane lub wypisane (jeżeli takie operacje zawiera). Warunki te muszą być prawdziwe przed pierwszym wykonaniem pętli oraz po każdym jej obrocie. (mogą stać się chwilowo fałszywe w trakcie wykonywania wnętrza pętli, ale musza ponownie stać się prawdziwe przy końcu każdej iteracji) Dowodzimy że pewne zdanie jest niezmiennikiem pętli wykorzystując zasadę indukcji matematycznej. Mówi ona że: jeśli (1) pewne zdanie jest prawdziwe dla n = 0 oraz (2) z tego, że jest prawdziwe dla pewnej liczby n 0 wynika że musi być prawdziwe dla liczby n+1, to (3) zdanie to jest prawdziwe dla wszystkich liczb nieujemnych.

7 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 7 13/10/06 Stwierdzenie jest prawdziwe przed pierwszym wykonaniem pętli, ale po dokonaniu całej inicjacji; wynika ono z warunku wstępnego pętli. Jeśli założymy, że stwierdzenie jest prawdziwe przed jakimś przebiegiem pętli i że pętla zostanie wykonana ponownie, a więc warunek pętli jest spełniony, to stwierdzenie będzie nadal prawdziwe po kolejnym wykonaniu wnętrza pętli. Proste pętle maja zazwyczaj proste niezmienniki. Pętle dzielimy na trzy kategorie pętla z wartownikiem: czyta i przetwarza dane aż do momentu napotkania niedozwolonego elementu pętla z licznikiem: zawczasu wiadomo ile razy pętla będzie wykonana pętle ogólne: wszystkie inne Dowodzenie niezmienników pętli

8 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 8 13/10/06 Problem STOP-u Aby udowodnić że program się zatrzyma, musimy wykazać, że zakończą działanie wszystkie pętle programu i wszystkie wywołania funkcji rekurencyjnych. Uwagi końcowe Istnieje wiele innych elementów, które muszą być brane pod uwagę przy dowodzeniu poprawności programu: możliwość przepełnienia wartości całkowitoliczbowych możliwość przepełnienia lub niedomiar dla liczb zmiennopozycyjnych możliwość przekroczenia zakresów tablic prawidłowość otwierania i zamykania plików Dla pętli z wartownikiem wymaga to umieszczenia w warunku wstępnym informacji, że dane wejściowe zawierają wartownika. Dla pętli z licznikiem wymaga to dodefiniowania granicy dolnej (górnej) tego licznika.

9 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 9 13/10/06 Złożoność obliczeniowa: Miara służąca do porównywania efektywności algorytmów. Mamy dwa kryteria efektywności Do oceny efektywności stosujemy jednostki logiczne wyrażające związek miedzy rozmiarem danych N (wielkość pliku lub tablicy) a ilością czasu T potrzebną na ich przetworzenie. Funkcja wyrażająca zależność miedzy N a T jest zwykle bardzo skomplikowana, a jej obliczenie ma znaczenie jedynie w odniesieniu do dużych rozmiarów danych Złożoność obliczeniowa i asymptotyczna czas pamięć przybliżona miara efektywności czyli tzw. złożoność asymptotyczna

10 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 10 13/10/06 Funkcja: f(n) = n n + log 10 n Szybkość wzrostu poszczególnych składników funkcji Dla dużych wartości n, funkcja rośnie jak n 2, pozostałe składniki mogą być zaniedbane. n – ilość wykonywanych operacji nf(n)n2n2 100nlog 10 n % 4.8% 48% 91% 99% 99.9% 9% 48% 9% 1% 0.1% 0.0% 0.05% 0.001% % 0.0% 91% 48% 4.8% 0.09% 0.001% %

11 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 11 13/10/06 Notacja wielkie O (wprowadzona przez P. Bachmanna w 1894r) Definicja: f(n) jest O (g(n)), jeśli istnieją liczby dodatnie c i N takie że, f(n) < cg(n) dla wszystkich n N. Przykład: f(n) = n *n + log 10 n możemy przybliżyć jako f(n) ~ n *n + O (log 10 n) albo jako f(n) ~ O (n 2 ) Notacja wielkie O ma kilka pozytywnych własności które możemy wykorzystać przy szacowaniu efektywności algorytmów

12 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 12 13/10/06 Własności notacji wielkie O Własność 1 (przechodniość) Jeśli f(n) jest O (g(n)) i g(n) jest O (h(n)), to f(n) jest O (h(n)) Własność 2 Jeśli f(n) jest O (h(n)) i g(n) jest O (h(n)), to f(n)+g(n) jest O (h(n)) Własność 3 Funkcja an k jest O (n k ) Własność 4 Funkcja n k jest O (n k+j ) dla dowolnego dodatniego j Z tych wszystkich własności wynika, że dowolny wielomian jest wielkie O dla n podniesionego do najwyższej w nim potęgi, czyli f(n) = a k n k + a k-1 n k a 1 n +a 0 jest O (n k ) (jest też oczywiście O (n k+j ) dla dowolnego dodatniego j)

13 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 13 13/10/06 Własności notacji wielkie O Własność 5 Jeśli f(n)=c g(n), to f(n) jest O (g(n)) Własność 6 Funkcja log a n jest O (log b n) dla dowolnych a i b większych niż 1 Własność 7 log a n jest O (log 2 n) dla dowolnego dodatniego a Jedną z najważniejszych funkcji przy ocenianiu efektywności algorytmów jest funkcja logarytmiczna. Jeżeli można wykazać że złożoność algorytmu jest rzędu logarytmicznego, algorytm można traktować jako bardzo dobry. Istnieje wiele funkcji lepszych w tym sensie niż logarytmiczna, jednak zaledwie kilka spośród nich, jak O (log 2 log 2 n) czy O (1) ma praktyczne znaczenie.

14 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 14 13/10/06 Notacja i Notacja wielkie O odnosi się do górnych ograniczeń funkcji. Istnieje symetryczna definicja dotycząca dolnych ograniczeń: Definicja f(n) jest (g(n)), jeśli istnieją liczby dodatnie c i N takie że, f(n) c g(n) dla wszystkich n N. Równoważność f(n) jest (g(n)) wtedy i tylko wtedy, gdy g(n) jest O (f(n)) Definicja f(n) jest (g(n)), jeśli istnieją takie liczby dodatnie c 1, c 2 i N takie że, c 1 g(n) f(n) c 2 g(n) dla wszystkich n N.

15 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 15 13/10/06 Możliwe problemy Celem wprowadzonych wcześniej sposobów zapisu (notacji) jest porównanie efektywności rozmaitych algorytmów zaprojektowanych do rozwiązania tego samego problemu. Jeżeli będziemy stosować tylko notacje wielkie O do reprezentowania złożoności algorytmów, to niektóre z nich możemy zdyskwalifikować zbyt pochopnie. Przykład Załóżmy, że mamy dwa algorytmy rozwiązujące pewien problem, wykonywana przez nie liczba operacji to odpowiednio 10 8 n i 10n 2. Pierwsza funkcja jest O (n), druga O (n 2 ). Opierając się na informacji dostarczonej przez notacje wielkie O odrzucilibyśmy drugi algorytm ponieważ funkcja kosztu rośnie zbyt szybko. To prawda ale dopiero dla odpowiednio dużych n, ponieważ dla n<10 7 drugi algorytm wykonuje mniej operacji niż pierwszy. Istotna jest więc też stała (10 8 ), która w tym przypadku jest zbyt duża aby notacja była znacząca.

16 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 16 13/10/06 Przykłady rzędów złożoności Algorytmy można klasyfikować ze względu na złożoność czasową lub pamięciową. W związku z tym wyróżniamy wiele klas algorytmów. Algorytm stały: czas wykonania pozostaje taki sam niezależnie od ilości przetwarzanych elementów. Algorytm kwadratowy: czas wykonania wynosi O (n 2 ). Algorytm logarytmiczny: czas wykonania wynosi O (log n) itd... Analiza złożoności algorytmów jest niezmiernie istotna i nie można jej lekceważyć argumentując potencjalną szybkością obliczeń komputera. Nie sposób jej przecenić szczególnie w kontekście doboru struktury danych.

17 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 17 13/10/06 Klasy algorytmów i ich czasy wykonania na komputerze działającym z szybkością 1 instrukcja/ s klasazłożonośćliczba operacji i czas wykonania n stały logarytm liniowy kwadratowy wykładniczy O (1) O (log n) O (n) O (n 2 ) O (2 n ) s 3 s 10 s 100 s 10ms s 10 s 1ms 1s >> lat

18 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 18 13/10/06 Znajdowanie złożoności asymptotycznej Efektywność algorytmów ocenia się przez szacowanie ilości czasu i pamięci potrzebnych do wykonania zadania, dla którego algorytm został zaprojektowany. Najczęściej jesteśmy zainteresowani złożonością czasową, mierzoną zazwyczaj liczbą przypisań i porównań realizowanych podczas wykonywania programu. Przykład 1: Prosta pętla for (i=sum=0; i

19 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 19 13/10/06 Przykład 2: Pętla zagnieżdżona for (i=0; i

20 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 20 13/10/06 Analiza tych dwóch przypadków była stosunkowo prosta ponieważ liczba iteracji nie zależała od wartości elementów tablicy. Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli liczba iteracji nie jest zawsze jednakowa. Przykład 3 Znajdź najdłuższą podtablice zawierającą liczby uporządkowane rosnąco. for (i=0; len=1; i

21 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 21 13/10/06 Jeśli liczby w tablicy są uporządkowane rosnąco, to pętla zewnętrzna wykonuje się n-1 razy, a w każdym jej przebiegu pętla wewnętrzna wykona się i razy dla i {1,...,n-1}. Złożoność algorytmu jest więc O (n 2 ). Analiza tych dwóch przypadków była stosunkowo prosta ponieważ liczba iteracji nie zależała od wartości elementów tablicy. Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli liczba iteracji nie jest zawsze jednakowa. Przykład 3 Znajdź najdłuższą podtablice zawierającą liczby uporządkowane rosnąco. for (i=0; len=1; i

22 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 22 13/10/06 Z reguły dane nie są uporządkowane i ocena złożoności algorytmu jest rzeczą niełatwą ale bardzo istotna. Staramy się wyznaczy złożoność w przypadku optymistycznym, przypadku pesymistycznym oraz przypadku średnim. Często posługujemy się przybliżeniami opartymi o notacje wielkie O, i. Analiza tych dwóch przypadków była stosunkowo prosta ponieważ liczba iteracji nie zależała od wartości elementów tablicy. Wyznaczenie złożoności asymptotycznej jest trudniejsze jeżeli liczba iteracji nie jest zawsze jednakowa. Przykład 3 Znajdź najdłuższą podtablice zawierająca liczby uporządkowane rosnąco. for (i=0; len=1; i

23 Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 23 13/10/06 Do problemu systematycznej analizy czasu działania programu powrócimy jeszcze na wykładzie w styczniu … Taki pogląd funkcjonuje w środowisku programistów, nie określono przecież granicy rozwoju mocy obliczeniowych komputerów. Nie należy się jednak z nim zgadzać w ogólności. Należy zdecydowanie przeciwstawiać się przekonaniu o tym, że ulepszenia sprzętowe uczynią pracę nad efektywnymi algorytmami zbyteczną. Istnieją problemy których rozwiązanie za pomocą zasobów komputerowych jest teoretycznie możliwe, ale praktycznie przekracza możliwości istniejących technologii. Przykładem takiego problemu jest rozumienie języka naturalnego, przetwarzanie obrazów (do pewnego stopnia oczywiście) czy inteligentna komunikacja pomiędzy komputerami a ludźmi na rozmaitych poziomach. Kiedy pewne problemy stają się proste… Nowa grupa wyzwań, które na razie można sobie tylko próbować wyobrażać, wytyczy nowe granice możliwości wykorzystania komputerów. Nie przejmuj się efektywnością algorytmu… wystarczy poczekać kilka lat.


Pobierz ppt "Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2005/2006 Prof. dr hab. Elżbieta Richter-Wąs 13/10/06 Teoretyczne podstawy informatyki."

Podobne prezentacje


Reklamy Google