Algorytmy sortowania i przeszukiwania

Slides:



Advertisements
Podobne prezentacje
STRUKTURY DANYCH.
Advertisements

Sortowanie przez scalanie
Algorytmy sortowania i porządkowania
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Jarosław Kuchta Semafory.
Schemat blokowy M START KONIEC
Dynamiczne struktury danych Listy, Kolejki, Stosy
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
Wykład 06 Metody Analizy Programów System Hoare
Algorytmy – zapis struktur programowania
Programowanie I Rekurencja.
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Sortowanie Zajęcia 13.
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Podstawy programowania PP – LAB5 Wojciech Pieprzyca.
Algorytmy grafowe Reprezentacja w pamięci
Rzędy wielkości funkcji
Jak uczę programowania?
Podstawy programowania
Algorytmy i struktury danych
WYSZUKIWANIE I PORZĄDKOWANIE INFORMACJI WPROWADZENIE DO ALGORYTMIKI
Zbiór do posortowania mieści się w pamięci
Podstawy programowania
Algorytmy i Struktury Danych Sortowanie
Algorytmy i Struktury Danych Typy algorytmów
IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
TABLICE C++.
Semantyczna poprawność algorytmów – dowodzenie za pomocą niezmienników
Algorytmy i struktury danych
Algorytmy i struktury danych
sortowanie na bazie – wykorzystanie sortowania ze zliczaniem
Materiały pochodzą z Platformy Edukacyjnej Portalu
Złożone typy danych Listy Tworzenie elastycznych baz danych
Materiały pochodzą z Platformy Edukacyjnej Portalu
Algorytmy rekurencyjne - przykład
Tablice w Turbo Pascalu.
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
Sortowanie tablic jednowymiarowych
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
ZAPIS BLOKOWY ALGORYTMÓW
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
Algorytmy i Struktury Danych
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
METODY REPREZENTOWANIA IFORMACJI
Pętle – instrukcje powtórzeń
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
INFORMATYKA SORTOWANIE DANYCH
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Rekurencja - Haskell Bartosz Pawlak Sebastian Żółtowski Adam Stegenda Krystian Sobótka Tomasz Gołębiewski.
Rozdział 5 REKURENCJA.
Listy.
Kolejka priorytetowa.
Programowanie I Rekurencja.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Algorytmy sortowania i przeszukiwania

Spis treści Sortowanie przez wstawianie - InsertSort Sortowanie przez wybór – SelectionSort Algorytm sortowania bąbelkowego Rekurencja Szybkie sortowanie - quicksort

3 4 7 6 8 1 Sortowanie przez wstawianie - InsertSort Karty posortowane Metoda sortowania przez wstawianie używana jest najczęściej przez osoby grające w karty. Polega ona na założeniu, że w danym momencie w ręku trzymamy jednocześnie karty posortowane i nieposortowane. W celu realizacji zadania porządkowania należy pobrać ze sterty kart do posortowania kartę i wstawienia jej na odpowiednie miejsce w obszarze kart posortowanych. 3 4 7 6 8 1 Karty posortowane Karty do posortowania

Sortowanie przez wstawianie - InsertSort Dane: n - liczba elementów w sortowanym zbiorze, d[ ] – zbiór, który będzie sortowany. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie przez wstawianie– InsertSort Krok 1. Dla i = 1, 2, ..., n – 1 wykonaj kroki 2 … 4, a następnie zakończ algorytm Krok 2. x ← d[j];  i ← j + 1 Krok 3. Dopóki ( i ≤ n )  ∧  ( x > d[i] ): wykonuj d[i - 1] ← d[i];  i ← i + 1 Krok 4 d[i - 1] ← x

Sortowanie przez wstawianie - InsertSort for(j = n - 2; j >= 0; j--) { x = d[j]; i = j + 1; while((i < n) && (x > d[i])) d[i - 1] = d[i]; i++; } d[i - 1] = x;

Sortowanie przez wstawianie - InsertSort Wnioski: - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) - nie nadaje się do porządkowania dużych zbiorów postać algorytmu przejrzysta algorytm krótki

Sortowanie przez wybór - SelectionSort Metoda porządkowania przez wybór polega na porządkowaniu zbioru w sposób rosnący tzn. element najmniejszy powinien znaleźć się na pierwszej pozycji. Metoda ta polega na znalezieniu w zbiorze elementu najmniejszego i wymienieniu go z elementem na czytanej pozycji zbioru aż do całkowitego jego uporządkowania. Zbiór nieuporządkowany 4 7 2 9 3 4 7 2 9 3 Etapy porządkowania

Sortowanie przez wybór - SelectionSort Dane: n - liczba elementów zbioru, d[ ] – zbiór sortowany. Elementy zbioru mają indeksy od 1 do n. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie przez wybór – Selection Sort Idea: najmniejszy wśród nieuporządkowanych daj na początek Krok 1. Dla j = 1, 2, ..., n - 1: wykonuj Krok 1 ...Krok 4, a następnie zakończ algorytm Krok 2. pmin ← j Krok 3. Dla i = j + 1,  j + 2, ..., n: jeśli d[i] < d[pmin], to pmin ← i Krok 4. d[j] ↔ d[pmin]

Sortowanie przez wybór - SelectionSort for(j = 0; j < N - 1; j++) { pmin = j; for(i = j + 1; i < N; i++) if(d[i] < d[pmin]) pmin = i; } swap(d[pmin], d[j]);

Sortowanie przez wybór - SelectionSort Wnioski: - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) - nie nadaje się do porządkowania dużych zbiorów wykonuje taką samą ilość operacji porównania dla zbiorów częściowo uporządkowanych jak i dla zbiorów nieuporządkowanych algorytm przejrzysty, zwięzły

Algorytm sortowania bąbelkowego Metoda porządkowania bąbelkowego swoją nazwę wzięła od pęcherzyków powietrza ulatujących w górę tuby wypełnionej wodą. Metoda ta polega na analizowaniu dwóch sąsiadujących ze sobą elementów, jeśli nie są one uporządkowane następuje ich zamiana. Etapy 40 2 4 39 6 18 20 Indeks tablicy

Algorytm sortowania bąbelkowego Dane: n - liczba elementów zbioru, d[ ] – zbiór sortowany. Elementy zbioru mają indeksy od 1 do n. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie bąbelkowe Krok 1. Dla j = n - 1, n - 2, ..., 1: wykonuj K02...K04, zakończ algorytm Krok 2. p ← 1 Krok 3. Dla i = 1, 2, ..., j: jeśli d[i] > d[i + 1], to d[i] ↔ d[i + 1];  p ← 0 Krok 4. Jeśli p = 1, to zakończ

Algorytm sortowania bąbelkowego for(j = N - 1; j > 0; j--) { p = 1; for(i = 0; i < j; i++) if(d[i] > d[i + 1]) swap(d[i], d[i + 1]); p = 0; } if(p) break;

Algorytm sortowania bąbelkowego Wnioski: - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) - bardzo prosta i zrozumiała struktura zapisu dość często zdarzają się puste przebiegi (brak wykonania wymiany jeżeli elementu są uporządkowane)

Rekurencja Rekurencja - jest modą programowania polegająca na wywoływaniu funkcji programu przez samą siebie . Przykład: long int silnia(int x) { if (x==0) return 1; } else return x * silnia(x-1);

Szybkie sortowanie - quicksort Algorytm ten jak sama nazwa wskazuje, poprzez odpowiednią dekompozycję osiągnął znaczny zysk w szybkości porządkowania zbiorów. Metoda szybkiego sortowania podzielona została na dwie części: część służąca do właściwego sortowania polegająca na wywoływaniu samej siebie część odpowiadająca za rozdzielenie elementów tablicy wartości osiowej podziału P < P P >= P

Szybkie sortowanie - quicksort 29 40 2 1 6 18 20 32 23 34 39 41 29 2 1 6 18 20 23 40 32 34 39 41 2 40 1 6 18 20 23 32 34 39 41

Szybkie sortowanie - quicksort Oznaczenia: left – lewy skrajny element right – prawy skrajny element p – wartość osiowa i – zmienna sterująca pętlą m – poszukiwany indeks komórki tablicy, w której umieszczamy element osiowy

Szybkie sortowanie - quicksort void qsort(int* d, int left, int right) { if (left < right) int m = left; for(int i = left+1; i <= right; i++) if (d[i] < d[left]) swap(d[++m],d[i]); swap(d[left], d[m]); qsort(d, left, m-1); qsort(d, m+1, right); }

Szybkie sortowanie - quicksort Wnioski: - dzięki zastosowaniu metody programowania „dziel i zwyciężaj” algorytm w optymalnie krótkim czasie realizuje zadanie porządkowania zbiory (klasa złożoności obliczeniowej – O(N log N)