Algorytm Quicksort. Agnieszka Miśkowiec i Tomasz Skucha
|
|
- Alojzy Piekarski
- 7 lat temu
- Przeglądów:
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 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ółowoAlgorytmy 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ółowoSortowanie 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ółowoAlgorytmy 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ółowoStrategia "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ółowoZł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ółowoAlgorytmy 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ółowoAlgorytm 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ółowoINFORMATYKA 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ółowoSortowanie. 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ółowoSortowanie 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ółowoTEORETYCZNE 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ółowoSortowanie. 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ółowoPodstawy 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ółowoLaboratorium 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ółowoSortowanie 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ółowoSortowanie - 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ółowoZadanie 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ółowoAlgorytmy 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ółowoRekurencje. 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ółowoWykł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ółowoDefinicja. 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ółowoStruktury 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ółowoWstę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ółowoMatematyczne 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ółowoAlgorytmy 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ółowoPodstawowe 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ółowoTemat 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ółowoZadanie 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ółowoTeoretyczne 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ółowoPODSTAWY 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ółowoUniwersytet 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ółowoREKURENCJA 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ółowoAnaliza 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ółowoRekurencja. 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ółowoAlgorytmy 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ółowoPODSTAWY 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ółowoZaawansowane 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ółowoJeś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ółowoznalezienia 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ółowoPodstawy 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ółowoEfektywna 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ółowoZasady 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ółowoJeszcze 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ółowoInformatyka 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ółowoAlgorytmy 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ółowoPodstawy 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ółowoAlgorytmy 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ółowoZaawansowane 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ółowoWYKŁ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ółowoSortowanie 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ółowoAlgorytmy 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ółowoZł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ółowoWstę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ółowoprowadzą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ółowoZł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ółowoSylabus 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ółowokoordynator 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ółowoAlgorytm. 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ółowoOSTASZEWSKI 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ółowoSortowanie 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ółowoWstę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ółowoWyszukiwanie 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ółowoKolejka 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ółowoAlgorytmy 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ółowoOptymalizacja 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ółowoDrzewa 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ółowoPodstawy 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ółowoPodstawy 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ółowoWprowadzenie 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ółowoEGZAMIN - 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ółowoPodstawy 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ółowooperacje 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ółowoPoró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ółowoPiotr 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ółowoSortowanie 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ółowoAlgorytmy 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ółowoWYŻ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ółowoMetodyki 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ółowoAlgorytmy 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ółowoPodstawowe 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ółowoDrzewa 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ółowoPodstawy 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ółowo5. 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ółowoRekurencja (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ółowoWykł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ółowoPodstawy 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ółowo5. 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ółowoPodstawy 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ółowoAlgorytmy 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ółowoWstę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ółowoAlgorytmy 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ółowoOptymalizacja. 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ółowoPoró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ółowoTablice 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ółowoWstę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ółowoAlgorytmy 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ółowoZASADY 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ółowoSpacery 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ółowoAnaliza 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