Algorytm Quicksort. Agnieszka Miśkowiec i Tomasz Skucha

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

Download "Algorytm Quicksort. Agnieszka Miśkowiec i Tomasz Skucha"

Transkrypt

1 Algorytm Quicksort Agnieszka Miśkowiec i Tomasz Skucha Akademia Górniczo-Hutnicza Wydział Elektroniki, Automatyki, Informatyki i Elektrotechniki Informatyka II Rok miskow/mownit skucha/mownit Streszczenie W referacie będziemy starali się opisać algorytm sortowania szybkiego: Quicksort, który jest prawdopodobnie najczęściej używanym spośród wszystkich algorytmów sortowania. Algorytm stanowił przedmiot wielu szczegółowych analiz matematycznych i jeśtesmy w stanie przedstawić fakty dotyczące jego działania. Analizy potwierdzily się w wielu testach empirycznych, a algorytm zyskał status preferowanego dla zagadnień z szerokiego spektrum zastosowań praktycznych. Dlatego też w naszym opracowaniu przyjrzymy się dokładniej sposobom jego efektywnego zaimplementowania. Omówimy rownież różne modyfikacje Quicksort a, które zwiększają wydajność omawianego algorytmu. Nie trzymając czytelnika dłużej w napięciu, rozpocznijmy więc naszą podróż w krainę algorytmu wartego większej uwagi, w krainę Quicksorta... 1 Wprowadzenie Podstawowa wersja algorytmu Quicksort została wynaleziona w 1960 roku przez C.A.R.Hoare a. Algorytm jest popularny, bo nietrudno go zaimplementowac, działa sprawnie na danych różnego typu i często zużywa mniej zasobów niż jakikolwiek inny algorytm. Zalety: działa w miejscu, czyli in situ (używa tylko niewielkiego stosu pomocniczego) do posortowania n elementów wymaga średnio czasu proporcjonalnego do n logn

2 ma wyjątkowo skromną pętlę wewnetrzą Wady: jest niestabilny zabiera okolo n 2 operacji w najgorszym przypadku jest wrażliwy (prosty niezauważony bląd w implementacji może powodować niewlaściwe działanie w przypadku niektórych danych) 2 Charakterystyka algorytmu Quicksort 2.1 Zasada działania Algorytm Quicksort jest metodą typu dziel i rządz (ang. divide and conquer). Bowiem jej dzialanie opiera się na dzieleniu tablicy na dwie części, które następnie sortowane są niezależnie. Warto zaznaczyć, iż początkowy porządek elementów w wejściowym zbiorze danych ma wplyw na to, jak będzie przebiegał podział. Należy wiedzieć, że to właśnie proces podziału jest sednem metody. Możemy go opisać nastepująco: dzielimy zbiór danych, wstawiając pewien element rozgraniczający na jego własciwe miejsce, zmieniając porządek danych w tablicy tak, aby elementy mniejsze od niego znalazly się z jego lewej strony, a większe - z prawej. Potem sortujemy rekurencyjnie lewą i prawą częsc tablicy. Ponieważ zawsze w wyniku procedury tworzącej podział przynajmniej jeden element trafia na właściwe miejsce, zatem takie rekurencyjne postępowanie w końcu doprowadzi do posortowania danych. Ogólna strategia podziału: 1. wybieramy element rozgraniczający (wyznaczający podział), ten który trafi na właściwe miejsce 2. przeglądamy tablicę od jej lewego końca, aż znajdziemy element większy niż rozgraniczający 3. przeglądamy tablicę od jej prawego końca, aż znajdziemy element mniejszy niż rozgraniczający 4. oba elementy, które zatrzymują przeglądanie tablicy, są na pewno nie na swoich miejscach w tablicy, więc je zamieniamy ze sobą

3 Postepując w ten sposób upewniamy się, że żaden element po lewej stronie lewego wskaźnika nie jest większy od elementu rozgraniczającego oraz żaden z prawej strony prawego wskaźnika nie jest mniejszy niż element rozgraniczający, tak jak to widzimy na poniższym rysunku: Na powyższym rysunku X oznacza wartość elementu rozgraniczającego, i jest lewym wskaźnikiem, a j-prawym. Najlepiej jest zatrzymać przeglądanie tablicy z lewej strony dla elementów większych lub równych elementowi rozgraniczającemu, a z prawej strony dla elementow mniejszych od niego lub mu równych. Kiedy wskaźniki i oraz j miną się, do zakończenia całego procesu dzielenia tablicy trzeba już tylko zamienić X ze skrajnycm lewym elementem prawego podzbioru (element wskazywany przez lewy wskaźnik). Wewnętrzna pętla sortowania szybkiego zwiększa wskaźnik i porównuje element tablicy z ustaloną wartością. To własnie ta prostota sprawia,że quicksort jest tak szybki: trudno o prostrzą pętlę wewnętrzną algorytmu sortowania. Zilustrujmy to prostym przykładem: W zbiorze wybieramy jeden z elementów na element środkowy Pozostałe elementy umieszczamy odpowiednio po lewej stronie wybranego elementu, jeśli są od niego mniejsze lub równe lub po prawej stronie, jeśli są od niego większe. Otrzymujemy w ten sposób dwa

4 przedzialy A i B Te same operacje wykonujemy w każdym przedziale. Odpowiada to rekurencyjnemu wywołaniu algorytmu dla każdego z nich Po przeniesieniu elementów na odpowiednie strony pozostanie tylko jednen przedzial dwuelementowy B2, który może jeszcze być nieposortowany. Pozostałe przedzialy A1, A2, B1 są jednoelementowe i nie sortujemy ich dalej Wybieramy element środkowy - liczba 8 Podział daje przedzial jednoelementowy zawierający liczbę 9. Zatem algorytm kończymy, zbiór został uporządkowany 3 Implementacje algorytmu Quicksort Poniżej przedstawiono implementację algorytmu sortowania szybkiego w języku Pascal. 3.1 Wersja rekurencyjna PROCEDURE QUICKSORT;

5 procedure sort(l,p: index); var i,j: index; x,w: object; BEGIN i:=l, j:=p; x:= a[(l+p) div 2]; repeat while (a[i].key < x.key) do i:= i+1; while (x.key < a[j].key) do j:= j-1; if i<=j then begin w:=a[i]; a[i]:=a[j]; a[j]:=w; i:= i+1; j:= j-1 end until i>j; if (l<j) then sort(l,j); if (i<p) then sort(i,p) END; begin sort(1,n) end {QUICKSORT}. 3.2 Wersja iteracyjna PROCEDURE _QUICKSORT; const m=12; var j,j,l,p: index; x,w: object; s: 0..m; stack: array[1..m] of record l,p: index end; BEGIN s:=1; stack[1].l:= 1; stack[1].p:= n; repeat {weź rządanie z wierzchołka stosu}

6 l:= stack[s].l; p:= stack[s].p; s:= s-1; repeat {dziel a[l]..a[p]} i:= l; j:= p; x:= a[(l+p) div 2]; repeat while (a[i].key < x.key) do i:= i+1; while (x.key < a[j].key) do j:= j-1; if (i<=j) then begin w:=a[i]; a[i]:=a[j]; a[j]:=w; i:= i+1; j:= j-1; end until (i>j); if (i<p) then begin {żądanie posortowania prawej części} s:= s+1; stack[s].l:= i; stack[s].p:= p; end; p:=j until (l>=p) until (s=0) END {_QUICKSORT} 4 Złożoność algorytmu Quicksort Zarówno czas działania algorytmu sortowania szybkiego jak również zapotrzebowanie na pamięć są uzależnione od postaci tablicy wejściowej. Od tego zależy, czy podziały dokonywane w algorytmie są zrównoważone, czy też nie, a to z kolei zależy od wybranego klucza podziału. W przypadku, gdy podziały są zrównoważone, algorytm

7 jest równie szybki jak np. sortowanie przez scalanie. Gdy natomiast podziały są niezrównoważone, sortowanie może przebiegać asymptotycznie tak wolno, jak sortowanie przez wstawianie. Złożoność algorytmu Quicksort możemy rozpatrywać analizując trzy możliwości: 4.1 Przypadek optymistyczny Z wersją optymistyczną mamy do czynienia, gdy za każdym razem jako klucz podziału wybrana zostaje mediana z sortowanego aktualnie fragmentu tablicy, czyli gdy każdy podział daje równe podzbiory danych. Wówczas liczba porównań niezbędnych do uporządkowania n-elementowgo fragmentu jest rzędu: T (n) = O(n log n) Jest to związane z tym, że równanie rekurencyjne opisujące czas działąnia wygląda natępująco: T (n) = 2T ( n 2 ) + O(n) i na podstawie twierdzenia o rekurencji uniwersalnej otrzymujemy rozwiązanie (1) Jednocześnie złożoność pamięciowa jest w tym przypadku rzędu: M(n) = O(log n) 4.2 Przypadek pesymistyczny Pomimo wielu zalet, wersja podstawowa omawianego algorytmu w pewnych przypadkach okazuje się być nieefektywną. Jednym z nich jest sytuacja, w której dane wejściowe są już posortowane, lub

8 gdy są uporządkowane w odwrotnej kolejności. W przypadku pesymistycznym, objawiającym się każdorazowym wyborem elementu najmniejszego, bądź największego w sortowanym fragmencie tablicy, złożność obliczeniową przyjmuje postać: T (n) = O( n2 2 ) Wynika to stąd, że liczba wymaganych porównań przeprowadzanych dla tablicy o uporządkowanych danych wejściowych wynosi: n + (n 1) + (n 2) = (n + 1)n 2 Natomiast równanie rekurencyjne wygląda następująco: n n T (n) = T (n 1) + O(n) = O(k) = O( k) = O(n 2 ) k=1 k=1 W tym przypadku otrzymujemy liniową złożoność pamięciową: M(n) = O(n) 4.3 Przypadek przeciętny Średni czas działania algorytmu jest bliski najlepszemu przypadkowi. Quicksort W wielu sytuacjach podziały przeciętnie wypadają w połowie. Dla tak równomiernego rozkładu prawdopodobieństwa wyboru elementu, względem którego dokonujemy podziału, algorytm sortowania szybkiego wymaga czasu działania: T (n) = O(2n ln n) Wzór rekurencyjny dla liczby porównań przeprowadzanych w algorytmie sortowania szybkiego dla n losowo ułożonych elementów jest postaci:

9 { n nk=1 (T (k 1) + T (n k)) dla n 2 T (n) = n 0 dla 0 n 1 Ponieważ T(0) + T(1) T(n-1) jest dokłądnie tym samym, co T(n-1) T(1) + T(0) można napisac: T (n) = n n T (n 1) n k=1 Eliminujemy sumę mnożąc obie strony przez n i odejmując powyższy wzór dla n -1: nt (n) (n 1)T (n 1) = n(n + 1) (n 1)n + 2T (n 1) co jest równe: nt (n) = (n + 1)T (n 1) + 2n Następnie dzielimy obie strony przez n(n + 1) i sprowadzamy do postaci rekurencyjnej: T (n) n + 1 = T (n 1) n + 2 n + 1 =... = T (2) 3 + n k=3 2 k + 1 Ten wynik odpowaida sumie, którą można przybliżyć całką: T (n) n n k=1 1 n k dx = 2 ln n x co po przemnożeniu obu stron przez n+1 daje w rezultacie: T (n) 2(n + 1) ln n 2n ln n Biorąc pod uwage fakt, iż 2n ln n w przybliżeniu równe jest 1, 39n log n możemy stwierdzić, że średnia liczba porównań jest około 39 procent większa w stosunku do liczby porównań dla przypadku optymistycznego.

10 5 Usprawnienia algorytmu 5.1 Mediana z trzech W pewnych szczególnych przypadkach, jak na przykład sortowanie posortowanej już tablicy, najprostsza metoda podziału, bazująca na wyborze skrajnego lewego, bądź prawego elementu jak klucza podziału, okazuje się byc wyjątkowo nieefektywną, dającą złożoność kwadratową. W celu zapobiegnięcia takiej sytuacji stosuje się zmienioną postać wyboru elementu, względem którego dokonujemy podziału, polegającą na wyborze tzw. mediany z trzech. Pomysł realizuje się poprzez wstępny wybór trzech elementów z rozpatrywanego fragmentu tablicy oraz użycie jako klucza podziału tego, którego watrość leży pomiędzy wartościami dwu pozostałych elementów. Jest to spowodowane tym, że taki element rozgraniczający podzieli zbiór danych w pobliżu środka. Użycie metody mediany z trzech drastycznie zmniejsza prawdopodobieństwo wystąpienia najgorszego przypadku, eliminuje konieczność stosowania wartowników przy podziałach, redukuje sumaryczny, średni czas działania algorytmu o około 5 %. 5.2 Sortowanie krótkich fragmentów innymi metodami Usprawnienie przy użyciu innych metod sortowania opiera się na spostrzeżeniu, że około połowa wszystkich rekurencyjnych wywołań związanych jest z fragmentami jednoelementowymi. Biorąc pod uwagę fakt, iż wybór elementu dzielącego w przypadku niewielkich fragmentów okazuje się być pracochłonną operacją, bardziej efektywne wydaje się być zastosowanie prostszych algorytmów - przykładowo metody sortowania przez wstawianie. Realizuje się to poprzez użycie metod prostych w momencie, gdy uzyskane fragmenty stają się dostatecznie krótkie, rzędu co najwyżej kilkunastu. Wówczas większość elementów tablicy znajduje się blisko właściwych miejsc, przez co użycie algorytmu sortowania przez wstawianie powoduje znacznie mniejszy koszt. Inna metodą, nieco bardziej efektywną niż stosowanie sortowania przez wstawianie w chwili napotkania małych podzbiorów, jest ignorowanie podczas podziału małych przedziałów. Po podziale otrzymuje się zbiór danych prawie posortowany, który następnie porządkujemy metodą sortowania przez wstawianie. Jak wykazano, pozwala to osiągnąć oszczędność czasu wykonania nawet

11 do 20 %. 5.3 Zmniejszenie rozmiaru stosu W przypadku, gdy sortowany fragment tablicy jest dzielony na część jednoelementową oraz część pozostałą może się zdarzyć że dla dużego rozmiaru danych program może zakończyć się błędem z powodu braku wystarczającej ilości pamięci. Aby nie dopuścić do tego rodzaju sytuacji, przed porządkowaniem elementów następuje sprawdzenie, która z części jest dłuższa, a następnie umieszcza się na stosie tę o większej długości. Dzięki temu, na każdym poziomie wywołań algorytm obsługuje fragment będący co najwyżej połową fragmentu z poprzedniego poziomu. Zapobiega to przepełnieniu stosu w przypadku dużego rozmiaru tablicy wymagającej sortowania (gdyż zamiast głębokości O(n) bedzie miał głebokość rzędu O(log n)). 5.4 QuickerSort Wariant podstawowy szybko sortuje tablicę losowych liczb, jednak w skrajnym przypadku, gdy mamy do czynienia z tablicą n identycznych elementów, calkowity czas wykonania algorytmu wynosi O(n 2 )., gdyż każdy z n-1 przebiegów podziału tablicy używa czasu rzędu O(n), aby zająć się pojedyńczym elementem. W celu uniknięcia tego problemu w momencie, gdy funkcja zatrzymuje się na elementach o jednakowych wartościach, należy zamienić je ze sobą. Jest to rozwiązanie inne niż w przypadku stosowania wersji podstawowej, gdzie po napotkaniu jednakowych elementów, przechodzimy nad nimi, nie wykonując zamiany. Mimo, iż wykonujemy więcej operacji zamiany niż potrzeba, przekształcamy przypadek z czasem kwadratowym w przypadek, w którym algorytm wykonuje nlogn porównań. Pomysł polega na podziale sortowanych danych na trzy części: jedną dla kluczy mniejszych niż element rozgraniczający, jedną dla równych oraz jedną dla większych od niego. Przedstawione powyżej metody można łączyć ze sobą, np. połączenie wyboru mediany z trzech z zastępowaniem podstawowej procedury przez stosowanie sortowania przez wstawianie może poprawić czas działania algorytmu sortowania szybkiego w stosunku do wersji podstawoej nawet do 25 procent. Ponadto można rozważać możli-

12 wość dalszych poprawek rozpatrywanego algorytmu przez usunięcie rekurencji, zastąpieniem wywołań procedur kodem typu inline itd. Aby ograniczyć stos wymagany przez algorytm korzysta się z implementacji nierekurencyjnej. Oszczędność czasu można osiągnać poprzez zakodowanie fragmentów programu w asemblerze albo języku maszynowym. 6 Wersja rekurencyjna a wersja iteracyjna 6.1 Wersja rekurencyjna W przypadku użycia wersji rekurencyjnej, każde wywołanie procedury sortowania dla jakiejkolwiek podtablicy tablicy wejściowej powoduje konieczność odłożenia na stosie zapewnianym przez system wszystkich zmiennych lokalnych oraz parametrów wywołania danej funkcji. Przez to algorytm pochłania znaczną część zasobów komputera, tym większą, im więcej zagłęnień następuje w wyniku wywołań rekurencyjnych. W zdegenerowanych przypadkach ilość zagłębień może być rzędu O(n), natomiast w przypadku losowych danych maksymalny rozmiar stosu jest proporcjonalny do log n. 6.2 Wersja iteracyjna Korzystając z iteracyjnej wersji algorytmu sortowania szybkiego, gdzie stos jest realizowany jawnie w ciele procedury sortującej, odkładane na nim zmienne stanowią jedynie zmienne tymczasowe, w których pamiętane są informacje o podzbiorach przeznaczonych do posortowania. Za każdym razem, kiedy potrzebny jest podzbiór do przetwarzania, zdejmujemy jeden element ze stosu. Dzięki temu stos zajmuje pamięć proporcjonalną do długości tablicy, co w istotny sposób uszczupla zapotrzebowanie na pamięć. Porównując obie wersje, należy stwierdzić i przy niekorzystnym ułożeniu elementów tablicy wejściowej szybszą metodą okazuje się być wersja rekurencyjna. Jest ona również bardziej intuicyjna, gdyż to wynika z samej definicji algorytmu. Zaleta wersji iteracyjnej uwidacznia się w uniezależnieniu sposobu implementacji wywołań rekurencyjnych przez dany system operacyjny.

13 7 Probabilistyczna wersja algorytmu Zazwyczaj zakłada się, iż wszelkie permutacje elementów tablicy wejściowej są jednakowo prawdopodobne. Jednak założenie takie nie zawsze jest możliwe. Zamiast przyjmować jakieś założenia można wymusić pewien rozkład, np. przed rozpoczęciem sortowania algorytm może w sposób losowy permutować elementy tablicy, żeby sprawić, aby każda permutacja była jednakowo prawdopodobna, co uniezależnia czas działania od wstępnego uporządkowania danych wejściowych. Wersja probabilistyczna posiada tę własność, iż żadne konkretne dane wejściowe nie powodują pesymistycznego działania algorytmu, natomiast najgorszy przypadek zależy od generatora liczb losowych. Aby utworzyć wersję probabilistyczną, można np. w każdym kroku algorytmu, przed podziałem tablicy, zamienić element względem którego dokonujemy podziału z losowo wybranym elementem. Dzięki temu można oczekiwać, iż w przypadku przeciętnym podział tablicy wejściowej będzie dobrze zrównoważony. 8 Zastosowanie Quicksorta do wyznaczania mediany Mediana ze zbioru n elementów zdefiniowana jest jako element mniejszy lub równy połowie n elementów oraz większy lub równy od drugiej połowy n elementów. W celu wyznaczenia mediany z zadanego zbioru liczb można wykorzystać nieco zmodyfikowany algorytm sortowania szybkiego. Oczywiście jednym ze sposobów może być całkowite posortowanie zbioru, a następnie odczytanie środkowej wartości, jednak zdecydowanie bardziej zadawalające wyniki można osiągnąć, posługując się procesem dzielenia z algorytmu sortowania szybkiego. Wyznaczanie mediany jest szczególnym przypadkiem zagadnienia znajdowania k-tego najmniejszego elementu. Dla zadanej tablicy a algorytm polega na zastosowaniu operacji podziału z metody sortowania szybkiego dla l=1, p=n, z a[k] wybranym jako wartość dzieląca. Wartości indeksów i oraz j są wówczas takie, że: dla h < i, a[h] <= a[k]

14 dla h > j, i > j a[h] >= a[k] Jeżeli wartość dzieląca a[k] okazuje się być za mała, wówczas proces podziału musi zostać powtórzony dla elementów a[i]...a[p]. Gdy wartość jest zbyt duża, operacja dzielenia musi zostać powtórzona dla przedziału a[l]...a[j]. Natomiast gdy indeks k zawarty jest pomiędzy indeksami i oraz j, wówczas element a[k] jest szukaną wielkością. Proes dzielenia tablicy powinien być kontynuowany do chwili wystąpienia ostatniego przypadku. Jeżeli przyjmiemy założenie, iż każdy podział dzieli tablicę na pół, wówczas liczba potrzebnych porównań wynosi: n + n 2 + n = 2n tzn. jest rzędu n. Analizując przypadek wyznaczania mediany w ten właśnie sposób dochodzimy do wniosku, że do jej znalezienia wymaganych jest około (2 + 2 ln 2)n porównań. 9 Porównanie wariantów algorytmu Quicksort Porównując względne czasy działania różnych wersji algorytmu szybkiego sortowania (ze względu na sposób wyboru klucza podziału) można dojść do wniosku, iż użycie implementacji, w której jako klucz podziału stosuje się medianę z trzech czy też losowy wybór elementu rozgraniczającego, daje w pewnych sytuacjach zdecydowanie lepsze rezultaty niż korzystanie z wersji podstawowej. Szczególnie jest to widoczne, gdy dane wejściowe są posortowane, czy też posortowane w odwrotnej kolejności - co powoduje, iż wszystkie podziały stają się zdegenerowane. Podobnie, testy przeprowadzane dla wariantów ulepszających algorytm wykazują, iż poprzez zastosowanie sortowania przez wstawianie odpowiednio małych fragmentów, bądź sortowania przez wstawianie zastosowanego do całej tablicy, po uprzednim ignorowaniu

15 małych framentów, pozostawionych bez uporządkowania, czas sortowania ulega skróceniu. Efektywność algorymtu wzrasta także przy zastosowaniu wariantu z podziałem sortowanych fragmentów tablicy na trzy części, co przy istnieniu zdublowanych kluczy zdecydowanie poprawia czas działania procedury sortującej.

16 Literatura 1. Robert Sedgewick: Algorytmy w C++, Wydawnictwo RM, Warszawa Thomas H.Cormen, Charles E.Leiserson, Ronald L. RivestWprowadzenie do algorytmów, Wydawnictwa Naukowo- Techniczne, Warszawa 1997, Niklaus Wirth Algorytmy + struktury danych = programy, Wydawnictwa Naukowo-Techniczne 4. Jon Bentley Perełki oprogramowania, Wydawnictwa Naukowo- Techniczne 5. L. Banachowski, K.Diks, W.Rytter Algorytmy i struktury danych, Wydawnictwa Naukowo-Techniczne, Warszawa 1996, 2001

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

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych Zaawansowane algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Sortowanie za pomocą malejących przyrostów metoda Shella Metoda jest rozwinięciem metody sortowania

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

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

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

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

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

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

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

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

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

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

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

Laboratorium nr 7 Sortowanie

Laboratorium nr 7 Sortowanie Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę

Bardziej szczegółowo

Sortowanie zewnętrzne

Sortowanie zewnętrzne Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Sortowanie zewnętrzne 1 Wstęp Bardzo często

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

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. 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

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

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

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

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

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

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, 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

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

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Temat 7. Najlżejsze i najcięższe algorytmy sortowania Temat 7 Najlżejsze i najcięższe algorytmy sortowania Streszczenie Komputery są często używane porządkowania różnych danych, na przykład nazwisk (w porządku alfabetycznym), terminów spotkań lub e-maili

Bardziej szczegółowo

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

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa Łukasz Przywarty 171018 Data utworzenia: 24.03.2010r. Mariusz Kacała 171058 Prowadzący: prof. dr hab. inż. Adam Janiak oraz dr inż. Tomiasz Krysiak Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

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

PODSTAWY INFORMATYKI wykład 10.

PODSTAWY INFORMATYKI wykład 10. PODSTAWY INFORMATYKI wykład 10. 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-Hutniacza w Krakowie WEAIiE,

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4 Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Nr 4 Algorytmy sortowania zewnętrznego 1 Wstęp Bardzo często przy rozwiązywaniu praktycznych

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

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

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP Danuta Szeliga AGH Kraków Spis treści I 1 Wstęp 2 Metody proste 3 Szybkie metody sortowania 4 Algorytmy hybrydowe Sortowanie hybrydowe Sortowanie introspektywne

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

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

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

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

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

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

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

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

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

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych ĆWICZENIE 2 - WYBRANE ZŁOŻONE STRUKTURY DANYCH - (12.3.212) Prowadząca: dr hab. inż. Małgorzata Sterna Informatyka i3, poniedziałek godz. 11:45 Adam Matuszewski, nr 1655 Oliver

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

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

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

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void

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

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

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

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

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

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

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln) Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia II stopnia, rok 1 Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln) 1. Informacje ogólne

Bardziej szczegółowo

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013 Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia II stopnia, rok 1 Sylabus modułu: Matematyczne podstawy informatyki (03-MO2S-12-MPIn) 1. Informacje ogólne koordynator

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

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

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

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel Wstęp do programowania Dziel i rządź Piotr Chrząstowski-Wachtel Divide et impera Starożytni Rzymianie znali tę zasadę Łatwiej się rządzi, jeśli poddani są podzieleni Nie chodziło im jednak bynajmniej o

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

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

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

Optymalizacja ciągła

Optymalizacja ciągła Optymalizacja ciągła 5. Metoda stochastycznego spadku wzdłuż gradientu Wojciech Kotłowski Instytut Informatyki PP http://www.cs.put.poznan.pl/wkotlowski/ 04.04.2019 1 / 20 Wprowadzenie Minimalizacja różniczkowalnej

Bardziej szczegółowo

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np. Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa

Bardziej szczegółowo

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki. Podstawy Programowania 1 Sortowanie tablic jednowymiarowych Arkadiusz Chrobot Zakład Informatyki 12 listopada 20 1 / 35 Plan Sortowanie Wartość minimalna i maksymalna w posortowanej tablicy Zakończenie

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

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

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

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

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

Porównanie Heap Sort, Counting Sort, Shell Sort, Bubble Sort. Porównanie sortowao: HS, CS, Shs, BS

Porównanie Heap Sort, Counting Sort, Shell Sort, Bubble Sort. Porównanie sortowao: HS, CS, Shs, BS Czas sortowania w milisekundach Czas sortowania w milisekundach Sortowanie Porównanie, Counting Sort, Shell Sort, Bubble Sort 4 Porównanie sortowao: HS, CS, Shs, BS 35 3 25 2 15 5 Counting Sort Shell Sort

Bardziej szczegółowo

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa Piotr Chrząstowski-Wachtel Uniwersytet Warszawski Al Chwarizmi i trzy algorytmy Euklidesa Algorytmika Najważniejsza część informatyki Opisuje jak rozwiązywać problemy algorytmiczne, jakie struktury danych

Bardziej szczegółowo

Sortowanie bąbelkowe

Sortowanie bąbelkowe 1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym

Bardziej szczegółowo

Algorytmy sortujące. Sortowanie bąbelkowe

Algorytmy sortujące. Sortowanie bąbelkowe Algorytmy sortujące Sortowanie bąbelkowe Sortowanie bąbelkowe - wstęp Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Zasada działania opiera się na cyklicznym porównywaniu

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

Metodyki i Techniki Programowania 2

Metodyki i Techniki Programowania 2 Metodyki i Techniki Programowania 2 zajęcia nr 5 algorytmy cz.1: sortowanie Elektronika i Telekomunikacja, semestr III rok akademicki 2009/2010 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Sortowanie

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

Podstawowe struktury danych

Podstawowe struktury danych Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym

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

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice

Bardziej szczegółowo

5. Rozwiązywanie układów równań liniowych

5. Rozwiązywanie układów równań liniowych 5. Rozwiązywanie układów równań liniowych Wprowadzenie (5.1) Układ n równań z n niewiadomymi: a 11 +a 12 x 2 +...+a 1n x n =a 10, a 21 +a 22 x 2 +...+a 2n x n =a 20,..., a n1 +a n2 x 2 +...+a nn x n =a

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

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład 2. Drzewa zbalansowane AVL i 2-3-4 Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania

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

5. Podstawowe algorytmy i ich cechy.

5. Podstawowe algorytmy i ich cechy. 23 5. Podstawowe algorytmy i ich cechy. 5.1. Wyszukiwanie liniowe i binarne 5.1.1. Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich,

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

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

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Algorytmy zachłanne, algoritme Dijkstry Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XI Jesień 2013 1 / 25 Algorytmy zachłanne Strategia polegająca na

Bardziej szczegółowo

Algorytmy i Struktury Danych

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

Bardziej szczegółowo

Optymalizacja. Przeszukiwanie lokalne

Optymalizacja. Przeszukiwanie lokalne dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Maciej Hapke Idea sąsiedztwa Definicja sąsiedztwa x S zbiór N(x) S rozwiązań, które leżą blisko rozwiązania x

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

Tablice z haszowaniem

Tablice z haszowaniem Tablice z haszowaniem - efektywna metoda reprezentacji słowników (zbiorów dynamicznych, na których zdefiniowane są operacje Insert, Search i Delete) - jest uogólnieniem zwykłej tablicy - przyspiesza operacje

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

Algorytmy sortujące 1

Algorytmy sortujące 1 Algorytmy sortujące 1 Sortowanie Jeden z najczęściej występujących, rozwiązywanych i stosowanych problemów. Ułożyć elementy listy (przyjmujemy: tablicy) w rosnącym porządku Sortowanie może być oparte na

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce. POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie

Bardziej szczegółowo

Spacery losowe generowanie realizacji procesu losowego

Spacery losowe generowanie realizacji procesu losowego Spacery losowe generowanie realizacji procesu losowego Michał Krzemiński Streszczenie Omówimy metodę generowania trajektorii spacerów losowych (błądzenia losowego), tj. szczególnych procesów Markowa z

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