METODY PROBABILISTYCZNE I STATYSTYKA INFORMACJE UZUPEŁNIAJĄCE SPIS TREŚCI. ANALIZA ALGORYTMÓW POD WZGLĘDEM ŚREDNIEGO ZACHOWANIA...3.. UWAGI WSTĘPNE...3.2. SZACOWANIE RODZAJU / KLASY ZŁOśONOŚCI OBLICZENIOWEJ DANEGO ALGORYTMU...4.3. PRZYKŁADOWE WYZNACZANIE ZŁOśONOŚCI OBLICZENIOWEJ...5.4. SYMULACYJNA OCENA ZŁOśONOŚCI ALGORYTMÓW...8.5. PRZYKŁADOWE PYTANIA TESTOWE...2.6. ZADANIA NA ĆWICZENIA RACHUNKOWE...4 2. OBLICZANIE NIEZAWODNOŚCI PROSTYCH UKŁADÓW SPRZĘTOWYCH I SYSTEMÓW PROGRAMOWYCH...7 2.. UWAGI WSTĘPNE...7 2.2. POJĘCIE NIEZAWODNOŚCI...8 2.3. POPRAWNOŚĆ, NIEZAWODNOŚĆ I ODPORNOŚĆ OPROGRAMOWANIA...2 2.4. ZWIĘKSZANIE NIEZAWODNOŚCI OPROGRAMOWANIA...23 2.5. OBLICZANIE NIEZAWODNOŚCI PODSTAWOWYCH KONFIGURACJI UKŁADÓW SPRZĘTOWYCH...26 2.6. ZADANIA NA ĆWICZENIA RACHUNKOWE...29 3. ANALIZA WYDAJNOŚCI PROSTYCH UKŁADÓW SPRZĘTOWO- PROGRAMOWYCH - ZASTOSOWANIA TEORII PROCESÓW STOCHASTYCZNYCH...30 3.. UWAGI WSTĘPNE...30 3.2. OCENA WYDAJNOŚCI OPROGRAMOWANIA...3 3.3. PODSTAWOWE POJĘCIA TEORII MASOWEJ OBSŁUGI...3 3.4. MODEL JEDNOKANAŁOWY M / M / L (, )...35 3.5. MODEL WIELOKANAŁOWY M / M / S (, ) DLA S 2...36 3.6. PRZYKŁADY...36 3.7. ZADANIA NA ĆWICZENIA RACHUNKOWE...39 WYKAZ RYSUNKÓW...40 WYKAZ TABEL...40 Data ostatniej aktualizacji: piątek, 29 października 200
Jednym z przedmiotów podstawowych wymienionych w standardach kształcenia dla kierunku studiów informatyka na studiach I stopnia jest przedmiot Metody probabilistyczne i statystyka. Minimalna liczba godzin dla tego przedmiotu wynosi 30 dla studiów licencjackich i 60 dla studiów inŝynierskich. Sprawdzony układ godzin dla stacjonarnych studiów in- Ŝynierskich to 45 godzin wykładów i 30 godzin ćwiczeń rachunkowych. Z kolei dla studiów niestacjonarnych to układ 30 + 30. Treści i efekty kształcenia dla tego przedmiotu są następujące: Treści kształcenia: Prawdopodobieństwo dyskretne. Prawdopodobieństwo ciągłe. Wartości oczekiwane. Procesy stochastyczne. Próbkowanie. Estymacja. Testowanie hipotez statystycznych. Efekty kształcenia umiejętności i kompetencje: obliczania prawdopodobieństwa zdarzeń, wartości oczekiwanej, wariancji i odchylenia standardowego; analizy algorytmów pod względem średniego zachowania; obliczania niezawodności prostych układów sprzętowych i systemów programowych; zastosowania koncepcji procesów stochastycznych do analizy wydajności prostych układów sprzętowo-programowych; przeprowadzania prostego wnioskowania statystycznego. Z analizy przedstawionych wymagań wynika, Ŝe: W przedmiocie zagadnienia teoretyczne ograniczone są niezbędnego minimum. Pominięto przykładowe klasyczne tematy dot. np.: twierdzeń granicznych, analizy regresji, estymacji przedziałowej czy weryfikacji hipotez nieparametrycznych. Rozbudowane są treści dotyczące informatycznych zastosowań rachunku prawdopodobieństwa, statystyki matematycznej i procesów stochastycznych. W dostępnej literaturze brak jest podręcznika, który zawierałby tak określone treści. Na dodatek informacje dotyczące zastosowań są publikowane w ograniczonej i niejednolitej formie. Stan taki był powodem opracowania niniejszego uzupełnienia. Niniejsze uzupełnienie obejmuje następujące, specjalistyczne zagadnienia: Analizy algorytmów pod względem średniego zachowania; Obliczania niezawodności prostych układów sprzętowych i systemów programowych; Zastosowania koncepcji procesów stochastycznych do analizy wydajności prostych układów sprzętowo-programowych. http://www.bip.nauka.gov.pl/_gallery/23/62/2362/45_informatyka.pdf 2 Data ostatniej aktualizacji: piątek, 29 października 200
. ANALIZA ALGORYTMÓW POD WZGLĘDEM ŚREDNIEGO ZACHOWANIA 2.. Uwagi wstępne Istnieje wiele problemów, których człowiek nie jest w stanie rozwiązywać, posługując się nawet najszybszymi z istniejących komputerów. Nawet kolejne generacje coraz szybszych komputerów niewiele zmieniają tę sytuację. Panuje powszechne przekonanie, Ŝe cała nadzieja w coraz szybszych algorytmach. To przekonanie najlepiej oddają następujące powiedzenia: Najlepszym sposobem przyspieszania pracy komputerów jest obarczanie ich mniejszą liczbą działań - Ralf Gomory, szef ośrodka badawczego IBM. Największe przyspieszenie osiąga się nie pedałem gazu, a głową Ferrari. Analiza algorytmu obejmuje ocenę poprawności wykonywanych na jego podstawie obliczeń oraz ocenę złoŝoności algorytmu. W wyniku oceny złoŝoności algorytmu określane są zasoby potrzebne do rozwiązania problemów obliczeniowych. RozwaŜanymi zasobami są czas wykonywania obliczeń, niezbędna pamięć czy liczba procesorów. Za twórców podstaw oceny złoŝoności uwaŝani są Juris Hartmanis i Richard Stearns. Podejście do oceny poprawności obliczeń przedstawiono w rozdziale 5 Obliczanie niezawodności prostych układów sprzętowych i systemów programowych. Ocena złoŝoności algorytmów jest szczegółowo omawiana w ramach przedmiotu Algorytmy i złoŝoność, stąd po krótkim wprowadzeniu dalsze rozwaŝania ograniczono zgodnie z tytułem rozdziału do analizy algorytmów pod względem średniego zachowania. WyróŜnia się trzy rodzaje złoŝoności: ZłoŜoność obliczeniowa liczba elementarnych operacji wykonywanych w algorytmie. ZłoŜoność czasowa czas wykonania algorytmu. ZłoŜoność pamięciowa wielkość pamięci potrzebnej do przechowywania danych, oraz pośrednich i końcowych i wyników obliczeń ZłoŜoność czasowa określona jest przez złoŝoność obliczeniową oraz dodatkowo zaleŝy od parametrów wykorzystywanych komputerów i ich systemów operacyjnych, języków w których były napisane programy, uŝytych kompilatorów itp. Wraz z zmniejszaniem cen układów elektronicznych nawet najtańsze komputery maja pamięci operacyjne o duŝej pojemności, co spowodowało zmniejszenie znaczenia złoŝoności pamięciowej. ZłoŜoność obliczeniowa z reguły nie zaleŝy wyłącznie od rozmiaru danych, ale moŝe się znacznie róŝnić dla danych wejściowych o identycznym rozmiarze. 2 Maciej M. Sysło, Anna B. Kwiatkowska, ZłoŜoność obliczeniowa i efektywność algorytmów, http://www.projekt.gammanet.pl/book/infalg/strony//i/30004.html Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman: Projektowanie i analiza algorytmów, ftp://ftp.helion.pl/online/proalg/proalg-.pdf Algorytmy i struktury danych/wstęp: poprawność i złoŝoność algorytmu, http://wazniak.mimuw.edu.pl/index.php?title=algorytmy_i_struktury_danych/wst%c4%99p:_poprawno%c5 %9B%C4%87_i_z%C5%82o%C5%BCono%C5%9B%C4%87_algorytmu ZłoŜoność obliczeniowa: http://pl.wikipedia.org/wiki/z%c5%82o%c5%bcono%c5%9b%c4%87_obliczeniowa http://bonito.pl/k-707078-projektowanie-i-analiza-algorytmow http://www.wsti.pl/materialy/slajdy2_so.pdf Data ostatniej aktualizacji: piątek, 29 października 200 3
Czas wykonywania obliczeń zaleŝy od danych wejściowych. Przykładowo przy sortowaniu: im krótszy jest ciąg danych tym krótszy jest czas ich posortowania, im bardziej wstępnie posortowany jest ciąg danych tym krótszy jest czas ich całkowitego posortowania. Jak wiadomo dwoma często stosowanymi sposobami podejścia są: rozpatrywanie przypadków najgorszych (złoŝoność pesymistyczna) oraz zastosowanie określonego sposobu uśrednienia wszystkich moŝliwych przypadków (złoŝoność oczekiwana). Ocena złoŝoności obliczeniowej algorytmu moŝe być dokonana teoretycznie lub symulacyjnie jest ona niezaleŝna od środowiska sprzętowo-programowego. Z kolei ocena złoŝoności czasowej jest zawsze prowadzona w określonym środowisku sprzętowo-programowym. Na zakończenie rozwaŝań wstępnych naleŝy podkreślić, Ŝe 3 istnieje wiele programów, które testują róŝne charakterystyki sprzętu komputerowego i oprogramowanie - moc pojedynczej maszyny, interakcje w systemie klient-serwer (z pojedynczym lub wieloma klientami) czy liczbę transakcji na sekundę w systemie przetwarzania transakcyjnego. W miarę jak pojawiają się nowe wersje oprogramowania i sprzętu, zmieniają się składowe testy benchmarków i ich wagi w obliczaniu wyniku benchmarku - dlatego jednym z warunków uzyskania wiarygodnej oceny w testach porównawczych jest konieczność zastosowania tej samej wersji benchmarku..2. Szacowanie rodzaju / klasy złoŝoności obliczeniowej danego algorytmu 4 W niektórych prostych przypadkach moŝliwe jest oszacowanie złoŝoności obliczeniowej bez wykonywania skomplikowanych obliczeń, czy symulacji. Przykład Wyszukiwanie wartości maksymalnej w ciągu nieposortowanym ZałóŜmy, Ŝe mamy n liczb. Potrzebujemy przejrzeć kaŝdą z nich po to, by określić, która z nich jest największa. Potrzebujemy zatem n operacji ("spojrzeń) - liczba potrzebnych operacji jest proporcjonalna do rozmiaru ciągu - więc złoŝoność liniowa - O(n). Przykład 2 Wyszukiwanie danej liczby w ciągu posortowanym. Pomyślmy jakąś liczbę od do 000. MoŜna ją zgadnąć zadając maksymalnie 0 pytań na które odpowiada się tak lub nie. A oto pytania: Czy ta liczba jest mniejsza od 500? Jeśli tak, to czy jest mniejsza od 250? Jesli nie, to czy jest mniejsza od 375? Jeśli nie, to czy jest mniejsza od 438? Jeśli nie, to czy jest mniejsza od 469? Jeśli tak, to czy jest mniejsza od 443? Jeśli tak, to czy jest mniejsza od 440? Jeśli tak, to tą liczbą jest 439. Idea jest taka, Ŝe dzięki temu, Ŝe ciąg jest posortowany, w kolejnych krokach pomniejszany jest o połowę zakres, w którym znajduje się liczba dzięki temu potrzebne jest ok. log 2 000 operacji - a więc występuje tu złoŝoność logarytmiczna - O(log 2 n). 3 http://pl.wikipedia.org/wiki/testowanie_wzorcowe 4 http://forum.ks-ekspert.pl/topic/4-algorytmy-zlozonosc-obliczeniowa/ 4 Data ostatniej aktualizacji: piątek, 29 października 200
Przykład 3 Sortowanie przez wybieranie. Mamy nieposortowany ciąg o n elementach i posortowany o 0 elementach. Szukamy najmniejszego elementu w ciągu nieposortowanym i wstawiamy go na koniec posortowanego ciągu, tyle razy, aŝ posortowany ciąg będzie miał n elementów, a nieposortowany 0. Taki stan uzyskamy wtedy, gdy wszystkie n elementów z nieposortowanego przerzucimy w posortowany. Musimy zatem n razy wyszukać najmniejszy element w ciągu - a wyszukiwanie najmniejszego elementu, jak wiemy z. przykładu, ma złoŝoność O(n) (liniową). Zatem wykonanie n razy operacji o złoŝoności n wymaga n*n operacji, czyli ma złoŝoność kwadratową O(n*n) = O(n 2 ). Najczęściej algorytmy mają złoŝoność czasową proporcjonalną do funkcji: log(n)- złoŝoność logarytmiczna n - złoŝoność liniowa nlog(n) - złoŝoność liniowo-logarytmiczna n 2 - złoŝoność kwadratowa n k - złoŝoność wielomianowa 2 n - złoŝoność wykładnicza n! - złoŝoność wykładnicza, poniewaŝ n!>2 n juŝ od n=4.3. Przykładowe wyznaczanie złoŝoności obliczeniowej 5 Ocenimy złoŝoność obliczeniową sortowania przez wstawianie, które polega na pobieraniu kolejnych elementów ciągu i poszukaniu dla niego odpowiedniego miejsca na liście elementów uporządkowanych. Gdy miejsce zostanie znalezione, to elementy listy się rozsuwa i w tak ustalone miejsce wkłada ostatnio pobrany element. Algorytm sortowania przez wstawianie moŝna porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne, aŝ do wyczerpania talii. KaŜdą pobraną kartę porównujemy z kartami, które juŝ trzymamy w ręce i szukamy dla niej miejsca przed pierwszą kartą starszą (młodszą w przypadku porządku malejącego). Gdy znajdziemy takie miejsce, rozsuwamy karty i nową wstawiamy na przygotowane w ten sposób miejsce (stąd pochodzi nazwa algorytmu - sortowanie przez wstawianie, ang. Insertion Sort). Jeśli nasza karta jest najstarsza (najmłodsza), to umieszczamy ją na samym końcu. Tak porządkujemy karty. A jak przenieść tę ideę do świata komputerów i zbiorów liczbowych? Przykład Ciąg liczb do sortowania: 2,4,,6,3 Realizacja: ) 2 4 6 3 - element ostatni jest początkiem listy uporządkowanej 2) wybiera się element leŝący tuŝ przed elementem ostatnim (liczba 6 na miejscu czwartym) i porównuje się z elementem listy (3), element 6 > 3 zatem liczbę 3 przesuwa się na miejsce czwarte, a na zwolnione miejsce piąte wstawia się liczbę 6. Po tym kroku mamy więc 2 4 3 6 3) wybiera się następny element (), i porównuje z elementami listy. PoniewaŜ < 3 to liczba pozostaje na swoim, trzecim miejscu. Zatem otrzymujemy 2 4 3 6. 5 http://www.gamedev.pl/files/articles/megatutorial/m_b.pdf http://xion.org.pl/files/texts/mgt/html/m_b.html http://pl.wikipedia.org/wiki/sortowanie_przez_wstawianie Data ostatniej aktualizacji: piątek, 29 października 200 5
4) wybiera się następny element (4), i porównuje z elementami listy poniewaŝ dopiero dla ostatniego elementu 4 < 6, to liczby z pozycji trzeciej i czwartej przesuwa się odpowiednio na pozycję drugą i trzecią, a na zwolnioną pozycję czwartą wstawią się liczbę 4. Zatem 2 3 4 6 5) wybiera się ostatni (2), i porównuje z elementami listy. Dla trzeciej pozycji 2 < 3, to liczbę z pozycji drugiej przesuwa się na pozycję pierwszą, a na zwolnioną pozycję wstawią liczbę 2. Zatem 2 3 4 6 W tabeli podano schemat blokowy algorytmu, opis w pseudokodzie, liczbę wykonań poszczególnych instrukcji i komentarz. Zakładając, Ŝe czas wykonania kaŝdej instrukcji wynosi c i, na podstawie tabeli moŝna podać wzór na złoŝoność czasową. n Z t (n) = c +nc 2 +(n-)c 3 +(n-)c 4 + t(i) c 5 +( t(i) -)c 6 +( t(i) -)c 7 +(n-)c 8 +(n-)c 9 Po uporządkowaniu otrzymujemy zaleŝność w postaci następującej: i= Z t (n) =(c -c 3 -c 4 -c 6 -c 7 -c 8 -c 9 ) + (c 2 +c 3 +c 4 +c 8 +c 9 )n + (c 5 +c 6 +c 7 ) n t(i) Wprowadzając oznaczenia: d =c -c 3 -c 4 -c 6 -c 7 -c 8 -c 9 d 2 =c 2 +c 3 +c 4 +c 8 +c 9 d 3 =c 5 +c 6 +c 7 otrzymuje się ostateczny wzór na złoŝoność czasową algorytmu / programu na sortowanie przez wstawianie n Z t (n) =d + d 2 n + d 3 t(i) Ocena optymistyczna Tablica jest juŝ posortowana na samym początku - a zatem wykonanie algorytmu jest zbędne. Wszystkie elementy są na właściwych miejscach, a więc liczba sprawdzeń t i będzie równa przy kaŝdym obrocie zewnętrznej pętli. Wówczas funkcja złoŝoności jest następująca: n n i= T opt (n) = 5n-4+3 t(i) = 5n-4+3 = 5n 4 +3(n-) = 5n-4+3n-3 = 8n-7 i= Otrzymaliśmy liniową zaleŝność od n! Ocena pesymistyczna n i= W tym przypadku podana tablica jest takŝe posortowana, ale w odwrotnym porządku! Wtedy teŝ wszystkie elementy muszą być kolejno posyłane na koniec tablicy: i-ty element przemieści się więc o i - miejsc do tyłu w kaŝdym obrocie zewnętrznej pętli. Wniosek: t i = i dla kaŝdego i = 2, 3,, n. Funkcja T(n) będzie zatem wyglądała tak: T pes (n) = 5n-4+3 n n n(n + ) Uwzględniając, Ŝe + 2 +.. + n = i = otrzymuje się i = i= 2 i= Zatem n(n ) 3 T pes (n) = 5n-4+3 = 2 7 n + n + 3 2 2 2 Otrzymaliśmy więc funkcję kwadratową. i= n i= i n i= i= n(n ) 2 + n(n ) -n = 2 6 Data ostatniej aktualizacji: piątek, 29 października 200
Tabela. Algorytm sortowania przez wstawianie Schemat blokowy algorytmu Opis algorytmu Krok Postać instrukcji Liczba wykonań Komentarz j = n- 2 for i= to n- n 3 x = d[j] n- 4 i = j + n- 5 while i n & x d[i] 6 d[i-] = d[i] 7 i = i+ n i= n i= t(i) Instrukcja inicjująca licznik (j = n-) zewnętrznej pętli for Sprawdzenie wartości tegoŝ licznika (j ) na początku kaŝdego cyklu zewnętrznej pętli for Przypisanie zmiennej pomocniczej x wartości d[j] w zewnętrznej pętli Instrukcja inicjująca licznik (i = j + ) na początku wewnętrznej pętli for Instrukcja sprawdzająca wartość tego licznika (i n & x d[i]) na początku kaŝdego cyklu wewnętrznej pętli for (właściwie mamy tutaj dwa porównania, ale dla uproszczenia potraktujemy to jako jedną instrukcję) t(i) - Przypisanie d[i -] = d[i] w wewnętrznej pętli n t(i) - i= Inkrementacja licznika (i) - operacja matematyczna powodująca zwiększenie wartości zmiennej o jeden 8 d[i-] = x n- Przypisanie d[i-] = x w zewnętrznej pętli 9 j = j - n- Dekrementacja licznika (j) pod koniec cyklu wewnętrznej pętli - instrukcja zmniejszająca o jeden wartość zmiennej podanej jako argument Suma n Uwaga: t(i) oznacza liczba sprawdzeń warunku pętli 5n-4+3 t(i) for w i-tym przebiegu i= 7
Ocena średnia Przyjmujemy, Ŝe z jednakowym prawdopodobieństwem i-ty element jest przemieszczany o moŝliwą liczbę miejsc: ti i. Zatem średnia liczba przesunięć tego elementu jest równa: t i i i(i + ) i + = k = = i i 2 2 k= Wówczas funkcja złoŝoności przedstawia się następująco: Suma w powyŝszej zaleŝności jest równa: n n n n i= i= i= i= n T sr (n) = 5n-4+3 ti = 5n-4+3 i= n i= i + 2 i + n n(n ) n n n (n )(n 2) = i = i = = = 2 2 2 2 2 2 2 2 2 2 4 Zatem ostatecznie 3 2 5 T sr (n) = n + n 4 4 2 Czyli podobnie jest przy ocenie pesymistycznej otrzymaliśmy funkcję kwadratową. Przykład 6 Sortowanie tablicy zawierającej milion liczb (0 6 ). Superkomputer: wykonuje 00 milionów (0 8 ) operacji na sekundę. Sortujemy algorytmem przez wstawianie: T(n) = 2n 2 T(0 6 ) = 2 * (0 6 )2 / 0 8 = 20 000 sekund 5.56 godzin Komputer osobisty: wykonuje milion (06) operacji na sekundę Sortujemy algorytmem przez scalanie: T(n) = 50nlgn T(0 6 ) = 50 * 0 6 * lg0 6 / 0 6 000 sekund 6.67 minut Komputer osobisty wykonał zadanie 20 razy szybciej..4. Symulacyjna ocena złoŝoności algorytmów Analityczna ocena złoŝoności algorytmów jest moŝliwa jedynie dla obliczeń stosunkowo prostych. Dla obliczeń skomplikowanych jedyną drogą oceny złoŝoności jest metoda symulacyjna. Przy ocenie złoŝoności obliczeniowej naleŝy opracować model symulacyjny algorytmu, który umoŝliwia rejestrację liczby wykonywanych operacji elementarnych. Ideę postępowania dla prostego algorytmu przedstawiono na rys.. Dla algorytmu sortowania przez wstawianie kluczowe jest rejestrowanie liczby sprawdzeń warunku pętli for w i-tym przebiegu. PoniŜej zamieszczono wyniki oceny analitycznej i oceny symulacyjnej 7 dla tego algorytmu. 6 http://www.sciaga.pl/tekst/45977-46-zlozonosc_obliczeniowa_algorytmu 7 Algorytmy sortowania. Opis i demonstracja http://www.home.umk.pl/~abak/wdimat/s/index.html 8
Liczba porównań przy ocenie optymistycznej jest równa k opt = n, a przy ocenie pesymistycznej k pes =. Zakładając, Ŝe wszystkie te wartości są jednakowo prawdopo- n(n ) 2 dobne w oparciu o wzór na sumę k początkowych wyrazów ciągu arytmetycznego a + a k Sk = a + a 2 +... + a k = k 2 otrzymuje się zaleŝność na średnią liczbę porównań: 2 n(n ) 2n 2 + n n n 2 kopt + k + pes n n 2 k sr = n 2 2 + sr = = = n 2 2 2 4 gdzie: sr n(n ) n(n ) 2n + 4 2 n 3n + 4 n sr = (n ) + = = 2 2 2 Rodzaj oceny Wyznaczanie Liczba porównań dla n = 0 Optymistyczna Pesymistyczna Średnia 0 9 00 + 0 2 8 Analityczne k opt = 0 - = 9 k pes = = 45 ksr = = = 29,5 2 4 4 Symulacyjne 9 45 25 30 34 28 27 24 29 3 24 35 Średnia = 287/0=28,7 Przy wykorzystaniu tego samego programu symulacyjnego otrzymano następujące liczbą porównań L dla wybranych liczb sortowanych, przypadkowo ustawionych danych - N: L 30 35 64 72 9 6 59 73 88 206 N 0 2 4 6 8 20 22 24 26 28 Wykres dla tych danych wraz z liniową linia trendu jest następujący: Liczba porównań 250 200 50 00 50 0 206 88 73 59 6 9 64 72 30 35 0 2 4 6 8 20 22 24 26 28 Liczba danych Data ostatniej aktualizacji: piątek, 29 października 200 9
Generator danych wejściowych Czy kontynuować symulację? TAK Wylosowanie i-tej porcji danych wejściowych NIE Obliczenie estymatorów parametrów złoŝoności O L O 2 L 2 W 3 O 5 O 4 L 5 L 4 Rysunek. Przykład symulacji dla wyznaczenia złoŝoności obliczeniowej Przy ocenie złoŝoności czasowej programów wykorzystuje się program implementujący algorytm, który uzupełnia się o generator danych wejściowych, liczniki ilości wykonywanych operacji w poszczególnych fragmentach programu oraz moduł obliczający ich średnie charakterystyki. Ideę przedstawia rysunek 2. 0 Data ostatniej aktualizacji: piątek, 29 października 200
Generator danych wejściowych Czy kontynuować symulację? NIE TAK Wylosowanie i-tej porcji danych wejściowych Obliczenie estymatorów parametrów złoŝoności Pomiar czasu t i Program implementujący algorytm Pomiar czasu t i2 Obliczenie czasu przetwarzania Ti = ti2-ti Rysunek 2. Schemat blokowy symulacyjnej oceny złoŝoności czasowej programów MoŜliwe jest takŝe symulacyjne wyznaczenie średnich czasów wykonywania operacji z ustaloną szczegółowością, np. na poziomie modułów. W tym przypadku naleŝy rejestrować czasy wykonywania obliczeń w poszczególnych modułach. Przypadek ten jest więc połączeniem podejść przedstawionych na rys. i 2. NaleŜy pamiętać tutaj, ze rejestracja czasów wykonywania obliczeń zajmuje teŝ pewien czas. Tak więc estymowane czasy obliczeń będą zawyŝone. K i = W metodzie symulacyjnej kluczowe jest zapewnienie reprezentatywności generowanych danych. NaleŜy takŝe zapewnić wystarczającą liczbę prób (liczbę generowanych porcji danych). Wyznaczane estymatory parametrów złoŝoności obliczeniowej mogą być zarówno K punktowe, począwszy od średniej arytmetycznej T = Ticzy wariancji, jak i przedziałowe w postaci przedziałów ufności. Symulacyjnie moŝna wyznaczać takŝe wartości rozmaitych współczynników korelacji, np. określających zaleŝność czasu obliczeń od wielkości danych wejściowych. Data ostatniej aktualizacji: piątek, 29 października 200
.5. Przykładowe pytania testowe 8. Sortowanie polega na: uporządkowaniu zbioru danych względem pewnych cech charakterystycznych kaŝdego elementu tego zbioru wyznaczaniu wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na Ŝądanie) wyznaczania wartości argumentów funkcji przed jej wywołaniem wyznaczania wartości argumentów funkcji po jej wywołaniu 2. Czasowa złoŝoność obliczeniowa algorytmu określa: kolejności wykonywania obliczeń statystycznie czas wykonywania algorytmu w zaleŝności od liczby danych wejściowych podanie równowaŝnika terminu nieznanego w terminach znanych statystycznie czas wykonywania algorytmu w zaleŝności od liczby danych wyjściowych 3. ZłoŜoność obliczeniowa charakteryzowana jest przy pomocy: sumy zakresów wszystkich nazw współczynnika operacji dominujących notacji O (omikron) wartości implementacji 4. Który algorytm jest najbardziej korzystny: O(n) O(n!) O(n log n) wszystkie odpowiedzi są poprawne 5. O(n 2 ) zapis klasy złoŝoności obliczeniowej algorytmu oznacza: algorytm o liniowej zaleŝności czasu wykonania od ilości danych algorytm, w którym czas wykonania rośnie z kwadratem liczby przetwarzanych elementów bardzo pesymistyczny algorytm, czas wykonania rośnie szybko wraz ze wzrostem liczby elementów wejściowych algorytm, w którym czas wykonania rośnie wprost proporcjonalnie do kwadratu liczb przetwarzanych elementów 6. Pamięciowa złoŝoność obliczeniowa określa: ilość zasobów komputera, których wymaga dany algorytm w zaleŝności od liczby danych wejściowych statystycznie czas wykonywania algorytmu w zaleŝności od liczby danych wejściowych liczbę procesów potrzebnych do wykonania danego algorytmu wszystkie odpowiedzi są poprawne 7. Algorytmy sortujące w miejscu: wymagają zarezerwowania w pamięci dodatkowych obszarów, których wielkość jest uzaleŝniona od liczby sortowanych elementów lub od ich wartości wymagają stałej liczby dodatkowych struktur danych, która nie zaleŝy od liczby elementów sortowanego zbioru danych ani od ich wartości wymagają wyznaczenia wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na Ŝądanie) wymagają zmiennej liczby struktur danych, która zaleŝy od liczby elementów sortowanego zbioru danych oraz od ich wartości 8 http://szkolnictwo.pl/test,nauka,3578,algorytmy_sortuj%c4%85cesortowanie_przez_wstawianie_sortowanie_przez_wyb%c3%b3r 2 Data ostatniej aktualizacji: piątek, 29 października 200
8. Algorytmy stabilne: zachowują kolejność elementów równych kolejność wynikowa elementów równych jest nieokreślona wyszukują elementy mające się znaleźć na zadanej pozycji nie zachowują kolejności elementów równych 9. Sortowanie przez wybór polega na: wyszukaniu elementu mającego się znaleźć na zadanej pozycji i zamianie miejscami z tym, który jest tam obecnie usuwaniu pewnego elementu z danych wejściowych i wstawianiu go na odpowiednie miejsce w wynikach badaniu kolejno wszystkich pary obiektów odległych o określoną rozpiętość usuwaniu kolejnego elementu z danych wejściowych i wstawianiu go na ściśle określone miejsce w wynikach 0. W metodzie sortowania przez wybór: algorytm jest niestabilny, sortowanie odbywa się w miejscu algorytm jest stabilny, sortowanie odbywa się w miejscu algorytm jest niestabilny, sortowanie nie odbywa się w miejscu algorytm jest stabilny, sortowanie nie odbywa się w miejscu. Jaką klasę czasowej złoŝoności obliczeniowej posiada metoda sortowania przez wybór? O(n!) O(n2) O(n log n) O(n) 2. Sortowanie przez wstawianie polega na: usuwaniu pewnego elementu z danych wejściowych i wstawianiu go na odpowiednie miejsce w wynikach wyszukaniu elementu mającego się znaleźć na zadanej pozycji i zamianie miejscami z tym, który jest tam obecnie badaniu kolejno wszystkich pary obiektów odległych o określoną rozpiętość przestawieniu elementów zbioru wejściowego między sobą, według określonej zasady 3. Które stwierdzenie jest nieprawdziwe: algorytm sortowania przez wstawianie jest wydajny dla danych wstępnie posortowanych algorytm sortowania przez wstawianie jest stabilny algorytm sortowania przez wstawianie jest wydajny dla zbiorów o duŝej liczebności algorytm sortowania przez wstawianie jest wydajny dla zbiorów o małej liczebności 4. Algorytm sortowania przez wybór jest duŝo lepszy od sortowania przez wstawianie w przypadku zbiorów w znacznym stopniu uporządkowanych prawda fałsz 5. W metodzie sortowania przez wybór: algorytm jest niestabilny, sortowanie nie odbywa się w miejscu algorytm jest stabilny, sortowanie odbywa się w miejscu algorytm jest stabilny, sortowanie nie odbywa się w miejscu algorytm jest niestabilny, sortowanie odbywa się w miejscu 6. Najbardziej niekorzystnym przypadkiem sortowania przez wybór jest: sortowanie zbioru posortowanego odwrotnie sortowania zbioru o losowym rozkładzie elementów Ŝadne z powyŝszych wszystkie odpowiedzi są poprawne Data ostatniej aktualizacji: piątek, 29 października 200 3
.6. Zadania na ćwiczenia rachunkowe Zadanie - Algorytm sortowania przez wybór 9 ZałóŜmy, iŝ chcemy posortować zbiór liczbowy rosnąco. Zatem element najmniejszy powinien znaleźć się na pierwszej pozycji. Szukamy w zbiorze elementu najmniejszego i wymieniamy go z elementem na pierwszej pozycji. W ten sposób element najmniejszy znajdzie się na swojej docelowej pozycji. W identyczny sposób postępujemy z resztą elementów naleŝących do zbioru. Znów wyszukujemy element najmniejszy i zamieniamy go z elementem na drugiej pozycji. Otrzymamy dwa posortowane elementy. Procedurę kontynuujemy dla pozostałych elementów dotąd, aŝ wszystkie będą posortowane. Rysunek 3. Algorytm sortowania przez wybór Dla algorytmu sortowania przez wybór: Pętla zewnętrzna sterowana zmienną j wyznacza kolejne elementy zbioru o indeksach od do n -, w których zostaną umieszczone elementy minimalne. Na początku tej pętli zakładamy, iŝ elementem minimalnym jest element d[j] i zapamiętujemy jego indeks w zmiennej p min. W pętli numer 2 sterowanej zmienną i porównujemy pozostałe elementy zbioru z elementem d[p min ]. Jeśli element zbioru d[i] jest mniejszy od elementu d[p min ], to znaleźliśmy nowy element minimalny. W takim przypadku zapamiętujemy jego pozycję w p min i kontynuujemy pętlę wewnętrzną. Po zakończeniu pętli wewnętrznej pmin zawiera indeks elementu minimalnego. Zamieniamy miejscami element d[j] z elementem d[p min ]. Dzięki tej operacji element minimalny znajduje się na swojej docelowej pozycji. Zwiększamy j przechodząc do kolejnego elementu zbioru i kontynuujemy pętlę zewnętrzną.. Wyznaczyć optymistyczną, pesymistyczną i średnią złoŝoność obliczeniową. 2. Wyznaczyć liczbę wykonywanych iteracji dla powyŝszych przypadków. 3. Obliczyć wartości powyŝszych wskaźników dla n = 0. 4. Porównać obliczone wartości z wynikami symulacji 0 liczby porównań w której dla n = 0 dla wszystkich sprawdzanych danych otrzymano taką samą liczbę porównań, równą 55. 5. Dla otrzymanych wyników symulacji ocenić korelację pomiędzy liczbą porównań L i liczbą sortowanych, przypadkowo ustawionych danych - N: L 55 78 05 36 7 20 253 300 35 406 N 0 2 4 6 8 20 22 24 26 28 9 http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0009.php 0 http://www.home.umk.pl/~abak/wdimat/s/selectsort.html 4 Data ostatniej aktualizacji: piątek, 29 października 200
Zadanie 2 Algorytm sortowania szybkiego Idea sortowania szybkiego jest następująca: DZIEL najpierw sortowany zbiór dzielimy na dwie części w taki sposób, aby wszystkie elementy leŝące w pierwszej części (zwanej lewą partycją) były mniejsze lub równe od wszystkich elementów drugiej części zbioru (zwanej prawą partycją). ZWYCIĘśAJ kaŝdą z partycji sortujemy rekurencyjnie tym samym algorytmem. POŁĄCZ połączenie tych dwóch partycji w jeden zbiór daje w wyniku zbiór posortowany. Do utworzenia partycji musimy ze zbioru wybrać jeden z elementów, który nazwiemy piwotem. W lewej partycji znajdą się wszystkie elementy niewiększe od piwotu, a w prawej partycji umieścimy wszystkie elementy niemniejsze od piwotu. PołoŜenie elementów równych nie wpływa na proces sortowania, zatem mogą one występować w obu partycjach. RównieŜ porządek elementów w kaŝdej z partycji nie jest ustalony. Jako piwot moŝna wybierać element pierwszy, środkowy, ostatni, medianę lub losowy. Dla naszych potrzeb wybierzemy element środkowy: piwot d[(lewy + prawy) div 2] piwot - element podziałowy d[ ] - dzielony zbiór lewy - indeks pierwszego elementu prawy - indeks ostatniego elementu Dzielenie na partycje polega na umieszczeniu dwóch wskaźników na początku zbioru - i oraz j. Wskaźnik i przebiega przez zbiór poszukując wartości mniejszych od piwotu. Po znalezieniu takiej wartości jest ona wymieniana z elementem na pozycji j. Po tej operacji wskaźnik j jest przesuwany na następną pozycję. Wskaźnik j zapamiętuje pozycję, na którą trafi następny element oraz na końcu wskazuje miejsce, gdzie znajdzie się piwot. W trakcie podziału piwot jest bezpiecznie przechowywany na ostatniej pozycji w zbiorze. Na element podziałowy wybieramy element leŝący w środku dzielonej partycji. Wyliczamy jego pozycję i zapamiętujemy ją tymczasowo w zmiennej i. Robimy to po to, aby dwukrotnie nie wykonywać tych samych rachunków. Rysunek 4. Algorytm sortowania szybkiego http://edu.i-lo.tarnow.pl/inf/alg/003_sort/008.php Data ostatniej aktualizacji: piątek, 29 października 200 5
Element d[i] zapamiętujemy w zmiennej piwot, a do d[i] zapisujemy ostatni element partycji. Dzięki tej operacji piwot został usunięty ze zbioru. Ustawiamy zmienną j na początek partycji. Zmienna ta zapamiętuje pozycję podziału partycji. W pętli sterowanej zmienną i przeglądamy kolejne elementy od pierwszego do przedostatniego (ostatni został umieszczony na pozycji piwotu, a piwot zapamiętany). Jeśli i-ty element jest mniejszy od piwotu, to trafia on na początek partycji - wymieniamy ze sobą elementy na pozycjach i-tej i j-tej. Po tej operacji przesuwamy punkt podziałowy partycji j. Po zakończeniu pętli element z pozycji j-tej przenosimy na koniec partycji, aby zwolnić miejsce dla piwotu, po czym wstawiamy tam piwot. Zmienna j wskazuje zatem wynikową pozycję piwotu. Pierwotna partycja została podzielona na dwie partycje: partycja lewa od pozycji lewy do j - zawiera elementy mniejsze od pikotu partycja prawa od pozycji j + do pozycji prawy zawiera elementy większe lub równe piwotowi. Sprawdzamy, czy partycje te obejmują więcej niŝ jeden element. Jeśli tak, to wywołujemy rekurencyjnie algorytm sortowania szybkiego przekazując mu granice wyznaczonych partycji. Po powrocie z wywołań rekurencyjnych partycja wyjściowa jest posortowana rosnąco. Kończymy algorytm. Dla algorytmu sortowania szybkiego:. Wyznaczyć optymistyczną, pesymistyczną i średnią złoŝoność obliczeniową. 2. Wyznaczyć liczbę wykonywanych iteracji dla powyŝszych przypadków. 3. Obliczyć wartości powyŝszych wskaźników dla n = 0. 4. Porównać obliczone wartości z wynikami symulacji 2 liczby porównań w której dla n = 0 niezaleŝnie od posortowania danych otrzymano taką samą liczbę porównań, równą 45. Natomiast dla danych losowych otrzymano: 23, 30, 23, 22, 2, 2, 28, 2, 27, 24. 5. Dla otrzymanych wyników symulacji ocenić korelację pomiędzy liczbą porównań L i liczbą sortowanych, przypadkowo ustawionych danych - N: L 24 29 4 46 62 67 85 00 20 36 N 0 2 4 6 8 20 22 24 26 28 Zadanie 3 Otrzymano wyniki dot. liczby iteracji w procesie obliczeniowym realizowanym według dwóch algorytmów. Zweryfikować hipotezę o takiej samej wydajności obliczeniowej tych algorytmów. Zadanie 4 Otrzymano wyniki dot. czasu trwania obliczeń tym samym programem na dwóch typach komputerów. Zweryfikować hipotezę o takiej samej wydajności czasowej tych komputerów. Zadanie 5 Otrzymano wyniki dot. czasu trwania obliczeń na tym samym komputerze dwoma programami napisanymi według tego samego algorytmu. Zweryfikować hipotezę o takiej samej wydajności obliczeniowej tych programów. Zadanie 6 Otrzymano wyniki dot. czasu trwania obliczeń na tym samym komputerze dwoma programami napisanymi według dwóch róŝnych algorytmów. Zweryfikować hipotezę o takiej samej wydajności obliczeniowej par (algorytm, program). 2 http://www.home.umk.pl/~abak/wdimat/s/quicksort.html 6 Data ostatniej aktualizacji: piątek, 29 października 200
2. OBLICZANIE NIEZAWODNOŚCI PROSTYCH UKŁADÓW SPRZĘTOWYCH I SYSTEMÓW PROGRAMOWYCH 3 2.. Uwagi wstępne Jako wprowadzenie do tematu na poniŝszym rysunku przedstawiono informacje dotyczące uruchomienia i wykonywania programu. Nr kroku. Realizowane operacje Załadowanie programu z pamięci zewnętrznej do pamięci systemowej komputera Ilustracja graficzna 2. Pobranie danych dla programu z pamięci zewnętrznej lub z urządzeń wejściowych Wykonanie algorytmu dla pobranych danych 3. 4. Podanie wyniku działania programu na ekranie lub zapisanie do pliku Rysunek 5. Uruchomianie i wykonywanie programu 3 M.Rawski Wstęp do Informatyki, http://rawski.zpt.tele.pw.edu.pl/pl/system/files/wyklad%203.pdf http://pl.wikipedia.org/wiki/niezawodno%c5%9b%c4%87 http://www.zgapa.pl/zgapedia/niezawodno%c5%9b%c4%87.html http://www.szbi.pl/bezpieczestwo-informacji/business-continuity-management-grzegorz-90/niezawodnosc http://www.blades.pl/o-blades/niezawodnosc Data ostatniej aktualizacji: piątek, 29 października 200 7
Układ sprzętowo-programowy to najczęściej spotykane rozwiązanie w przetwarzaniu danych. Część funkcji realizowane jest przez oprogramowanie, a część przez sprzęt. KaŜdy komputer jest układem sprzętowo-programowym. Termin środowisko sprzętowo-programowe oznacza przykładowo serwery oraz bazę danych i system informatyczny. 2.2. Pojęcie niezawodności 4 KaŜdy system, w tym takŝe komputer, jest budowany z myślę o spełnieniu określonej funkcji. Jako miarę zdolności systemu do spełnienia zadanej funkcji wprowadza się pojęcie wydajności. JednakŜe z tym pojęciem nie wiąŝe się Ŝadne stwierdzenie dotyczące przedziału czasowego, w którym system działa poprawnie. To czasowe zmniejszenie wydajności zaleŝy od niezawodności oraz moŝliwości konserwacji. Formalnie niezawodność moŝna zdefiniować w sposób następujący: Niezawodność (ang. reliability) systemu jest to prawdopodobieństwo zdarzenia polegającego na tym, Ŝe w z góry zadanym przedziale czasowym, przy określonych warunkach, system wykona zadania, do których został przeznaczony. Pojecie niezawodności moŝna interpretować jako prawdopodobieństwo przeŝycia systemu. Ilościowo moŝna opisać niezawodność za pomocą funkcji niezawodności R(t) określającej prawdopodobieństwo działania systemu w przedziale czasowym (0, t). Rysunek 6. Przykładowa funkcja niezawodności Funkcja ta ma następujące własności: t = 0 R(t) = 0 t Na początku przedziału czasowego system działa poprawnie, gdy czas rośnie nieskończenie, system na pewno przestanie działać. W przedziale czasowym (0, od) funkcja niezawodności jest monotonicznie malejąca. Za zawodność systemu Q(t) moŝna przyjąć prawdopodobieństwo niesprawności systemu. Tak więc Kolejne pojęcie to efektywność. Q(t)+R(t) = 4 W dalszych punktach niniejszego rozdziału 2.2. 2.4. zamieszczono przede wszystkim fragmenty ksiąŝki: Herman Kopetz, Niezawodność oprogramowania, WNT, Warszawa 980. 8 Data ostatniej aktualizacji: piątek, 29 października 200
System jest efektywny, jeśli zadowalająco wykonuje powierzone zadania w dłuŝszym okresie czasu. Analizując dokładniej efektywność z punktu widzenia czasu, dochodzimy do wniosku, Ŝe pojęcie to ma tak wielkie znaczenie, jak pojęcia niezawodności i moŝliwości konserwacji. Efektywność systemu Wydajność systemu MoŜliwość konserwacji systemu Niezawodność systemu Personel konserwujący Łatwość konserwacji systemu Dostępność części zamiennych Budowa systemu Dokumentacja systemu Rysunek 7. Związki miedzy wydajnością, moŝliwością konserwacji oraz niezawodnością systemu MoŜliwość konserwacji systemu jest to prawdopodobieństwo tego, Ŝe w określonym przedziale czasowym po wystąpieniu uszkodzenia (błędu) moŝna doprowadzić system do pełnych moŝliwości funkcjonalnych. Średni czas potrzebny do usunięcia błędu lub usterki nazywa się średnim czasem naprawy t n (ang. mean time to repair - MTTR). Ten interwał czasowy rozpoczyna się w chwili powstania niesprawności i kończy z ponownym przywróceniem działania systemu. MoŜliwość konserwacji jest zaleŝna od pewnej liczby czynników: moŝliwości dysponowania personelem konserwującym, umiejętności tego personelu, dostępności części zamiennych oraz łatwości konserwacji systemu. Łatwość konserwacji jest prawdopodobieństwem, Ŝe błędnie działający system moŝe być zreperowany w określonym przedziale czasowym przez przeciętny personel konserwujący, przy załoŝeniu dostępności wszystkich potrzebnych części zamiennych. PoniewaŜ moŝliwość konserwacji w kaŝdym konkretnym przypadku zaleŝy od organizacji prac konserwacyjnych, łatwość konserwacji stanowi charakterystykę systemu, zaleŝną od jego budowy, dokumentacji itd. Dla praktycznych zastosowań duŝe znaczenie ma średni czas między uszkodzeniami t mu (ang. mean time between failures - MTBF). Pojęcie to moŝna wprowadzić, gdy zachowanie się błędów systemu nie zmienia się przez dłuŝszy czas w porównaniu ze średnim czasem między uszkodzeniami. Mówi się wówczas o stałej intensywności pojawiania się błędów albo, inaczej, o stałym prawdopodobieństwie niesprawności na jednostkę czasu. Zakłada się przy tym, Ŝe system działa poprawnie na początku rozwaŝanego przedziału czasowego. Średni czas między uszkodzeniami t mu jest sumą średniego czasu do kolejnego uszkodzenia t ku (ang. mean time to fail - MTTF) oraz średniego czasu naprawy t n t mu = t ku + t n Data ostatniej aktualizacji: piątek, 29 października 200 9
PoniewaŜ średni czas t n w porównaniu z czasem t ku jest bardzo mały, w praktyce często nie odróŝnia się czasu t mu od t ku. Przez współczynnik gotowości systemu K rozumie się udział czasu, w którym system moŝna uŝytkować t K ku = t t ku + u DuŜy współczynnik gotowości moŝna uzyskać albo dzięki bardzo małemu czasowi t n przy niewielkim czasie t ku albo dzięki trochę większemu t n przy duŝym t ku Rysunek 8. Związki pomiędzy średnim czasem naprawy t n, średnim czasem do kolejnego uszkodzenia t ku oraz współczynnikiem gotowości systemu Sam współczynnik gotowości nie jest wystarczający do scharakteryzowania efektywności systemu, poniewaŝ znaczenie decydujące moŝe mieć liczba uszkodzeń. Redundancja Gdy w systemie uŝywa się więcej środków, niŝ to jest konieczne do wykonania jego zadań, wówczas mówi się, Ŝe system jest redundancyjny. System taki korzysta więc ze środków niezbędnych oraz z dodatkowych. Pojęcie środki" jest utaj oczywiście rozumiane w najszerszym znaczeniu tego słowa. W systemach komputerowych dotyczy to sprzętu, oprogramowania i czasu. Z punktu widzenia niezawodności bardzo duŝe znaczenie ma pojęcie redundancji. Za miarę redundancji przyjmiemy następujący stosunek środki dodatkowe r = środki niezbędne + środki dodatkowe Redundancja jest niezbędna, aby moŝna było wykryć uszkodzenie oraz je usunąć. Dopiero przy uwzględnieniu redundancji moŝna podczas projektowania wybrać jedną z dwóch całkowicie róŝnych metod zapewniających duŝą niezawodność. Tę duŝą niezawodność moŝna osiągnąć albo bez redundancji, przy uŝyciu bardzo dobrych jakościowo elementów, albo z redundancją, z zastosowaniem większej liczby elementów średniej klasy. Redundancja aktywna występuje wówczas, gdy wszystkie elementy redundacyjne systemu przez cały czas jego działania współdziałają w wykonaniu jego zadań. Gdy natomiast z elementów redundancyjnych systemu korzysta się dopiero w przypadku niesprawności jakiegoś elementu aktywnego, wówczas mówimy o redundancji pasywnej. 20 Data ostatniej aktualizacji: piątek, 29 października 200