Struktury Danych i Złożoność Obliczeniowa

Podobne dokumenty
Algorytm selekcji Hoare a. Łukasz Miemus

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 )

Jeszcze o algorytmach

Laboratorium nr 7 Sortowanie

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Algorytmy i Struktury Danych.

Sortowanie przez wstawianie Insertion Sort

Analiza algorytmów zadania podstawowe

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

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Sortowanie danych. Jolanta Bachan. Podstawy programowania

INFORMATYKA SORTOWANIE DANYCH.

Zaawansowane algorytmy i struktury danych

Programowanie w VB Proste algorytmy sortowania

Sortowanie przez scalanie

Sortowanie - wybrane algorytmy

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

Strategia "dziel i zwyciężaj"

Wstęp do programowania

Algorytmy sortujące i wyszukujące

Sortowanie. LABORKA Piotr Ciskowski

Algorytmy i struktury danych

Metodyki i Techniki Programowania 2

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

Sortowanie bąbelkowe

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.

Zasady analizy algorytmów

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

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

Algorytmy i Struktury Danych, 2. ćwiczenia

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

Sortowanie w czasie liniowym

Analiza algorytmów zadania podstawowe

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

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

PODSTAWY INFORMATYKI wykład 5.

CO TO JEST ALGORYTM?

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

Matematyczne Podstawy Informatyki

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

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

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Podstawy Informatyki. Sprawność algorytmów

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

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

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

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

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

Algorytmy i Struktury Danych.

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

Algorytmy i struktury danych

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Efektywna metoda sortowania sortowanie przez scalanie

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

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

PODSTAWY INFORMATYKI wykład 10.

Wyszukiwanie binarne

Algorytmy sortujące 1

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

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

Informatyka A. Algorytmy

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Temat: Algorytmy zachłanne

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

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

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

Wstęp do programowania

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

Sortowanie Shella Shell Sort

Algorytmy sortujące. Sortowanie bąbelkowe

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Sortowanie. Bartman Jacek Algorytmy i struktury

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

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

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

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Wymagania edukacyjne z informatyki w klasie VIII

Algorytmy sortowania w języku C. Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (Sortowanie)

Luty 2001 Algorytmy (4) 2000/2001

Java Collections Framework

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

Programowanie Proceduralne

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

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,

Algorytmy przeszukiwania

Przykładowe sprawozdanie. Jan Pustelnik

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

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

Sprawozdanie do 5. Projektu z Algorytmów i struktur danych 1

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Kompletna dokumentacja kontenera C++ vector w -

Transkrypt:

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 przejście pętli (od 0 do n) 5971368 5971368 5791368 5719368 5713968 5713698 5713689

Sortowanie bąbelkowe Drugie przejście pętli (od 0 do n-1) 5713689 5713689 5173689 5137689 5136789 5136789

Sortowanie bąbelkowe Trzecie przejście pętli (od 0 do n-2) 5136789 1536789 1356789 1356789 1356789

Sortowanie bąbelkowe Czwarte przejście pętli (od 0 do n-3) 1356789 1356789 1356789 1356789

Sortowanie bąbelkowe Piąte przejście pętli (od 0 do n-4) 1356789 1356789 1356789

Sortowanie bąbelkowe Szóste przejście pętli (od 0 do n-5) 1356789 1356789 Koniec algorytmu

Sortowanie bąbelkowe Czy wydajność sortowania bąbelkowego można w łatwy sposób poprawić?

Sortowanie bąbelkowe Zadanie 1: Proszę posortować metodą bąbelkową liczby: 42 15 20 91 7 23 19 Zadanie 2: Proszę posortować metodą bąbelkową liczby: 99 13 29 34 57 69 74

Sortowanie bąbelkowe Prosta implementacja? (dla chętnego) Sortowanie bąbelkowe ma złożoność O(n2),

Sortowanie przez wstawianie Inaczej insert-sort, również dość proste sortowanie, sortowanie w miejscu? potrzebny jest drugi zbiór dla elementów posortowanych, przypomina nieco naturalne układanie kart w wachlarzu na ręce.

Sortowanie przez wstawianie Zbiór wejściowy: 5 9 7 1 3 6 8 Zbiór uporządkowany: (pusty)

Sortowanie przez wstawianie Zbiór wejściowy: 5 9 7 1 3 6 8 Zbiór uporządkowany: 5

Sortowanie przez wstawianie Zbiór wejściowy: 9 7 1 3 6 8 Zbiór uporządkowany: 5 9

Sortowanie przez wstawianie Zbiór wejściowy: 7 1 3 6 8 Zbiór uporządkowany: 5 7 9

Sortowanie przez wstawianie Zbiór wejściowy: 1 3 6 8 Zbiór uporządkowany: 1 5 7 9

Sortowanie przez wstawianie Zbiór wejściowy: 3 6 8 Zbiór uporządkowany: 1 3 5 7 9

Sortowanie przez wstawianie Zbiór wejściowy: 6 8 Zbiór uporządkowany: 1 3 5 6 7 9

Sortowanie przez wstawianie Zbiór wejściowy: 8 Zbiór uporządkowany: 1 3 5 6 7 8 9

Sortowanie przez wstawianie Zbiór wejściowy: (pusty) Zbiór uporządkowany: 1 3 5 6 7 8 9

Sortowanie przez wstawianie Prosta implementacja? - dla chętnego. złożoność algorytmu sortowania przez wstawianie to również O(n2).

Sortowanie przez selekcję Inaczej sortowanie przez wybór, nieskomplikowany algorytm sortowania, działa w miejscu?

Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689

Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689 Drugie przejście pętli 5713689 5713689

Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689 Drugie przejście pętli 5713689 5713689 Trzecie przejście pętli 5713689 5136789

Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789

Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789 Piąte przejście pętli 5136789 1356789

Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789 Piąte przejście pętli 5136789 1356789 Szóste przejście pętli 1356789 1 3 5 6 7 8 9 sortowanie zakończone

Sortowanie przez selekcję Zadanie 1: Stosując sortowanie przez selekcję proszę posortować liczby: 5293781 Zadanie 2: Stosując sortowanie przez selekcję proszę posortować liczby: 42 19 23 4 13 21 88

Sortowanie przez selekcję Przykład implementacji? (dla chętnego) złożoność obliczeniowa algorytmu sortowania przez selekcję, to również O(n2).

Quick-sort Nieco bardziej złożony algorytm sortowania, sortowanie w miejscu? algorytm ma naturę rekurencyjną, skonstruowany przez C.A.R. Hoare'a.

Quick-sort Krótka prezentacja działania algorytmu: ze zbioru wejściowego wybieramy pewien element*, elementy dzielimy na mniejsze i większe-równe od wybranego elementu, w ten sposób uzyskujemy podział na dwa zbiory, dla każdego ze zbiorów wywołujemy rekurencyjnie quick-sort,

Quick-sort Przykład działania algorytmu quick-sort. Animacja źródło: http://upload.wikimedia.org/wikipedia/commons/6/6a/sorting_quicksort_anim.gif

Quick-sort Średnia złożoność obliczeniowa algorytmu Quick-sort to O(nlogn) jednakże trzeba pamiętać o tym, że złożoność pesymistyczna 2 może wynieść O(n ). Zadanie: Stosując metodę quick-sort posortować liczby: 82 21 39 20 17 63 56 29 31 29 15 63 Jako element podziału proszę przyjąć element ostatni.

Sortowanie przez scalanie (merge-sort) Algorytm o podobnej zasadzie działania jak quick-sort, lecz z pewnymi ulepszeniami, również działa rekurencyjnie, sortowanie w miejscu?

Sortowanie przez scalanie (merge-sort) Krótki opis działania algorytmu zbiór wejściowy dzielimy na dwie równe części, jeśli zbiór wejściowy ma nieparzystą ilość elementów, wówczas jeden z podzbiorów będzie miał o jeden element więcej, dokonujemy rekurencyjnego podziału zbioru, scalamy otrzymane dwa zbiory.

Sortowanie przez scalanie (merge-sort) Scalanie dwóch ciągów: wybieramy pierwszy element z pierwszego lub drugiego ciągu w zależności od tego, który ma mniejszą wartość, wkładamy tenże element do ciągu docelowego a ze źródłowego go usuwamy, czynności te powtarzamy, aż oba zbiory będą puste.

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort)

Sortowanie przez scalanie (merge-sort) Zadanie: Proszę posortować stosując metodę merge-sort następujące liczby: 5, 9, F, A, 3, 7, 8, 8, 1, B, 4, C.

Sortowanie przez scalanie (merge-sort) Złożoność obliczeniowa sortowania przez scalanie wynosi O(nlogn), co prawda działa nieco wolniej niż quick-sort, jednak algorytm ten zapewnia złożoność O(nlogn) w każdym przypadku (nawet pesymistycznym), czas wykonania algorytmu nie jest zależny od wartości sortowanych elementów.

Algorytmy selekcji Zadaniem selekcji (wyboru) jest znalezienie ktego najmniejszego (największego) elementu spośród zbioru n elementów, najprostsze (intuicyjne) rozwiązanie, to wybranie najszybszego algorytmu sortowania i wybranie k-tego kolejnego elementu ze zbioru uporządkowanego, Czy da się uzyskać odpowiedź na to pytanie szybciej?

Algorytmy selekcji Szczególny przypadek: znalezienie pierwszego najmniejszego (największego) elementu w zbiorze n-elementowym, jaką mamy złożoność takiego algorytmu? czy można zatem znaleźć metodę znalezienia k-tego elementu również w liniowym (O(n)) czasie?

Algorytm Hoare'a Z pomocą może przyjść algorytm selekcji (wyboru) Hoare'a, posiada on złożoność: pesymistycznie O(n2), statystycznie O(n), mechanizm działania jest podobny do algorytmu quick-sort.

Algorytm Hoare'a Działanie algorytmu Hoare'a (szukamy elementu k-tego spośród n elementów): zbiór wejściowy dzielimy według pewnego kryterium (pierwszy element, ostatni, mediana) na elementy mniejsze-równe od niego oraz większe od niego, mamy trzy sytuacje: moc zbioru z elementami mniejszymi* > k moc zbioru z elementami mniejszymi* = k uruchamiamy algorytm rekurencyjnie dla tego zbioru (szukamy elementu k-tego dla tego zbioru), szukanym elementem jest punkt podziału koniec algorytmu, moc zbioru z elementami mniejszymi* < k uruchamiamy algorytm rekurencyjnie dla zbioru z elementami większymi (szukamy elementu k-1-*).

Algorytm Hoare'a Zadanie: Proszę znaleźć ósmy element z tablicy: 82 21 39 20 17 63 56 29 31 29 15 63 Proszę przyjąć za punkt podziału pierwszy element.

Pytania?

Dziękuję za uwagę