Złożoność obliczeniowa Błędy Trudne zadania. Wojciech Myszka Jakub Słowiński Katedra Mechaniki i Inżynierii Materiałowej 2014



Podobne dokumenty
Poprawność algorytmów wer. 1.3

Złożoność obliczeniowa. Trudne zadania

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

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

Podstawy Informatyki. Sprawność algorytmów

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Informatyka 1. Złożoność obliczeniowa

PROBLEMY NIEROZSTRZYGALNE

TEORETYCZNE PODSTAWY INFORMATYKI

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

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

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

Podstawy Programowania. Złożoność obliczeniowa

Wstęp do programowania

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

Poprawność algorytmów

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Algorytm. a programowanie -

Podstawy Informatyki. Algorytmy i ich poprawność

Zaawansowane algorytmy i struktury danych

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

Zasady analizy algorytmów

Teoretyczne podstawy informatyki

Matematyczne Podstawy Informatyki

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

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

Strategia "dziel i zwyciężaj"

Teoretyczne podstawy informatyki

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

Elementy modelowania matematycznego

Laboratorium 5: Tablice. Wyszukiwanie binarne

INFORMATYKA SORTOWANIE DANYCH.

INFORMATYKA POZIOM ROZSZERZONY

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Przykładowe sprawozdanie. Jan Pustelnik

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy sortujące i wyszukujące

Podstawy Programowania. Złożoność obliczeniowa

Technologia informacyjna Algorytm Janusz Uriasz

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

Definicje. Algorytm to:

Algorytmy zrandomizowane

Wyszukiwanie binarne

Ogólne zasady projektowania algorytmów i programowania

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

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

Podstawy Programowania

Jeszcze o algorytmach

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Algorytm. Algorytmy Marek Pudełko

Liczby pierwsze - wstęp

Sortowanie Shella Shell Sort

MODELOWANIE RZECZYWISTOŚCI

SYSTEMY OPERACYJNE LABORATORIUM 2014/2015

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

Algorytmy. Programowanie Proceduralne 1

Sortowanie przez wstawianie Insertion Sort

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Programowanie współbieżne Wykład 2. Iwona Kochańska

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

EGZAMIN MATURALNY 2012 INFORMATYKA

Część II Uwaga: wszystkie wyniki muszą być odzwierciedleniem dołączonej komputerowej realizacji obliczeń.

Programowanie dynamiczne

Algorytm. Krótka historia algorytmów

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

Struktury Danych i Złożoność Obliczeniowa

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmika i pseudoprogramowanie

Modelowanie procesów współbieżnych

Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa. Diagnostyka i niezawodność robotów

TEORETYCZNE PODSTAWY INFORMATYKI

Schemat programowania dynamicznego (ang. dynamic programming)

Metody numeryczne. materiały do wykładu dla studentów. 1. Teoria błędów, notacja O

EGZAMIN MATURALNY 2011 INFORMATYKA

KARTA KURSU. Wstęp do programowania

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

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

Wykład z Technologii Informacyjnych. Piotr Mika

Podstawy Programowania

Jak wybrać 45 najlepszych prezentacji na FORUM?

Kurs MATURA Z INFORMATYKI

Algorytmy. Programowanie Proceduralne 1

istocie dziedzina zajmująca się poszukiwaniem zależności na podstawie prowadzenia doświadczeń jest o wiele starsza: tak na przykład matematycy

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

8. Neuron z ciągłą funkcją aktywacji.

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Programowanie dynamiczne cz. 2

Programowanie w VB Proste algorytmy sortowania

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

Możliwe strategie tworzenia niezawodnego oprogramowania:

METODA SYMPLEKS. Maciej Patan. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski

OFERTA KURSÓW KOMPUTEROWYCH NA LAPTOPACH DLA FIRM

- - Ocena wykonaniu zad3. Brak zad3

Kompletna dokumentacja kontenera C++ vector w -

1 Moduł Lutron HomeWorks QS

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Transkrypt:

Złożoność obliczeniowa Błędy Trudne zadania Wojciech Myszka Jakub Słowiński Katedra Mechaniki i Inżynierii Materiałowej 2014

Metody algorytmiczne obejście sprawdzenie wszystkich elementów pewnej struktury (tabele, wektory pętle i pętle zagnieżdżone, drzewa rekurencja) dziel i zwyciężaj sprowadzenie zadania do podzadań pracujących na mniejszych i/lub prostych zestawach danych metoda zachłanna szukamy najlepszego w danej chwili rozwiązania planowanie (programowanie) dynamiczne wszystkie zadania składowe rozwiązuje się w kierunku wzrostu ich rozmiaru, zachowując ich rozwiązania w taki sposób, aby ułatwić rozwiązywanie większych zadań

Poprawność algorytmów/programów Każdy program ma błędy. Dopóki program wykorzystywany jest do zabawy, nie odgrywa to większej roli. A co z oprogramowaniem komercyjnym? ( ) gwarantuje, że oprogramowanie objęte właściwą licencją będzie zasadniczo działać zgodnie z opisem znajdującym się we wszelkich materiałach ( ) towarzyszących oprogramowaniu.

Bug czyli błąd

Therac-25 Błąd działania urządzenia służącego do terapii antynowotworowej można było wygenerować poprzez wprowadzenie odpowiedniej kombinacji klawiszy na terminalu wprowadzania danych. Pacjent poddawany naświetlaniu otrzymywał dawkę wielusetkrotnie przekraczającą dopuszczalne normy. W efekcie 5 osób zmarło na chorobę popromienną a 1 doznała dotkliwych poparzeń.

Mariner 1 Błąd w oprogramowaniu komputera sterującego lotem w jego początkowej fazie doprowadził do serii chaotycznych korekt kursu i deregulacji lotu. W celu zapobieżenia katastrofie obsługa naziemna doprowadziła do uruchomienia systemu autodestrukcji. R n R n

Klęska w Dhahran - MIM-104 Patriot Wskutek błędu oprogramowania w zegarze systemowym komputera baterii Patriot, w efekcie uderzenia niezestrzelonej rakiety Scud w koszary w Dhahran, zginęło 28 osób.

Ariane 5, Lot 501, 04.06.1996 Zastosowanie oprogramowania nawigacyjnego z rakiety Ariane 4, która charakteryzowała się mniejszymi osiągami doprowadziło w efekcie do zniszczenia rakiety i ładunku. Oprogramowanie przeniesiono bez testów i sprawdzania. Straty oceniono na 400 mln dolarów.

Awaria prądu w USA i Kanadzie w 2003 r. Hazard niekorzystne zjawisko w układach cyfrowych, którego podłożem jest niezerowy czas propagacji (przenoszenia) sygnałów. Hazardem nazywamy błędne stany na wyjściach układów cyfrowych, powstające w stanach przejściowych (przełączania) w wyniku nieidealnych właściwości używanych elementów. Przyczyną są różnice w czasie dotarcia i wartości sygnału do określonego miejsca układu w zależności od drogi. Skutki zależą od układu. Hazard może doprowadzić do chwilowego przekłamania pracy automatu lub do trwałego przekłamania.

Czy są programy wolne od błędów? Zasadniczo nie ma takich programów. Donald E. Knuth, twórca systemu TeX wyznaczył nagrodę pieniężną za każdy znaleziony w jego programie błąd. W roku 1985 nagroda wynosiła 1 cent, była podwajana co rok aż do 327 dolarów i 68 centów. Do tej pory wypisano czeki na około 20000 dolarów nagrody.

Uruchamianie programów i badanie ich poprawności Szacuje się, że ponad 70% kosztów i nakładów na opracowanie złożonych systemów oprogramowania pochłania usuwanie błędów. Komputery zasadniczo są nieomylne. Psują się, ale przypadki, że generują błędne obliczenia są tak rzadkie, że spokojnie mówimy, iż są nieomylne Mylą się ludzie: na etapie opracowania algorytmu; na etapie jego programowania; podczas obsługi programu.

Nieomylne komputery I Czerwiec 1994: Testerzy firmy Intel zauważyli, że procesor źle liczy (błąd w instrukcji dzielenia). Kierownictwo uznało, że problem nie dotknie zbyt wielu użytkowników. 19 października: Jeden z użytkowników zauważa błąd i nabiera pewności, że to procesor (Pentium). 4195835.0/3145727.0 = 1.333 820 449 136 241 002 (Correct value) 4195835.0/3145727.0 = 1.333 739 068 902 037 589 (Flawed Pentium) 24 października: zgłasza błąd do Intela, osoba odpowiedzialna za kontakt z klientem potwierdza błąd (odtwarza go), i mówi, że nikt jeszcze go nie zgłosił.

Nieomylne komputery II 30 października odkrywca sprawę upublicznia (kilku swoim znajomym). 3 listopada informacja o błędzie pojawia się na grupie dyskusyjnej. 7 listopada Intel przyznaje się publicznie do błędu i ogłasza, że kolejne wydania procesora były już od niego wolne. 23 listopada pierwszy z producentów oprogramowania matematycznego (Mathworks) wypuszcza wersje Matlaba z modyfikacjami niwelującymi błąd. 24 listopada okazuje się, że Intel ciągle sprzedaje błędne procesory.

Nieomylne komputery III 30 listopada Intel przedstawia dokładny raport opisujący problem (i potencjalne jego konsekwencje). Za późno! 12 grudnia IBM publikuje swój własny raport oceniający znacznie poważniej konsekwencje błędu i ogłasza, że wstrzymuje sprzedaż komputerów PC z procesorem Intela. 16 grudnia - akcje Intela spadają o 3,25$ (ok. 5%) 20 grudnia: Intel przeprasza i obiecuje bezpłatnie wymienić wadliwe procesory na żądanie. Na podstawie [1].

Przyczyny problemów Intela I 1. Niechęć Intela do poinformowania o problemie swoich najważniejszych klientów. 2. Niepoinformowanie swojej pomocy technicznej, co uniemożliwiło traktowanie zgłaszających błąd w sposób specjalny. 3. Pierwsze informacje Intela na temat problemu były odbierane przez wszystkich (poza firmą) jako niezadawalające i zdawkowe. 4. Nowy procesor Intela (Pentium) był przedmiotem bardzo intensywnej kampanii reklamowej.

Przyczyny problemów Intela II 5. Błąd dotyczył bardzo podstawowej operacji, która łatwo było zademonstrować niefachowcom. 6. Błąd został wykryty na bardzo późnym etapie testowania procesora (po tym jak bardzo wiele procesorów zostało już sprzedanych). 7. Internet i sposób jego funkcjonowania. 8. Poważny konkurent firmy (IBM) zdecydował się na opublikowanie własnych analiz przedstawiających w innym świetle problem.

Jeszcze jedna definicja algorytmu Zadanie algorytmiczne można scharakteryzować zwięźle jako złożone z: 1. zbioru I dopuszczalnych danych wejściowych 2. zależności R miedzy danymi a zadanymi wynikami O R : I O

Poprawność częściowa i całkowita Algorytm A jest częściowo poprawny względem I i R, gdy dla każdego zestawu danych X z I, jeżeli A uruchomiony dla X zatrzyma się, to relacja R miedzy X a otrzymanym zestawem wyników jest spełniona. Częściowo poprawny algorytm sortowania mógłby zatrzymywać się nie dla wszystkich list dopuszczalnych, ale zatrzymując się, zawsze da w wyniku listę uporządkowaną poprawnie. Algorytm całkowicie poprawny poprawnie rozwiązuje zadanie dla każdego zestawu danych X z I.

Poprawność częściowa i całkowita dowolne poprawne dane z I dowolne poprawne dane z I algorytm A algorytm A jeśli to miejsce osiągnięto w rzeczy samej to miejsce osiągnięto wynik to tu jest oczekiwany wynik wynik i tu jest oczekiwany wynik POPRAWNOŚĆ CZĘŚCIOWA POPRAWNOŚĆ CAŁKOWITA

Czy trzeba udowadniać poprawność algorytmów? Systemy bankowe Systemy sterowania rakietami (balistycznymi) Pojazdy kosmiczne Systemy nadzoru chorych System ABS A praktyka jest taka (wedle powiedzonek): oprogramowanie udostępnia się użytkownikom nie wtedy, kiedy jego poprawność staje się pewna, ale wtedy, gdy szybkość odkrywania nowych błędów spada do poziomu, który może być zaakceptowany

Jak to się robi? Dla każdego poprawnego algorytmu można ściśle wykazać, że jest on poprawny. Inna sprawa, czy to łatwo zrobić. Z tego, że program działa poprawnie dla każdego zestawu danych, który wypróbowaliśmy nie wynika wcale, że działa dobrze dla innych zestawów. Jeżeli uda się nam znaleźć jeden jedyny dopuszczalny zestaw danych, dla którego program działa źle, to jest zły. Zazwyczaj zależy nam, żeby algorytm kiedyś się zatrzymał. Aby wykazać, że algorytm kiedyś się zatrzyma można wybrać jakąś wielkość zależną od zmiennych i struktur danych algorytmu i wykazać, że wielkość ta jest zbieżna.

Sprawność algorytmów Niepoprawne algorytmy są zawsze złe. Poprawne algorytmy mogą wymagać ulepszeń. Miara sprawności: rozmiar pamięci liczba zmiennych, liczba i rozmiar struktur danych używanych do wykonania algorytmu; czas wykonania liczba akcji elementarnych wykonanych przez procesor we trakcie przebiegu algorytmu;

Wyszukiwanie liniowe Mamy książkę telefoniczną czyli listę: <nazwisko, numer_telefonu>. Zadanie polega na znalezieniu numeru telefonicznego osoby o zadanym nazwisku. Najprostszy algorytm jest taki: 1. i 1 2. Czy poszukiwane_nazwisko = nazwisko(i) 3. Jeżeli tak Koniec 4. W przeciwnym razie i i + 1 5. Jeżeli i > n Koniec: nie znaleziono! 6. W przeciwnym razie przejdź do kroku 2. Im dłuższa lista nazwisk tym dłużej pracuje algorytm.

Wyszukiwanie liniowe W najlepszym razie pętla wykonana będzie tylko jeden raz. W najgorszym razie n razy. Średnio? To zależy jaki jest rozkład prawdopodobieństwa zapytań

Wyszukiwanie liniowe - lepszy algorytm Jeżeli uwzględnić fakt, że dane w książce telefonicznej są posortowane algorytm można istotnie ulepszyć. Pierwsze porównanie należy wykonać nie z pierwszym (czy ostatnim) nazwiskiem, tylko ze środkowym (znajdującym się dokładnie na środku listy). Jeżeli szukane nazwisko jest większe nie należy zajmować się pierwszą połową listy Takie podejście w jednym kroku redukuje rozmiar zadania o połowę! Każdy kolejny krok jest podobny zatem wielkość zadania zmniejsza się za każdym razem. W przypadku książki telefonicznej o N nazwiskach potrzeba (w najgorszym razie) log 2 (N) kroków.

Schemat algorytmu start weź całą listę wejściową L NIE MA Y porównaj Y ze środkowym elementem rozważanej listy JEST Y weź pierwszą albo drugą połowę rozważanej listy, zależnie od wyniku porównania wypisz jest stop NIE czy rozważana lista jest pusta? TAK wypisz nie ma stop

Jak bardzo O(log 2 (N)) jest lepsze od O(N)? N log 2 (N) 10 4 100 7 1000 10 milion 20 miliard 30 miliard miliardów 60

Małpia układanka

Małpia układanka Najbardziej elementarny komputerowy algorytm rozwiązywania tej układanki sprowadzi się najprawdopodobniej, do przeglądu wszystkich możliwych układów kart. 1. wybieramy jedną z kart, układamy ją na pierwszym miejscu (odpowiednio wszystkie miejsca ponumerowaliśmy); 2. na drugim miejscu mamy N-1 kart do wyboru, na kolejnym N-2, itd. następnie sprawdzamy czy spełnione są warunki. 3. liczba możliwych do rozpatrzenia kombinacji wynosi: N (N-1) (N-2) 2 1 = N! Zatem złożoność tego algorytmu jest rzędu O(N!)

Małpia układanka

Wykresy funkcji

Zadania łatwe i trudne I Jak widać z wykresów i tabelek zawsze można znaleźć zadanie którego nie da się rozwiązać w rozsądnym czasie. Przyjęto dzielić zadania na łatwe jeżeli funkcja opisująca czas ich wykonania jest ograniczona jakąś funkcją wielomianową. Zadania trudne to zadania o czasie wykonania ponadwielomianowym lub wykładniczym.

Zadania łatwe i trudne II Podsumowanie Problemy trudno rozwiązywalne wymagają niepraktycznie dużo czasu nawet dla względnie małych danych wejściowych. Problemy łatwo rozwiązywalne maj algorytmy, które są praktyczne dla zadań o rozsądnych wymiarach.

Jak sobie radzimy z trudnymi zadaniami? Zrównoleglenie (zadanie dzielone jest na mniejsze kawałki i wysyłane na wiele komputerów). Randomizacja zamiast przeglądać wszystkie możliwe rozwiązania w sposób losowy wybiera się niektóre z nich. Pozostają te, które w najlepszy sposób spełniają nasze oczekiwania. Komputery kwantowe.??? Obliczenia molekularne.???

Bibliografia Nicely, T. R., Pentium FDIV flaw FAQ, http://www.trnicely.net/pentbug /pentbug.html, 2008. Intel. White paper: Statistical analysis of floating point flaw. http://www.intel.com/support/processors/pentium/fdiv/wp/, 1994.