5. Podstawowe algorytmy i ich cechy.

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

Download "5. Podstawowe algorytmy i ich cechy."

Transkrypt

1 23 5. Podstawowe algorytmy i ich cechy Wyszukiwanie liniowe i binarne Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich, omawianych w trakcie wykładu, struktur danych. Wyszukując możemy mieć różne cele. Możemy szukać: elementów posiadających określone cechy (w szczególności - elementów najmniejszych, lub największych). Możemy też zadowolić się tylko stwierdzeniem, czy element o określonych cechach występuje w strukturze, czy też nie. Przedstawiony na rys. 12 przykładowy algorytm zwraca indeks tego elementu tablicy, którego wartość po raz pierwszy równa się zadanej wartości x. Wyszukiwanie odbywa się w jednowymiarowej tablicy danych typu całkowitego, zadeklarowanej według (1) [str. 18]. W przypadku nie stwierdzenia wystąpień elementów o wartościach równych zadanej wartości x, algorytm zwraca sygnał o nieistnieniu takich elementów. W celu uproszczenia zapisu algorytmów i skupienia się wyłącznie na ich idei, w odniesieniu do algorytmów operujących na tablicach, przyjmiemy, że: - algorytm ma dostęp do istniejącej tablicy, przechowującej dane typu całkowitego, zadeklarowanej według (1) [str. 18], - t jest nazwą tablicy o rozmiarze N, gdzie N>0.

2 24 // tablica przechowuje dane nieuporządkowane wprowadź: x; jest = 0; //zakładamy wstępnie,że wartość x nie występuje i=0; while((jest = = 0) and (i<n)) if( t[i]= =x ) jest =1; else i=i+1; if(jest = = 1) wyprowadź: i; else wyprowadź sygnał Nie ma takiego elementu Rys. 12. Iteracyjny algorytm wyszukiwania elementu o zadanej wartości, zapisany w języku C++ Sygnał, o którym mowa w algorytmie, powinien mieć postać pewnej szczególnej wartości, której wystąpienie w tablicy nie jest możliwe. Algorytm jest przykładem tzw. wyszukiwania liniowego. Jego cechą charakterystyczną jest konieczność przeglądania, w sytuacji nie uporządkowania danych, całej struktury. Jego schemat jest prosty i naturalny: 1. Pobierz pierwszy element rozpatrywanej struktury, 2. Sprawdź, czy analizowany element jest elementem poszukiwanym? Jeśli TAK zakończ działanie algorytmu, Jeśli NIE pobierz kolejny element i rozpocznij realizację punktu 2. od początku. Powyższy schemat sugeruje rekurencyjną wersję algorytmu. W odniesieniu jednak do struktur liniowych o nieskomplikowanej budowie, takich jak: tablice, pliki, czy nawet listy liniowe, stosowanie rekurencji nie jest potrzebne. Wystarczy zwykły proces iteracyjny. Jego złożoność obliczeniowa jest liniowa, co zapisujemy O(N). Oznacza to, że

3 w sytuacji najgorszego przypadku ilość wykonywanych operacji rośnie liniowo (tak jak funkcja liniowa f(n)=n) z rozmiarem tablicy. Złożoność obliczeniowa algorytmu, inaczej zwana kosztem algorytmu jest funkcją podającą jak w sytuacji najgorszego przypadku rośnie czas realizacji algorytmu w miarę zwiększania rozmiarów zadania. Rozmiarem zadania, polegającego na wyszukiwaniu elementu w jednowymiarowej tablicy, będzie N, tj. ilość elementów tej tablicy. W następnym podrozdziale przedstawione zostanie wyszukiwanie binarne, które jest znacznie efektywniejsze. Wymaga jednak uporządkowania danych w strukturze. Następny przykładowy algorytm wyszukuje najmniejszy element tablicy jednowymiarowej. Tego typu operacje są wykonywane równie często, jak, przedstawione wyżej, wyszukiwanie elementu o zadanej wartości Zanim jednak przejdziemy do algorytmu rozwiązującego ten problem zauważmy, że aby mógł być on w ogóle rozwiązywalny, na elementach tablicy musi być określona pewna relacja liniowego porządku, która sprowadza się do możliwości wykonywania operatorów relacyjnych ( ) w zbiorze wartości, znajdujących się w tablicy. Jest to możliwe dla typów uporządkowanych, takich jak: boolean, int, char, string. 25

4 26 t_min=t[0]; i_min=0; for (int i=1; i<n; i++) if( t[i]<t_min) { t_min=t[i]; i_min=i; }; wyprowadź: t_min, i_min Rys. 13. Algorytm wyszukiwania najmniejszego elementu w tablicy jednowymiarowej Analizując powyższy algorytm zauważymy, że jego wynik zależy od tego, czy wartości elementów tablicy mogą się powtarzać, czy też nie (co nie zostało zawarte w asercji początkowej!!!). Jeśli mogą, to i_min jest indeksem ostatniego elementu o wartości najmniejszej w tablicy. Jeśli nie mogą i_min jest indeksem jedynego, najmniejszego elementu Wyszukiwanie połówkowe (binarne) Zaprezentowany w podrozdziale algorytm wyszukiwania w tablicy miał cechy przeszukiwania liniowego. Zauważmy, że dla struktur liniowych uporządkowanych, takich jak: tablice, pliki i listy, średni czas wyszukania elementu można skrócić o połowę. Bezcelowym jest bowiem dalsze przeszukiwanie struktury po stwierdzeniu, że jej elementy mają wartości wyższe (dla struktury uporządkowanej rosnąco), niż wartość elementu wyszukiwanego. Złożoność obliczeniowa takiego algorytmu dalej jednak wynosi O(N), bowiem w sytuacji najgorszego przypadku

5 dalej zależność ilości wykonywanych operacji rośnie liniowo z rozmiarem zadania N. Poznamy teraz algorytm przeszukiwania połówkowego zwany czasem przeszukiwaniem binarnym, który podobnie jak wspomniany wyżej algorytm wykorzystuje uporządko-wanie elementów struktury liniowej, ale w sposób znacznie bardziej efektywny. Na pomyśle tym opiera się idea wielu algorytmów, rozpatrywanych w dalszej części wykładu. // tablica przechowuje dane uporządkowane rosnąco; N>0 wprowadź: x; jest = 0; //zakładamy wstępnie, że wartość x nie występuje if( ( x >= t[0] ) or ( x <= t[n-1] ) ) // x może być w tablicy { left = 0; right=n-1; do { mid=(left+right) / 2; // dzielenie całkowite if(t[mid] = = x) jest=1; else if( x<t[mid] ) right =mid-1; else left =mid+1; while(not jest and (right>=left)); if(jest) wyprowadź: i; else wyprowadź sygnał Nie ma takiego elementu Rys. 14. Iteracyjny algorytm wyszukiwania binarnego w tablicy zawierającej dane uporządkowane rosnąco Idea tego algorytmu sprowadza się do kolejnego dzielenia całej tablicy na pół i dalszego szukania elementu tylko w tej połówce, w której element ten może potencjalnie wystąpić. Zastosowano tu tak zwaną metodę dekompozycji problemu, a mówiąc dokładniej znaną w algorytmie metodę dziel i zwyciężaj. 27

6 28 Mówiąc ogólnie metoda ta polega na dzieleniu rozwiązywanego problemu na pewną ilość podproblemów tego samego typu, rozwiązywaniu każdego z nich osobno, a następnie łączeniu otrzymanych wyników cząstkowych w wynik ostateczny. Taka koncepcja rozwiązywania problemu jest bliska idei rekurencji, ale jej wdrożenie niekoniecznie musi być rekurencyjne. Metoda dziel i zwyciężaj pozwala w wielu przypadkach na zmianę klasy algorytmu z liniowej do logarytmicznej. Tak jest również w tym przypadku - złożoność obliczeniowa algorytmu wyszukiwania połówkowego wynosi O(log 2 N) (patrz Rys. 15). Intuicja podpowiada nam, że korzyści, jakie osiągamy stosując algorytm wyszukiwania połówkowego, zamiast wyszukiwania liniowego, powinny być znaczne. Rzeczywistość przerasta jednak nasze wyobrażenia. Załóżmy przykładowo, że uporządkowana tablica zawiera aż elementów. Średnia ilość porównań kluczy kolejnych elementów tablicy z wartością poszukiwaną x wynosi przy wyszukiwaniu liniowym / 2 = porównań, podczas gdy przy wyszukiwaniu połówkowym - nie więcej niż log , to jest około 13 porównań. Wynik jest oszałamiający. Tak dużą różnice w ilości wykonanych operacji (patrz Rys. 15) uzyskamy jednak wtedy, gdy rozmiary zadania są znaczne. Natomiast dla tablic o małych rozmiarach nie warto używać aż tak złożonego algorytmu, gdyż zysk czasowy będzie niewielki. Na przykład, dla tablicy zawierającej 10 elementów, algorytm wyszukiwania liniowego będzie musiał

7 wykonać średnio 5 porównań, podczas gdy algorytm wyszukiwania połówkowego potrzebuje nie więcej niż 3-4 powtórzenia, znacznie bardziej złożonej, pętli iteracyjnej. liczba operacji O(N 2 ) O(N) 29 O(N*log 2 N) O(log 2 N) N Rys. 15. Porównanie algorytmów różnych klas 5.2. Algorytmy sortowania tablic Sortowanie tablic jest procesem, którego wynikiem końcowym jest ustawienie elementów tablicy w kolejności zgodnej z wybraną relacją liniowego porządku, lub w porządku odwrotnym. Opracowano wiele algorytmów sortowania tablic. Sortowanie jest wdzięcznym zagadnieniem dydaktycznym, pokazującym jak ten sam, niezbyt skomplikowany problem, rozwiązać można na wiele różnych sposobów, opartych na bardzo różnych pomysłach. Algorytmy sortowania oceniać będziemy biorąc pod uwagę niżej wymienione własności (pierwsze trzy z nich mogą charakteryzować dowolne algorytmy, dwie ostatnie dotyczą wyłącznie algorytmów sortowania):

8 Cechy algorytmów sortowania: prostota algorytmu, Ta cecha jest dość istotna. Algorytmy o prostej strukturze, oparte na prostym pomyśle, można łatwo modyfikować i dostosowywać do aktualnych potrzeb zajętość pamięci, Ta cecha jest bardzo istotna. Na ogół bowiem sięgamy do metod tak zwanego sortowania w miejscu, zwanych inaczej metodami in situ (łac.). Ich zapotrzebowanie na dodatkową pamięć ogranicza się na ogół do wielkości zajmowanej przez wartość pojedynczego elementu tablicy. koszt algorytmu Większość algorytmów sortowania charakteryzuje się kosztem O(N 2 ), gdzie N jest ilością elementów tablicy. Algorytmy te wymagają dwóch pętli iteracyjnych, przy czym jedna z nich jest zanurzona w drugiej. wrażliwość na uporządkowanie sortowanej tablicy, Z tego punktu widzenia algorytmy sortowania dzielić będziemy na: - całkowicie niewrażliwe na uporządkowanie, - częściowo wrażliwe na uporządkowanie, - całkowicie wrażliwe na uporządkowanie. W pierwszej grupie znajdą się algorytmy, dla których uporządkowanie tablicy (pierwotne, bądź uporządkowanie powstałe w trakcie sortowania) nie wpływa w sposób zasadniczy na czas realizacji algorytmu. Za algorytmy częściowo wrażliwe na uporządkowanie uznamy te algorytmy sortowania, które w sposób znamienny ograniczają ilość wykonywanych operacji w trakcie procesu

9 sortowania (np. poprzez zawieszenie wykonywania pewnych pętli wewnętrznych). Algorytmy sortowania całkowicie wrażliwe na uporządkowanie potrafią w trakcie realizacji algorytmu, niejako przy okazji, stwierdzić uporządkowanie tablicy (pierwotne, bądź powstałe w dowolnym momencie procesu sortowania), przerywając natychmiast proces sortowania. Niżej przedstawiono ilustracje do czterech, wybranych metod sortowania tablic. Dokładne omówienie przebiegu procesu sortowania w tych przykładach zostanie podane na wykładzie Sortowanie przez proste wstawianie a) indeksy t b) indeksy t i 3 c) x indeksy t i Rys. 16. Algorytm sortowania przez proste wstawianie a) stan wyjściowy, b) stan po zakończeniu pierwszej j 31

10 32 iteracji, c) ilustracja procesu przepisywania elementów Sortowanie przez prostą zamianę (sortowanie bąbelkowe) i i i i Rys. 17. Algorytm sortowania bąbelkowego Algorytm sortowania przez podział (QuickSort). Algorytmy typu dziel i zwyciężaj. Jest to algorytm oparty na zupełnie innym pomyśle, w porównaniu z algorytmami omawianymi powyżej. Zastosowano tu (omawianą już przy okazji wyszukiwania binarnego) metodę dekompozycji problemu w wersji dziel i zwyciężaj Rys. 18. Ilustracja idei algorytmu sortowania szybkiego QuickSort

11 Wersja rekurencyjna tego algorytmu charakteryzuje się (co jest charakterystyczne dla algorytmów rekurencyjnych) niesłychaną prostotą. Nie robi bowiem prawie nic. Na każdym poziomie wywołania rozdziela elementy coraz krótszych tablic na dwie tablice lewą, zawierającą elementy mniejsze od tzw. elementu osiowego, i prawą zawierającą elementy większe od elementu osiowego. Elementem osiowym może być dowolny element tablicy. Tutaj wybrano element pierwszy. Następnym krokiem algorytmu jest rekurencyjne wywołanie samego siebie. Rekurencja zapewnia automatyczne połączenie tablic cząstkowych z odpowiednimi włączeniami elementów osiowych. Jest wiele odmian tego algorytmu. Ich złożoność obliczeniowa wynosi O(N*log 2 N) (patrz Rys. 15) Sortowanie z użyciem dodatkowej tablicy Elementami tablicy są często rekordy, bądź obiekty klas (na rys. 19 w owalu), z których każdy zawiera szereg pól. Jedno z nich jest zwykle wybierane jako klucz sortowania. Zaprezentowana niżej metoda sortowania sprowadza się do wytworzenia dodatkowej tablicy (zwanej tablicą indeksową), której pierwszy wiersz przechowuje, ustawione w porządku rosnącym, klucze z oryginalnej tablicy a drugi - odpowiadające kluczom indeksy. Metoda ta wymaga użycia dodatkowej tablicy, w zamian pozwala zachować sortowaną tablicę w stanie pierwotnym, jak również generować wiele tablic indeksowych wg różnych kluczy. Ocenę złożoności czasowej pozostawmy czytelnikowi. 33

12 34 indeksy klucz klucz indeksy b) Rys. 19 Tablica indeksowa b) powstała z posortowania wejściowej tablicy rekordów a). Owalem zaznaczono pojedynczy rekord. 6. Algorytmy rekurencyjne 6.1. Wprowadzenie Dokładne omówienie procesów związanych z rekurencją, wraz z pokazem, zostanie przedstawione na wykładzie. a) silnia(n) = n * silnia(n-1) dla n > 0 1 dla n = 0 fib(n) = fib(n-1) + fib(n-2) dla n > 1 1 dla n = 0,1 Rys. 20. Funkcje rekurencyjne postacie analityczne

13 35 int silnia( int n ) { // n jest dowolną liczbą naturalną if( n > 0 ) return n*silnia( n-1); else return 1; } Rys.21 Funkcja rekurencyjna silnia( ) zapisana w języku C\C++ silnia(3) = 3 * silnia(2) 2 * silnia(1) 1 * silnia(0) 1 Rys. 22. Przebieg obliczeń wartości funkcji rekurencyjnej silnia(3) fib(n) = fib(n-1) + fib(n-2) dla n > 1 1 dla n = 0,1 n fib(n) Rys. 23. Ciąg liczb Fibonacciego

14 Rys. 24. Drzewo wywołań rekurencyjnych dla wywołania fib(5) Pojęcia, których znajomość jest niezbędna: głębokość rekurencji, liczba wywołań rekurencyjnych, maksymalna zajętość pamięci. Głębokość rekurencji jest zawsze równa maksymalnej wysokości stosu dla zmiennych. W przypadku obu rozważanych funkcji będzie ona wynosić n, jeśli funkcję wywołamy z wartością n. W ogólnym przypadku wcale tak jednak być nie musi.

15 Liczba wywołań rekurencyjnych jest równa liczbie wszystkich wewnętrznych wywołań rekurencyjnych. Dla funkcji rekurencyjnej silnia( ) zmienia się liniowo, jak funkcja n, natomiast dla fib( ) liczba wywołań rekurencyjnych zmienia się wykładniczo ze wzrostem n, tak jak funkcja 2 n, co widać na Rys. 24. Maksymalna zajętość pamięci jest zawsze proporcjonalna do maksymalnej wysokości stosu (patrz Rys. 25). Ocena tych trzech parametrów dla rozważanego algorytmu rekurencyjnego jest ważna, pozwala bowiem wstępnie ocenić jego złożoność, to jest zapotrzebowanie na pamięć i na czas obliczeń Derekursywacja Derekursywacja jest procesem polegającym na przekształceniu algorytmu rekurencyjnego na postać iteracyjną. Często bywa to bardzo trudne, lub wręcz niemożliwe. Tam gdzie jest możliwe należy jednak tego dokonywać, gdyż algorytmy iteracyjne dla dużych rozmiarów zadania, zawsze mają mniejsze zapotrzebowanie na pamięć, i najczęściej są znacznie efektywniejsze czasowo. Natomiast wielką zaletą algorytmów iteracyjnych jest ich prostota. W przypadku struktur dynamicznych (listy, drzewa), które z natury są definiowane w sposób rekurencyjny, stosowanie algorytmów rekurencyjnych jest naturalne i proste, a często jedynie możliwe. 37

16 38 silnia = 1; for( int i=1; i<=n; i++) silnia=silnia*i; Rys. 25. Iteracyjna postać algorytmu obliczania wartości silnia(n) dla n 0 n zmienna tymczasowa i 4 a) silnia 6 b) stos dla zmiennych stos dla zmiennych Rys. 23. Derekursywacja Na rys 23 porównano stosy dla zmiennych dla algorytmu realizującego wywołanie funkcji silnia(3): a) rekurencyjnego, w chwili po ostatnim wywołaniu rekurencyjnym silnia(0), b) iteracyjnego, po zakończeniu procesu iteracji 6.3. Rekurencja ogonowa Z rekurencją ogonową mamy do czynienia, kiedy wywołanie rekurencyjne nie jest ostatnim poleceniem algorytmu rekurencyjnego patrz Rys. 5 (str. 8). Wtedy algorytm wracając na

17 39 dany poziom, wykonuje dalsze czynności kończące algorytm na tym poziomie ( ogonek ). Natomiast, jeśli wywołanie rekurencyjne jest ostatnim wywołaniem, rekurencja symuluje pętlę iteracyjną Rekurencja zagnieżdżona Przykładem funkcji z rekurencją zagnieżdżoną jest podana w 1928 przez W. Ackermanna funkcja m+1 jeśli n = 0 A(n,m) = A(n-1,1) jeśli n>0, m=0 A(n-1, A(n,m-1)) w pozostałych przyp. Zagnieżdżenie rekurencji, dotyczące parametru m, powoduje nieprawdopodobnie gwałtowne zapotrzebowanie na czas obliczeń ze wzrostem m. Obliczono, że A (1,4) co jest liczbą nieporównanie większą od liczby wszystkich atomów we wszechświecie (obecnie szacuje się, że liczba atomów jest rzędu ). Definicję funkcji Ackermana bardzo łatwo jest zapisać w postaci funkcji rekurencyjnej, natomiast zapisanie jej w formie innej, niż rekurencyjna, jest bardzo kłopotliwe. Koniec części 2 3

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

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

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany. Przedstawiamy algorytmy porządkowania dowolnej liczby elementów, którymi mogą być liczby, jak również elementy o bardziej złożonej postaci (takie jak słowa i daty). Porządkowanie, nazywane również często

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

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

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n ) SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

Bardziej szczegółowo

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Sortowanie danych. Jolanta Bachan. Podstawy programowania Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000

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

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

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

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

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

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

Algorytmy sortujące i wyszukujące Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.

Bardziej szczegółowo

Wykład 3. Metoda dziel i zwyciężaj

Wykład 3. Metoda dziel i zwyciężaj Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie

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

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

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

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy

Bardziej szczegółowo

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym

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

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

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch Wykład 8 Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. Smok podsuszony zmok (patrz: Zmok). Zmok zmoczony smok (patrz: Smok). L. Peter Deutsch Stanisław Lem Wizja lokalna J. Cichoń, P. Kobylański

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

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

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

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem

Bardziej szczegółowo

Sortowanie przez scalanie

Sortowanie przez scalanie Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie

Bardziej szczegółowo

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie

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

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

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

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. Wykład 4 Tablice nieporządkowane i uporządkowane

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne

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

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

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

Rekurencja. Przykład. Rozważmy ciąg

Rekurencja. Przykład. Rozważmy ciąg Rekurencja Definicje rekurencyjne Definicja: Mówimy, iż ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów tego ciągu, zwykle jest to pierwszy wyraz tego ciągu

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

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for. Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9

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

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Co to jest algorytm? Zapis algorytmów Algorytmy

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 20.11.2002 Algorytmy i Struktury Danych PIŁA ZŁOŻONE STRUKTURY DANYCH C za s tw or ze nia s tr uk tur y (m s ) TWORZENIE ZŁOŻONYCH STRUKTUR DANYCH: 00 0

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

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

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Rekurencja - pojęcie 2 Rekurencja - pojęcie Rekurencja (rekursja) wywołanie

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

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

Programowanie dynamiczne cz. 2

Programowanie dynamiczne cz. 2 Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz. 2 16 kwietnia 2019 1 / 19 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy

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

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Programowanie rekurencyjne: ZALETY: - prostota - naturalność sformułowania WADY: - trudność w oszacowaniu zasobów (czasu i pamięci) potrzebnych do realizacji Czy jest możliwe wykorzystanie

Bardziej szczegółowo

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4: Iteracja, indukcja i rekurencja http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Słowem wstępu Iteracja, indukcja

Bardziej szczegółowo

Efektywna metoda sortowania sortowanie przez scalanie

Efektywna metoda sortowania sortowanie przez scalanie Efektywna metoda sortowania sortowanie przez scalanie Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Metoda dziel i zwycięŝaj Dzielimy

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

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

Podstawy Informatyki. Metody dostępu do danych Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy 1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com

Bardziej szczegółowo

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3) Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Część I Zadanie 1.1. (0 3) 3 p. za prawidłową odpowiedź w trzech wierszach. 2 p. za prawidłową odpowiedź

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe algorytmy i ich implementacje w C. Wykład 9 Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny

Bardziej szczegółowo

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

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.

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

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

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

Bardziej szczegółowo

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA POZIOM ROZSZERZONY FORMUŁA OD 2015 ( NOWA MATURA ) ZASADY OCENIANIA ROZWIĄZAŃ ZADAŃ ARKUSZ MIN-R1,R2 MAJ 2018 Uwaga: Akceptowane są wszystkie odpowiedzi

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu? Sortowanie bąbelkowe Pierwsze

Bardziej szczegółowo

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco 1. Liczby 3456.0012 i 0.000076235 w zapisie zmiennoprzecinkowym przedstawia się następująco a) 0.34560012 10 4 i 0.76235 10 4 b) 3.4560012 10 3 i 7.6235 10 5 c) 3.4560012 10 3 i 7.6235 10 5 d) po prostu

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

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Wykład 5. Sortowanie w czasie liniowologarytmicznym Wykład 5 Sortowanie w czasie liniowologarytmicznym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n 2 Zestawienie

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI POZIOM ROZSZERZONY ARKUSZ I STYCZEŃ 2014 Instrukcja dla zdającego 1. Sprawdź, czy arkusz egzaminacyjny zawiera 9 stron (zadania 1 3). Ewentualny brak zgłoś przewodniczącemu

Bardziej szczegółowo

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

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.

Bardziej szczegółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

Informatyka klasa III Gimnazjum wymagania na poszczególne oceny

Informatyka klasa III Gimnazjum wymagania na poszczególne oceny Informatyka klasa III Gimnazjum wymagania na poszczególne oceny Algorytmika i programowanie Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie podejścia algorytmicznego

Bardziej szczegółowo

Implementacja algorytmu z powrotami w postaci drzewa

Implementacja algorytmu z powrotami w postaci drzewa 90 Implementacja algorytmu z powrotami w postaci drzewa Drzewo jest właściwą strukturą do przechowania informacji o możliwych drogach poszukiwania rozwiązania za pomocą algorytmu z powrotami. Poniższy

Bardziej szczegółowo

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK 1 2 3 Pamięć zewnętrzna Pamięć zewnętrzna organizacja plikowa. Pamięć operacyjna organizacja blokowa. 4 Bufory bazy danych. STRUKTURA PROSTA

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe 15 stycznia 2019 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 P Jaka wartość zostanie zwrócona

Bardziej szczegółowo

Dynamiczne struktury danych

Dynamiczne struktury danych Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co

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

PODSTAWY INFORMATYKI wykład 5.

PODSTAWY INFORMATYKI wykład 5. PODSTAWY INFORMATYKI wykład 5. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE,

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Z nowym bitem. Informatyka dla gimnazjum. Część II

Z nowym bitem. Informatyka dla gimnazjum. Część II Z nowym bitem. Informatyka dla gimnazjum. Część II Wymagania na poszczególne oceny szkolne Grażyna Koba Spis treści 1. Algorytmika i programowanie... 2 2. Obliczenia w arkuszu kalkulacyjnym... 4 3. Bazy

Bardziej szczegółowo

Sortowanie. LABORKA Piotr Ciskowski

Sortowanie. LABORKA Piotr Ciskowski Sortowanie LABORKA Piotr Ciskowski main Zaimplementuj metody sortowania przedstawione w następnych zadaniach Dla każdej metody osobna funkcja Nagłówek funkcji wg uznania ale wszystkie razem powinny być

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

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy

Bardziej szczegółowo

WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu

WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu 1 Algorytmika i programowanie Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie

Bardziej szczegółowo

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1 Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

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

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Grażyna Koba MIGRA 2019 Spis treści (propozycja na 2*32 = 64 godziny lekcyjne) Moduł A. Wokół komputera i sieci komputerowych

Bardziej szczegółowo

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili rekurencja 1 Rekurencja/rekursja Alternatywny dla pętli sposób powtarzania pewnych czynności; kolejny etap podzadanie poprzedniego Rekursja może być zamieniona na iteracje Cechy rekurencji Rozłożenie problemu

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

Sortowanie. Bartman Jacek Algorytmy i struktury

Sortowanie. Bartman Jacek Algorytmy i struktury Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39

Bardziej szczegółowo