Algorytmy i ich poprawność

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy i ich poprawność"

Transkrypt

1 Algorytmy i ich poprawność Poprawność programó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

2 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. Błędy językowe 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.

3 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. Błędy semantyczne 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.

4 Błędy logiczne np. w algorytmie zliczania zdań, w których występuje słowo algorytm nie zauważyliśmy, że znak. może występować także wewnątrz zdania ( Na rys. 2 pokazano schemat... ), a używaliśmy jej do wyszukiwania końca zdania. Błędy logiczne 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.

5 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 przeniesienia sterowania w niewłaściwe miejsce procesu w wyniku zastosowania wyboru warunkowego (lub instrukcji skoku). Błędy algorytmiczne 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.

6 Przykład błędu algorytmicznego Pętla nieskończona: 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) Za pomocą debaggingu nie można udowodnić, że nie ma błędów można jedynie je wykrywać Obydwie metody nie dają gwarancji wykrycia i usunięcia wszystkich błędów.

7 Weryfikacja poprawności programu Intuicyjnie poprawność = zgodność z zamierzeniami Specyfikacja wyraża, co program ma robić, i określa związek miedzy jego danymi wejściowymi i wyjściowymi. Weryfikacja opiera się o sprawdzenie specyfikacji Weryfikacja poprawności programu <wp, wk> Warunek wstępny Warunek końcowy

8 Warunek wstępny i końcowy Warunek wstępny - warunek dotyczący danych wejściowych, który musi być spełniony na początku programu. jeżeli dane nie spełniają tego warunku, to nie ma gwarancji że program będzie działał poprawnie ani nawet że się zatrzyma. Warunek końcowy - co oblicza program przy założeniu że się zatrzyma. warunek końcowy jest zawsze prawdziwy jeżeli zachodzi warunek wstępny. Weryfikacja poprawności programu 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.

9 Weryfikacja poprawności programu Problem: instrukcja przypisania x = v, x-zmienna, v-wyrażenie 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 Weryfikacja poprawności programu Istnieją cztery sposoby łączenia prostych kroków w celu otrzymania kroków bardziej złożonych. 1. bloki instrukcji wykonywane sekwencyjnie 2. instrukcje wyboru 3. instrukcje 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

10 Weryfikacja poprawności programu 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. 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)

11 Niezmienniki pętli przykład W praktyce niezmiennik pętli traktowany jest jako założenie indukcyjne, na podstawie którego wykazuje się prawdziwość kroku indukcyjnego. int a=5, b=0; for (int i=0; i<9; i++) } { b++; Zdanie a jest równe 5 jest trywialnym niezmiennikiem pętli. Niezmienniki pętli przykład int NWD(int a, int b) { int c; while (b!=0) { c = a%b; a = b; b = c; } return a; } Niezmiennikiem pętli, pozwalającym dowieść poprawność algorytmu NWD jest zdanie: NWD(a,b)=NWD(b,a mod b).

12 Dowodzenie niezmienników pętli 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. Dowodzenie niezmienników 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

13 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. 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. Poprawność programów 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

14 Niepoprawność algorytmu Wykonanie algorytmu rozwiązania zadania dla pewnego zestawu danych zakończy się prawidłowo, ale wyniki są niepoprawne np. źle sformułowany warunek, powinna być silna nierówność, a jest słaba Działanie algorytmu dla pewnego zestawu danych zostanie przerwane; np. dzielenie przez zero, obliczenie pierwiastka kwadratowego z liczby ujemnej Algorytm dla pewnego zestawu danych działa w nieskończoność (pętle nieskończone); np. przy przeglądaniu listy wskaźnikowej, wskaźnik nie jest przesuwany do następnego elementu listy Weryfikacja poprawności algorytmu Dowód poprawności algorytmu zawsze składa się z dwóch części: dowód, że jeśli algorytm się zakończy, to da poprawny wynik, dowód, że przy poprawnych danych wejściowych algorytm zawsze się zakończy.

15 Algorytmy poprawne częściowo i całkowicie Poprawność częściowa algorytmu Algorytm Alg działający w strukturze danych S jest częściowo poprawny ze względu na specyfikację <wp, wk>, wtedy i tylko wtedy, gdy dla wszystkich danych spełniających warunek początkowy wp, jeżeli algorytm zatrzyma się, to uzyskane wyniki spełniają warunek końcowy wk.

16 Poprawność całkowita algorytmu Powiemy, że algorytm Alg działający w strukturze danych S jest całkowicie poprawny ze względu na specyfikację <wp,wk>, wtedy i tylko wtedy, gdy dla wszystkich danych w strukturze S spełniających warunek początkowy wp, algorytm zatrzymuje się i daje wyniki spełniające warunek końcowy wk. Niezmienniki pętli Niezmiennikiem pętli nazywać będziemy własność (formułę), która jeśli jest prawdziwa na początku wykonania pętli, to jest również prawdziwa po wykonaniu treści pętli.

17 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ści jednej asercji wynika prawdziwość następnej, że niezmiennik pozostaje prawdziwy w kolejnych iteracjach i pociąga za sobą prawdziwość ostatniej asercji. Metoda niezmienników i zbieżników 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 poskończonej liczbie iteracji algorytm się zatrzyma w ostatnim punkcie kontrolnym.

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

19 Przykład zastosowania metody Aby wykazać częściową poprawność algorytmu należy udowodnić: Jeśli asercja 1 jest prawdziwa, to 2 też jest prawdziwa (przed rozpoczęciem iteracji) 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) Jeśli w ostatnim kroku iteracji asercja 2 jest prawdziwa, to 3 jest też prawdziwa Przykład zastosowania metody 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 Ad 3.: zachodzi równość odwrócone(odwrócone(y) & ) = Y

20 Przykład zastosowania metody 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! Co z rekurencją? Metoda niezmienników i zbieżników może być zastosowana także dla dowodzenia poprawności algorytmów rekurencyjnych Łatwiej jest skorzystać z tej metody po usunięciu rekurencji i zastąpieniu jej iteracją.

21 Przykład wieże Hanoi Danych jest n krążków, umieszczonych w porządku rosnących średnic, na drążku A. Zadanie polega na przeniesieniu wszystkich krążków na drążek B z wykorzystaniem pomocniczego drążka C (oba drążki B i C są początkowo puste), ale mniejszy krążek musi zawsze leżeć na większym. Przykład wieże Hanoi A B C

22 Wieże Hanoi rekurencyjnie 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 iteracyjnie 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.

23 Złożoność obliczeniowa Algorytm - definicja raz jeszcze Algorytm jest dokładnie określonym układem skończonej liczby elementarnych instrukcji wraz z porządkiem ich wykonywania. Każda instrukcja ma precyzyjnie określoną interpretację za pomocą podstawowych operacji arytmetycznych i logicznych, a jej wykonanie jest skończone i ma jednoznacznie określony efekt końcowy. Jako elementy komunikacji ze światem w algorytmie można wyróżnić: dane, na których są wykonywane obliczenia i wyniki, które są oczekiwanym rezultatem działań

24 Cechy dobrego algorytmu Każdy dobry algorytm powinien posiadać cechy: następujące mieć określone operacje podstawowe, każdy krok jednoznacznie i precyzyjnie zdefiniowany, każdy możliwy przypadek przewidziany, może korzystać z danych wejściowych, prowadzi do jednej lub więcej danych wyjściowych, wykorzystuje możliwie jak najmniej pamięci, wykonuje się w możliwie jak najkrótszym czasie. Złożoność obliczeniowa Ten sam problem można rozwiązać różnymi metodami. Problemy mogą więc posiadać kilka alternatywnych algorytmów rozwiązujących je. Przy porównywaniu algorytmów zwykle bierze się pod uwagę ich efektywność (szybkość działania) i zapotrzebowanie na zasoby pamięciowe systemu W celu porównywania algorytmów pod względem ich prędkości działania, wprowadzono pojęcie złożoności obliczeniowej.

25 Złożoność obliczeniowa Złożoność obliczeniowa (ang. computational complexity) miara służąca do określania ilości zasobów komputerowych potrzebnych do rozwiązania problemów obliczeniowych. Złożoność obliczeniowa algorytmu charakteryzuje jak szybko rośnie liczba operacji (elementarnych kroków algorytmu) niezbędnych do znalezienia rozwiązania, gdy wzrasta ilość przetwarzanych danych. Złożoność obliczeniowa - cele Cele, dla których wyznaczamy złożoność obliczeniową algorytmów są następujące: można wybrać z grupy algorytmów rozwiązujących ten sam problem, algorytm o najlepszej (najmniejszej) złożoności. można zbadać jak zmieni się złożoność, gdy zwiększymy rozmiar danych wejściowych (wpływ wzrost rozmiaru danych wejściowych na czas wykonywania się algorytmu).

26 Koszt algorytmu Mamy dwa kryteria (miary kosztu) efektywności: liczba zmiennych ilość miejsca potrzebna dla danych liczba instrukcji liczba operacji arytmetycznych liczba wywołań procedury Złożoność obliczeniowa - rodzaje Złożoność pamięciowa Wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie Złożoność czasowa Wynika z liczby operacji elementarnych wykonywanych w trakcie przebiegu algorytmu

27 Pamięciowa złożoność obliczeniowa Pamięciowa złożoność obliczeniowa informuje nas o ilości pamięci komputera wyrażanej w liczbie bajtów lub liczbie zmiennych typów elementarnych wymaganej przez dany algorytm dla n przetwarzanych danych. Liczba bajtów zależy od liczby zmiennych typów elementarnych użytego języka programowania i reprezentacji zmiennych w pamięci maszyny. Czasowa złożoność obliczeniowa Czasowa złożoność obliczeniowa - zależność pomiędzy liczbą operacji elementarnych wykonywanych w trakcie przebiegu algorytmu a rozmiarem danych wejściowych (podawana jako funkcja rozmiaru tych danych)

28 Czasowa złożoność obliczeniowa wielkość złożoności czasowej musi być niezależna od typu maszyny, na której uruchamiamy program za jednostkę czasowej złożoności obliczeniowej przyjęto wykonanie tzw. operacji dominującej (podstawowej), czyli takiej, wokół której koncentruje się przetwarzanie danych w algorytmie. Ilość wykonań operacji dominujących jest proporcjonalna do czasu wykonania algorytmu. Czasowa złożoność obliczeniowa Złożoność czasowa podawana jest jako funkcja rozmiaru danych, której wartości podają liczbę operacji, np. W algorytmie sortowania bąbelkowego dla listy o długości N: F(N) = liczba porównań par sąsiednich elementów W algorytmie rozwiązania wież Hanoi dla N krążków: F(N) = liczba przeniesień pojedynczego krążka z kołka na kołek

29 Złożoność obliczeniowa przykład Szukamy elementu x na liście o długości N. Dane wejściowe to lista i element do wyszukania. Algorytm 1 1. weź pierwszy element listy ; 2. wykonuj: 2.1. sprawdź czy bieżący element jest tym szukanym ; 2.2. sprawdź czy osiągnąłeś koniec listy ; 2.3. weź następny element z listy aż znajdziesz lub przejrzysz całą listę Jeśli operacją elementarną jest sprawdź, to F(N)=2N Złożoność obliczeniowa przykład Szukamy elementu x na liście o długości N. Dane wejściowe to lista i element do wyszukania. Algorytm 2 1. dopisz szukany element na końcu listy ; 2. weź pierwszy element listy ; 3. wykonuj: 3.1. sprawdź czy bieżący element jest tym szukanym ; 3.2. weź następny element z listy aż znajdziesz ; 4. sprawdź czy jesteś na końcu listy Jeśli operacją elementarną jest sprawdź, to F(N)=N+1

30 Co to znaczy w praktyce? jest mitem stwierdzenie, że komputery są tak szybkie, że czas nie stanowi problemu (rozkład na czynniki pierwsze dużych liczb cyfr wymaga milionów lat) potrzebne jest rozwiązywanie coraz większych problemów: komputerowe systemy wspomagania decyzji komputerowe symulacje i prognozy muszą funkcjonować systemy komputerowe czasu rzeczywistego automatyczne sterowanie w złożonych układach Złożoność czasowa decyduje o tym czy dany algorytm jest przydatny. Złożoność pesymistyczna i oczekiwana Rozróżniamy dwa rodzaje czasowej i pamięciowej złożoności obliczeniowej: Pesymistyczna złożoność obliczeniowa W(n) Oczekiwana złożoność obliczeniowa A(n)

31 Złożoność pesymistyczna i oczekiwana Pesymistyczna złożoność obliczeniowa W(n) dotyczy najgorszego przypadku zestawu danych, zatem określa ona największą ilość operacji dominujących (lub komórek pamięci), która może być wymagana dla najgorszego przypadku n danych wejściowych. Oczekiwana złożoność obliczeniowa A(n) dotyczy typowego zestawu danych i określa statystycznie średnią ilość operacji dominujących (komórek pamięci), które należy wykonać dla typowego zestawu danych, aby rozwiązać problem. Złożoność pesymistyczna i oczekiwana Koszt algorytmu Alg dla danych d: t(alg,d) Niech D n będzie zbiorem danych rozmiaru n dla pewnego problemu P oraz Alg algorytmem rozwiązującym problem P. Pesymistyczna złożoność obliczeniowa: W(Alg,n) = sup {t(alg,d) : d D n } Oczekiwana złożoność obliczeniowa: A(Alg,n) = Σ{ p(d) * t(alg,d) : d D n }, gdzie p(d) prawdopodobieństwo wystąpienia danych d.

32 Przykład obliczenia złożoności pesymistycznej i oczekiwanej Rozważmy wyszukiwanie elementu w n elementowym, nieuporządkowanym zbiorze danych. Operacja dominująca sprawdzanie, czy i-ty element zbioru jest elementem poszukiwanym, i = 1,2,3,...,n. Przykład - złożoność pesymistyczna W przypadku najgorszym poszukiwany element jest ostatnim, zatem znaleziony będzie po sprawdzeniu wszystkich elementów tego zbioru. Również stwierdzenie, iż elementu w zbiorze nie ma, wymaga przeglądnięcia wszystkich elementów. Stąd: W(n) = n Za końcową złożoność obliczeniową danego algorytmu przyjmuje się najczęściej jego złożoność pesymistyczną.

33 Przykład - złożoność oczekiwana Jeśli prawdopodobieństwo wystąpienia poszukiwanego elementu na każdej pozycji w zbiorze jest takie samo, to dla każdego elementu wynosi ono: 1 pi =, dla i = 1, 2,..., n n Oczekiwana złożoność obliczeniowa jest równa wartości oczekiwanej zmiennej losowej rozkładu prawdopodobieństwa p i, zatem: n n 1 1 nn ( + 1) n+ 1 A( n) = ipi = i = = n n 2 2 i= 1 i= 1 Porównywanie czasów działania algorytmów Chcemy porównać dwa algorytmy wykonujące to samo zadanie za pomocą jednej pętli ograniczonej, w której liczba iteracji N jest proporcjonalna do rozmiaru danych wejściowych. Złożoności czasowe tych algorytmów wynoszą: F 1 (N) = K 1 + L 1 * N F 2 (N) = K 2 + L 2 * N

34 Porównywanie czasów działania algorytmów Do porównania algorytmów można wykorzystać iloraz: sn ( ) = F1 ( N) F ( N) 2 s(n) = 1 oznacza jednakową szybkość działania s(n) < 1 oznacza, że algorytm pierwszy jest szybszy Porównywanie czasów działania algorytmów Kiedy zachodzi s(n)=1? s(n) = 1 wtedy i tylko wtedy, gdy K 1 = K 2 i L 1 = L 2 Wniosek: w takim przypadku oba algorytmy są identyczne. Który algorytm jest lepszy gdy zachodzą następujące nierówności? : 1 dla N N0 sn ( ) = < 1 dla N > N0

35 Porównywanie czasów działania algorytmów Przyjmuje się, że w celu porównania algorytmów bada się wartość ilorazu s(n) dla bardzo dużych wartości N, czyli dla N Porównywanie czasów działania algorytmów O wyniku porównania czasów działania dwóch algorytmów decyduje wartość: L lim sn ( ) = N L Jest to tzw. analiza asymptotyczna 1 2

36 Porównywanie czasów działania algorytmów Asymptotyczna złożoność algorytmu określenie rzędu wielkości czasu działania algorytmu, tzn. określenie szybkości wzrostu czasu działania algorytmu, gdy rozmiar danych dąży do nieskończoności. Rząd wielkości funkcji : opisuje czas działania algorytmu charakteryzuje efektywność algorytmu za jego pomocą można porównać różne algorytmy Porównywanie czasów działania algorytmów Dwa algorytmy o czasach wykonania F 1 (N) i F 2 (N) mają złożoność tego samego rzędu, jeśli: F1 ( N) lim = C, gdzie 0 < C < N F ( N) 2 Algorytm o czasie wykonania F 1 (N) ma nie wyższy rząd złożoności od algorytmu o czasie wykonania F 2 (N), jeśli: F1 ( N) lim = C < N F ( N ) 2

37 Porównanie rzędów złożoności Dopiero zmniejszenie rzędu złożoności obliczeniowej algorytmu jest istotnym ulepszeniem rozwiązania problemu algorytmicznego! Dlaczego analiza asymptotyczna? Złożoność asymptotyczna = przybliżona miara efektywności Z reguły dane nie są uporządkowane i ocena złożoności algorytmu jest rzeczą niełatwą ale bardzo istotna. Często wystarczają przybliżone, asymptotyczne oszacowania ciągów lub ogólniej funkcji. Opisują one zachowanie funkcji wraz ze wzrostem argumentu. Podczas przekształceń rachunkowych celowo ograniczana jest wiedza o funkcji, dzięki czemu łatwiej jest rachować i otrzymać zadowalającą postać przybliżającą.

38 Złożoność asymptotyczna W oszacowaniach asymptotycznych posługujemy się ogólnie przyjętymi symbolami opisującymi asymptotyczne zachowanie jednej funkcji wobec drugiej. Staramy się wyznaczy złożoność w przypadku optymistycznym, przypadku pesymistycznym oraz przypadku średnim. Często posługujemy się przybliżeniami opartymi o notacje: Notacja O Notacja Ω (Omega) Notacja Θ (Teta) Notacja O * Niech R = R + {0}, oraz niech będą dane funkcje f oraz g: * * f (), x g(): x R R Definicja: Mówimy, że funkcja f(x) jest rzędu O(g(x), jeśli istnieje taka stała c>0 * oraz x0 R, że dla każdego x x 0 zachodzi: f () x cg() x (f nie rośnie szybciej niż g).

39 Notacja O Notacja O używana jest w analizie górnej granicy asymptotycznej. Służy do szacowania czasu działania algorytmu w przypadku pesymistycznym Po raz pierwszy tego symbolu użył niemiecki teorioliczbowiec Paul Bachmann w Prace Edmunda Landau'a spopularyzowały tę notację, stąd czasami jest nazywany symbolem Landau'a. Notacja O Określenia "złożoność co najwyżej O(g(n))" i "złożoność O(g(n))" są matematycznie równoważne. Stwierdzenie, ze algorytm sortowania ma złożoność O(n 2 ) oznacza, ze jeśli zastosujemy go do 2-krotnie dłuższego ciągu danych, czas jego działania wzrośnie mniej więcej 4-krotnie, gdy zaś sortowany ciąg danych wydłuży się 10-krotnie, na uzyskanie wyniku trzeba poczekać około 100 razy dłużej.

40 Notacja O - przykład Załóżmy, iż oczekiwana złożoność obliczeniowa pewnego algorytmu jest następująca: A(n) = n 2 + 3n. Gdy n, czynnik 3n stanie się coraz mniej znaczący w stosunku do czynnika n 2. Stąd wnioskujemy, iż jest to algorytm o złożoności O(n 2 ). Aby to udowodnić, musimy znaleźć stałą c oraz n o, dla których zachodzi: n 2 + 3n cn 2 dla n n o Wystarczy przyjąć c = 4 i n o = 1: n 2 + 3n 4n 2 dla n 1, co dowodzi, iż podany algorytm ma rzeczywiście rząd złożoności obliczeniowej równy O(n 2 ). Własności notacji 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 Wniosek: dowolny wielomian jest O( ) dla n podniesionego do najwyższej w nim potęgi, czyli f(n) = a k n k + a k-1 n k a 1n +a 0 jest O(n k )

41 Własności notacji 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 njest O(log 2 n) dla dowolnego dodatniego a * Niech R = R + {0}, oraz niech będą dane funkcje f oraz g: * * f (), x g(): x R R Definicja: Mówimy, że funkcja f(x) jest rzędu Ω(g(x)),, jeśli istnieje taka stała * c>0 oraz x0 R, że dla każdego x x 0 zachodzi: gx () cf() x (f nie rośnie wolniej niż g). Notacja Ω

42 * Niech R = R + {0}, oraz niech będą dane funkcje f oraz g: * * f (), x g(): x R R Definicja: Mówimy, że funkcja f(x) jest rzędu Θ (g(x)),, jeśli istnieją takie stałe * c 1,c 2 >0 oraz x0 R, że dla każdego x x 0 zachodzi: cg() x f() x cg() x 1 2 (f rośnie tak samo jak g). Notacja Θ Uwagi Notacja Ω jest asymptotyczną granicę dolną oszacowuje czas działania algorytmu dla najlepszego przypadku Notacja Θ jest asymptotycznie dokładnym oszacowaniem ogranicza funkcję od góry i od dołu. 1. Równoważność f(n) jest Ω(g(n)) wtedy i tylko wtedy, gdy g(n) jest O(f(n)) 2. Można powiedzieć, że f(n) = Θ(g(n)), gdy f(n) jest jednocześnie rzędu Ο(g(n)) i Ω(g(n)).

43 Złożoność czasowa algorytmów Najczęściej algorytmy mają złożoność czasową proporcjonalną do pewnych funkcji: 1 stałe log n n n log n n 2 n 3 logarytmiczne liniowe liniowo-logarytmiczne 2 n wykładnicza wielomianowe (małe wykładniki) wielomianowe (małe wykładniki) n! ponadwykładnicza n n wielomianowa (duże wykładniki) Rodzaje złożoności Złożoność czasowa stała - O(1) Algorytm wykonuje stałą ilość operacji dominujących bez względu na rozmiar danych wejściowych. W takim algorytmie czas wykonania jest stały i nie zmienia się przy zmianie liczby przetwarzanych elementów. Złożoność czasowa liniowa - O(n) Dla każdej danej algorytm wykonuje stałą ilość operacji dominujących. Czas wykonania jest proporcjonalny do liczby n danych wejściowych. Czas wykonania rośnie liniowo ze wzrostem liczby elementów.

44 Rodzaje złożoności Złożoność czasowa kwadratowa - O(n 2 ) Algorytm dla każdej danej wykonuje ilość operacji dominujących proporcjonalną do liczby wszystkich przetwarzanych danych. Czas wykonania jest proporcjonalny do kwadratu liczby danych n. Inne złożoności tego typu O(n 3 ), O(n 4 )... noszą nazwę wielomianowych złożoności obliczeniowych. Złożoność czasowa logarytmiczna - O(log n) W algorytmie zadanie rozmiaru n da się sprowadzić do zadania rozmiaru n/2. Typowym przykładem jest wyszukiwanie binarne w zbiorze uporządkowanym. Sprawdzenie środkowego elementu pozwala określić, w której z dwóch połówek zbioru może znajdować się poszukiwany element. Pojecie logarytmu - przypomnienie log a x = y wtedy i tylko wtedy, gdy a y = x W określeniu rodzajów złożoności obliczeniowej nie podajemy podstawy logarytmu, ponieważ logarytmy o różnych podstawach z tej samej wartości różnią się od siebie jedynie iloczynem przez stałą: Niech log a x = y oraz log b x= cy Wtedy a y = x, oraz b cy = x Stąd a y = b cy (a) y = (b c ) y Zatem a = b c oraz log b x= c log a x Ponieważ podstawy a i b są stałe, to i c musi być stałe. Z kolei z definicji notacji O wynika, iż klasa złożoności dwóch funkcji różniących się jedynie iloczynem przez stałą jest taka sama.

45 Rodzaje złożoności Złożoność czasowa liniowo logarytmiczna - O(n log n) Zadanie rozmiaru n daje się sprowadzić do dwóch podzadań rozmiaru n/2 plus pewna ilość operacji, których liczba jest proporcjonalna do ilości danych n. Tego typu złożoność obliczeniową posiadają dobre algorytmy sortujące. Złożoność czasowa wykładnicza - O(2 n ), O(n!) Złożoność obliczeniową O(2 n ) posiada algorytm, w którym wykonywana jest stała liczba operacji dla każdego podzbioru n danych wejściowych. Złożoność obliczeniową O(n!) posiada algorytm, w którym wykonywana jest stała liczba operacji dla każdej permutacji n danych wejściowych. Algorytm o złożoności O(2 n ) Złożoność obliczeniowa wykładnicza jest bardzo niekorzystna, ponieważ czas wykonania rośnie szybko wraz ze wzrostem liczby danych wejściowych. Algorytm o takiej złożoności obliczeniowej uważa się za wewnętrznie nierealizowalny i należy go unikać.

46 Algorytm o złożoności O(2 n ) Porównanie 1 - komputer wykonujący milion operacji dominujących w ciągu sekundy 2 - superkomputer wykonujący 1000 miliardów operacji dominujących w ciągu sekundy. Rozmiar danych n Czas wykonania dla komputera 1 1,05 sekund 35,7 lat mld lat 5 x mld lat Czas wykonania dla superkomputera sekund 1126 sekund 40,17 mld lat 5 x mld lat Porównanie szybkości wzrostu funkcji f(n) = 2 n f(n) =0.25 n 2 f(n)=n f(n)= log n

47 Porównanie złożoności Rodzaj złożoności czasowej O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) O(2 n ), O(n!) Nazwa rodzaju złożoności obliczeniowej stała logarytmiczna liniowa liniowo-logarytmiczna kwadratowa sześcienna wykładnicza Cechy algorytmu działa prawie natychmiast niesamowicie szybki szybki dosyć szybki wolny dla dużych n wolny dla większych n nierealizowalny dla większych n Przykłady

48 Znajdowanie złożoności asymptotycznej Przykład 1: Prosta pętla for (i=sum=0; i<n; i++) sum+=a[i]; Powyższa pętla powtarza się n razy, podczas każdego jej przebiegu realizuje dwa przypisania: aktualizujące zmienną sum zmianę wartości zmiennej i Mamy zatem 2n przypisań podczas całego wykonania pętli. Asymptotyczna złożoność wynosi O(n) Znajdowanie złożoności asymptotycznej Przykład 2: Pętla zagnieżdżona for (i=0; i<n; i++) { for (j=1, sum=a[0]; j<=i; j++) sum+=a[j]; } zmiennej i nadawana jest wartość początkowa. Pętla zewnętrzna powtarza się n razy, a w każdej jej iteracji wykonuje się wewnętrzna pętla oraz instrukcja przypisania wartości zmiennym i, j, sum. Pętla wewnętrzna wykonuje się i razy dla każdego i {1,...,n-1}, a na każdą iteracje przypadają dwa przypisania: jedno dla sum, jedno dla j. Przypisania wykonywane w całym programie: 1+3n+2( n-1) = 1+3n+n(n-1) = O(n)+O(n 2 ) = O(n 2 ) Asymptotyczna złożoność wynosi O(n 2 ).

49 Znajdowanie złożoności asymptotycznej 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<n-1; i++) { for (i1=i2=k=i; k<n-1 && a[k]<a[k+1]; k++,i2++); if(len < i2-i1+1) len=i2-i1+1; } Jeśli liczby w tablicy są uporządkowane malejąco, to pętla zewnętrzna wykonuje się n-1 razy, a w każdym jej przebiegu pętla wewnętrzna wykona się tylko raz. Złożoność algorytmu jest więc O(n). Znajdowanie złożoności asymptotycznej Przykład 3 Znajdź najdłuższą podtablice zawierającą liczby uporządkowane rosnąco. for (i=0; len=1; i<n-1; i++) { for (i1=i2=k=i; k<n-1 && a[k]<a[k+1]; k++,i2++); if(len < i2-i1+1) len=i2-i1+1; } 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 ).

50 Wyszukiwanie elementu maksymalnego Lista kroków: krok 1: w max d[1]; p max 1 krok 2: Dla i = 2,3,...,n: jeśli w max < d[i], to w max d[i]; p max i krok 3: Zakończ algorytm Jeśli za operacje dominujące przyjmiemy ilość wykonanych porównań elementów zbioru, to złożoność obliczeniowa algorytmu wyszukiwania elementu maksymalnego jest równa T(n) = n 1. Algorytm posiada liniową klasę czasowej złożoności obliczeniowej O(n). Wyszukiwanie najczęstszego elementu Lista kroków: krok 1: w n d[1]; p n 1; l n 1 krok 2: Dla i = 1,2,...,n: wykonuj kroki krok 3: licznik 0 krok 4: Dla j = 1,2,...,n: jeśli d[i] = d[j], to licznik licznik + 1 krok 5: Jeśli licznik > l n, to w n d[i]; p n i; l n licznik krok 6: Zakończ algorytm Wybór n elementów wymaga n operacji. Po każdym wyborze musimy wykonać n porównań wybranego elementu z elementami zbioru w celu zliczenia ilości jego wystąpień. Daje to wynik: T(n) = n 2 Algorytm posiada klasę złożoności obliczeniowej O(n 2 ).

51 Ulepszenia rzędu wielkości Modyfikacja programu przez przeniesienie instrukcji ze środka na zewnątrz pętli. max = maksimum(t); //zwraca największą wartość w tablicy t for(i=0; i<100; i++) t[i] = t[i]* 100/max; po ulepszeniu: max = maksimum(t); //zwraca największą wartość w tablicy t wspol = 100/max; for(i=0; i<100; i++) t[i] = t[i] * wspol; Ulepszenia rzędu wielkości Wyszukanie w liście liniowej L elementu o wartości x. Prosty algorytm zawiera warunek postaci: 1. czy znaleziono w L wartość x i 2. czy został osiągnięty koniec listy L? po ulepszeniu: Na koniec listy dodawany jest element o wartości x. Wyszukiwanie sprowadza się tylko do sprawdzania warunku 1.

52 Ulepszenia rzędu wielkości Wyszukiwanie binarne dla problemu wyszukiwania elementu w posortowanej liście L o długości N. Ulepszenia rzędu wielkości Policzenie porównań Każde porównanie skraca długość listy wejściowej o połowę Proces ten kończy się, gdy lista jest pusta lub znaleziony zostanie poszukiwany element Pesymistyczna liczba porównań ilość możliwych operacji dzielenia wielkości N przez 2, zanim osiągnie 0, czyli log 2 N.

53 Czy można skonstruować jeszcze lepszy algorytm? Każdy poprawny algorytm znajdujący rozwiązanie danego problemu ustanawia dla niego górne ograniczenie złożoności. Możliwości dalszej poprawy rzędu złożoności algorytmu będącego rozwiązaniem problemu wyznacza dolne ograniczenie! Nie przejmuj się efektywnością algorytmu wystarczy poczekać kilka lat Taki pogląd funkcjonuje w środowisku programistów - nie określono przecież granicy rozwoju mocy obliczeniowych komputerów. Mitem jest stwierdzenie, że komputery są tak szybkie, że czas nie stanowi problemu (rozkład na czynniki pierwsze dużych liczb cyfr wymaga milionów lat) Należy zdecydowanie przeciwstawiać się przekonaniu o tym, że ulepszenia sprzętowe uczynią pracę nad efektywnymi algorytmami zbyteczną.

54 Nie przejmuj się efektywnością algorytmu wystarczy poczekać kilka lat 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. Nie przejmuj się efektywnością algorytmu wystarczy poczekać kilka lat 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.

55 Literatura Cormen T.H., Leiserson Ch.E., Rivest R.L., Stein C.: Wprowadzenie do algorytmow. WNT, Warszawa, 2005 Wroblewski P.: Algorytmy, struktury danych i techniki programowania, Wydanie III, Helion, Gliwice, 2003 N. Wirth: Algorytmy + struktury danych = programy. WNT, Warszawa,

Poprawność algorytmów

Poprawność algorytmów 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

Bardziej szczegółowo

Podstawy Informatyki. Sprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 3 2 Złożoność obliczeniowa algorytmów Notacja wielkie 0 Notacja Ω i Θ Algorytm Hornera Przykłady rzędów

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 3a: Złożoność obliczeniowa algorytmów http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Złożoność obliczeniowa i asymptotyczna

Bardziej szczegółowo

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

Złożoność algorytmów. Wstęp do Informatyki Złożoność algorytmów Złożoność pamięciowa - liczba i rozmiar struktur danych wykorzystywanych w algorytmie Złożoność czasowa - liczba operacji elementarnych wykonywanych w trakcie przebiegu algorytmu Złożoność

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

Podstawy Informatyki. Algorytmy i ich poprawność

Podstawy Informatyki. Algorytmy i ich poprawność Podstawy Informatyki Algorytmy i ich poprawność Błędy Błędy: językowe logiczne Błędy językowe Związane ze składnią języka Wykrywane automatycznie przez kompilator lub interpreter Prosty sposób usuwania

Bardziej szczegółowo

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

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność algorytmów Złożoność pamięciowa algorytmu wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie. Złożoność czasowa algorytmu

Bardziej szczegółowo

INFORMATYKA SORTOWANIE DANYCH.

INFORMATYKA SORTOWANIE DANYCH. INFORMATYKA SORTOWANIE DANYCH http://www.infoceram.agh.edu.pl SORTOWANIE Jest to proces ustawiania zbioru obiektów w określonym porządku. Sortowanie stosowane jest w celu ułatwienia późniejszego wyszukania

Bardziej szczegółowo

Liczby pierwsze - wstęp

Liczby pierwsze - wstęp Artykuł pobrano ze strony eioba.pl Liczby pierwsze - wstęp W latach 60 ubiegłego wieku w Afryce znaleziono kości z wyrytymi na nich karbami liczące ponad 5000 lat. Na jednej z nich (kość z Ishango) karby

Bardziej szczegółowo

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

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa). Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z

Bardziej szczegółowo

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

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki. 1. Podaj definicję informatyki. 2. W jaki sposób można definiować informatykę? 3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki. 4. Co to jest algorytm? 5. Podaj neumanowską architekturę

Bardziej szczegółowo

Wykład 2. Poprawność algorytmów

Wykład 2. Poprawność algorytmów Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm

Bardziej szczegółowo

Poprawność semantyczna

Poprawność semantyczna Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

1. Analiza algorytmów przypomnienie

1. Analiza algorytmów przypomnienie 1. Analiza algorytmów przypomnienie T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Wprowadzenie do algorytmów, rozdziały 1-4 Wydawnictwa naukowo-techniczne (2004) Jak mierzyć efektywność algorytmu?

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

Zasady analizy algorytmów

Zasady analizy algorytmów Zasady analizy algorytmów A więc dziś w programie: - Kilka ważnych definicji i opisów formalnych - Złożoność: czasowa i pamięciowa - Kategorie problemów - Jakieś przykłady Problem: Zadanie możliwe do rozwiązania

Bardziej szczegółowo

Algorytmy i struktury danych Matematyka III sem.

Algorytmy i struktury danych Matematyka III sem. Algorytmy i struktury danych Matematyka III sem. 30 godz. wykł. / 15 godz. ćw. / 15 godz. projekt dr inŝ. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info Literatura T.H. Cormen i inni, Wprowadzenie

Bardziej szczegółowo

Efektywność algorytmów

Efektywność algorytmów Efektywność algorytmów Algorytmika Algorytmika to dział informatyki zajmujący się poszukiwaniem, konstruowaniem i badaniem własności algorytmów, w kontekście ich przydatności do rozwiązywania problemów

Bardziej szczegółowo

Złożoność Obliczeniowa Algorytmów

Złożoność Obliczeniowa Algorytmów Algorytmów Pożądane cechy dobrego algorytmu Dobry algorytm mający rozwiązywać jakiś problem powinien mieć 2 naturalne cechy: 1 (poprawność) zwracać prawidłowy wynik (dokładniej: zgodność z warunkiem końcowym

Bardziej szczegółowo

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

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Więcej o sprawności algorytmów Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Załóżmy, że możemy wykonać dane zadanie przy użyciu dwóch algorytmów: jednego o złożoności czasowej

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Algorytm 1. Termin algorytm jest używany w informatyce

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Złożoność obliczeniowa, poprawność programów Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XII Jesień 2013 1 / 20 Złożoność obliczeniowa Problem Ile czasu

Bardziej szczegółowo

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,

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, Oznaczenia: 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, to interesuje nas złożoność obliczeniowa

Bardziej szczegółowo

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

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak Indukcja Materiały pomocnicze do wykładu wykładowca: dr Magdalena Kacprzak Charakteryzacja zbioru liczb naturalnych Arytmetyka liczb naturalnych Jedną z najważniejszych teorii matematycznych jest arytmetyka

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Informatyka 1. Złożoność obliczeniowa

Informatyka 1. Złożoność obliczeniowa Informatyka 1 Wykład XI Złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada 80 20, ocena efektywności

Bardziej szczegółowo

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku Matematyka Dyskretna Andrzej Szepietowski 25 czerwca 2002 roku Rozdział 1 Poprawność programów Jeżeli projektujemy algorytmy lub piszemy programy, to ważne jest pytanie, czy nasz algorytm lub program

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka dyskretna. Andrzej Łachwa, UJ, /14 Matematyka dyskretna Andrzej Łachwa, UJ, 2012 andrzej.lachwa@uj.edu.pl 2/14 Funkcji podłogi z logarytmu można użyć do wyliczenia liczby cyfr liczby naturalnej k (k>0): w układzie dziesiętnym log 10 (k)

Bardziej szczegółowo

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

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

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

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to wprowadzili J. Hartmanis i R. Stearns. Najczęściej przez zasób rozumie się czas oraz pamięć dlatego

Bardziej szczegółowo

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

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

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

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

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego

Bardziej szczegółowo

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania. Złożoność obliczeniowa Podstawy Programowania Wykład X Złożoność obliczeniowa Robert Muszyński Katedra Cybernetyki i Robotyki, PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada

Bardziej szczegółowo

Sortowanie Shella Shell Sort

Sortowanie Shella Shell Sort Sortowanie Shella Shell Sort W latach 50-tych ubiegłego wieku informatyk Donald Shell zauważył, iż algorytm sortowania przez wstawianie pracuje bardzo efektywnie w przypadku gdy zbiór jest w dużym stopniu

Bardziej szczegółowo

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę Zaliczenie Egzamin Ocena lub Zerówka Wykład z Zaliczenie Ocena Ćwiczenie Projekty 3 zadania Na ocenę Sylabus O http://wmii.uwm.edu.pl/~jakula/sylabus_23 17N1-ALISTD_PL.pdf JAK? CO? ILE? Polecane Cormen

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

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

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski Algorytmy i złożoność obliczeniowa Wojciech Horzelski 1 Tematyka wykładu Ø Ø Ø Ø Ø Wprowadzenie Poprawność algorytmów (elementy analizy algorytmów) Wyszukiwanie Sortowanie Elementarne i abstrakcyjne struktury

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 5 Prof. dr hab. inż. Jan Magott DMT rozwiązuje problem decyzyjny π przy kodowaniu e w co najwyżej wielomianowym czasie, jeśli dla wszystkich łańcuchów wejściowych

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n

Bardziej szczegółowo

Wyszukiwanie. Wyszukiwanie binarne

Wyszukiwanie. Wyszukiwanie binarne Wyszukiwanie Wejście: posortowana, n-elementowa tablica liczbowa T oraz liczba p. Wyjście: liczba naturalna, określająca pozycję elementu p w tablicy T, bądź 1, jeŝeli element w tablicy nie występuje.

Bardziej szczegółowo

Jarosław Wróblewski Analiza Matematyczna 1A, zima 2012/13

Jarosław Wróblewski Analiza Matematyczna 1A, zima 2012/13 35. O zdaniu 1 T (n) udowodniono, że prawdziwe jest T (1), oraz że dla dowolnego n 6 zachodzi implikacja T (n) T (n+2). Czy można stąd wnioskować, że a) prawdziwe jest T (10), b) prawdziwe jest T (11),

Bardziej szczegółowo

Wyszukiwanie binarne

Wyszukiwanie binarne Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie

Bardziej szczegółowo

Sortowanie - wybrane algorytmy

Sortowanie - wybrane algorytmy Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe

Bardziej szczegółowo

Technologie informacyjne Wykład VII-IX

Technologie informacyjne Wykład VII-IX Technologie informacyjne -IX A. Matuszak 19 marca 2013 A. Matuszak Technologie informacyjne -IX Rekurencja A. Matuszak (2) Technologie informacyjne -IX Gotowanie jajek na miękko weż czysty garnek włóż

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Organizacja wykładu. Problem Sortowania. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury

Bardziej szczegółowo

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie. Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Podstawowe informacje Prowadzący: Jan Tuziemski Email: jan.tuziemski@pg.edu.pl Konsultacje: pokój 412 GB (do ustalenia 412 GB) Podstawowe informacje literatura K. Goczyła Struktury

Bardziej szczegółowo

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe Algorytmy sortujące sortowanie kubełkowe, sortowanie grzebieniowe Sortowanie kubełkowe (bucket sort) Jest to jeden z najbardziej popularnych algorytmów sortowania. Został wynaleziony w 1956 r. przez E.J.

Bardziej szczegółowo

Podyplomowe Studium Programowania i Systemów Baz Danych

Podyplomowe Studium Programowania i Systemów Baz Danych Podyplomowe Studium Programowania i Systemów Baz Danych Algorytmy, struktury danych i techniki programowania 15 godz. wykładu / 15 godz. laboratorium dr inż. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

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

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy Informatyka wprowadze do algorytmów (II) dr hab. inż. Mikołaj Morzy plan wykładu cechy algorytmów sposoby zapisu algorytmów klasyfikacja algorytmów przykłady algorytmów sumowa przeszukiwa ciągu liczb sortowa

Bardziej szczegółowo

Macierze. Rozdział Działania na macierzach

Macierze. Rozdział Działania na macierzach Rozdział 5 Macierze Funkcję, która każdej parze liczb naturalnych (i, j) (i 1,..., n; j 1,..., m) przyporządkowuje dokładnie jedną liczbę a ij F, gdzie F R lub F C, nazywamy macierzą (rzeczywistą, gdy

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej Krzysztof Gniłka Twierdzenie o rekurencji uniwersalnej Spis treści Wstęp 3 Rozdział 1 Definicje i pomocnicze lematy 4 1 Części całkowite liczb 4 2 Logarytmy 9 3 Notacja asymptotyczna 12 Rozdział 2 Metoda

Bardziej szczegółowo

Przykładowe zadania z teorii liczb

Przykładowe zadania z teorii liczb Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę

Bardziej szczegółowo

S n = a 1 1 qn,gdyq 1

S n = a 1 1 qn,gdyq 1 Spis treści Powtórzenie wiadomości... 9 Zadania i zbiory... 10 Obliczenia... 18 Ciągi... 27 Własności funkcji... 31 Funkcje liniowe i kwadratowe... 39 Wielomiany i wyrażenia wymierne... 45 Funkcje wykładnicze

Bardziej szczegółowo

PROBLEMY NIEROZSTRZYGALNE

PROBLEMY NIEROZSTRZYGALNE PROBLEMY NIEROZSTRZYGALNE Zestaw 1: T Przykład - problem domina T Czy podanym zestawem kafelków można pokryć dowolny płaski obszar zachowując odpowiedniość kolorów na styku kafelków? (dysponujemy nieograniczoną

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 12a: Prawdopodobieństwo i algorytmy probabilistyczne http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Teoria prawdopodobieństwa

Bardziej szczegółowo

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

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny ALGORYMY Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu

Bardziej szczegółowo

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 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 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. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

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

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

Algorytmy w teorii liczb

Algorytmy w teorii liczb Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi,

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Wykład X Złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada 80 20, ocena efektywności

Bardziej szczegółowo

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

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 9 Rekurencja Rekurencja z łacińskiego oznacza to przybiec z powrotem - osiągniesz rzecz wielką, jeśli zawrócisz po to, by osiągnąć rzeczy małe Przykład:

Bardziej szczegółowo

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy ALGORYTMY 1. Podstawowe definicje Algorytm (definicja nieformalna) to sposób postępowania (przepis) umożliwiający rozwiązanie określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności

Bardziej szczegółowo

Podyplomowe Studium Informatyki

Podyplomowe Studium Informatyki Podyplomowe Studium Informatyki Wstęp do informatyki 30 godz. wykładu dr inż. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info Literatura D. Harel, Rzecz o istocie informatyki. Algorytmika, WNT

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat 1: Algorytm podstawowe pojęcia Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytm selekcji Hoare a. Łukasz Miemus Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego

Bardziej szczegółowo

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: Ciągi rekurencyjne Zadanie 1 Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: w dwóch przypadkach: dla i, oraz dla i. Wskazówka Należy poszukiwać rozwiązania w postaci, gdzie

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 1 Metody numeryczne Dział matematyki Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane

Bardziej szczegółowo

Matematyka dyskretna dla informatyków

Matematyka dyskretna dla informatyków Matematyka dyskretna dla informatyków Część I: Elementy kombinatoryki Jerzy Jaworski Zbigniew Palka Jerzy Szymański Uniwersytet im. Adama Mickiewicza Poznań 2007 4 Zależności rekurencyjne Wiele zależności

Bardziej szczegółowo

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania. Złożoność obliczeniowa Podstawy Programowania Wykład X Złożoność obliczeniowa Robert Muszyński Katedra Cybernetyki i Robotyki, PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada

Bardziej szczegółowo

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

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

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

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Technologie cyfrowe Artur Kalinowski Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.pl Semestr letni 2014/2015 Zadanie algorytmiczne: wyszukiwanie dane wejściowe:

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 10a: O złożoności obliczeniowej raz jeszcze. Złożoność zamortyzowana Model danych zewnętrznych i algorytmy obróbki danych 1 Złożoność zamortyzowana W wielu sytuacjach

Bardziej szczegółowo

Wprowadzenie do algorytmiki

Wprowadzenie do algorytmiki Wprowadzenie do algorytmiki Pojecie algorytmu Powszechnie przyjmuje się, że algorytm jest opisem krok po kroku rozwiązania postawionego problemu lub sposób osiągnięcia jakiegoś celu. Wywodzi się z matematyki

Bardziej szczegółowo

Wykład 7. Informatyka Stosowana. 21 listopada Informatyka Stosowana Wykład 7 21 listopada / 27

Wykład 7. Informatyka Stosowana. 21 listopada Informatyka Stosowana Wykład 7 21 listopada / 27 Wykład 7 Informatyka Stosowana 21 listopada 2016 Informatyka Stosowana Wykład 7 21 listopada 2016 1 / 27 Relacje Informatyka Stosowana Wykład 7 21 listopada 2016 2 / 27 Definicja Iloczynem kartezjańskim

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

Jeszcze o algorytmach

Jeszcze o algorytmach Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy

Bardziej szczegółowo

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych, 2. ćwiczenia Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów

Bardziej szczegółowo

Sortowanie przez wstawianie Insertion Sort

Sortowanie przez wstawianie Insertion Sort Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne,

Bardziej szczegółowo

Sortowanie przez wstawianie

Sortowanie przez wstawianie Sortowanie przez wstawianie Wykład 1 26 lutego 2019 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 1 / 25 Outline 1 Literatura 2 Algorytm 3 Problem sortowania Pseudokod 4 Sortowanie przez wstawianie

Bardziej szczegółowo

Podstawy programowania. Podstawy C# Przykłady algorytmów

Podstawy programowania. Podstawy C# Przykłady algorytmów Podstawy programowania Podstawy C# Przykłady algorytmów Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania

Bardziej szczegółowo

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne. Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne. Definicja. Niech a i b będą dodatnimi liczbami rzeczywistymi i niech a. Logarytmem liczby b przy podstawie

Bardziej szczegółowo

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

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne 2 Algorytmy Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej

Bardziej szczegółowo