Sortowanie przez wstawianie

Podobne dokumenty
Wykład 2. Poprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów

Matematyczne Podstawy Informatyki

Sortowanie przez scalanie

Algorytmy i struktury danych Matematyka III sem.

Zaawansowane algorytmy. Wojciech Horzelski

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

Wprowadzenie do złożoności obliczeniowej

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Laboratorium nr 7 Sortowanie

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i Struktury Danych.

Efektywność algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

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

Zasady analizy algorytmów

Podyplomowe Studium Programowania i Systemów Baz Danych

Analiza algorytmów zadania podstawowe

Teoretyczne podstawy informatyki

Analiza algorytmów zadania podstawowe

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytmy i Struktury Danych

Teoretyczne podstawy informatyki

1. Analiza algorytmów przypomnienie

1 Wprowadzenie do algorytmiki

Sortowanie - wybrane algorytmy

Algorytm. Krótka historia algorytmów

Sortowanie przez wstawianie Insertion Sort

Algorytmy i Struktury Danych, 2. ćwiczenia

Podyplomowe Studium Informatyki

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

Wstęp do programowania

Programowanie w VB Proste algorytmy sortowania

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

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

Strategia "dziel i zwyciężaj"

Algorytm. Krótka historia algorytmów

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Poprawność semantyczna

Algorytmy sortujące. Sortowanie bąbelkowe

Sortowanie w czasie liniowym

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

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

Złożoność Obliczeniowa Algorytmów

Podstawy Programowania Algorytmy i programowanie

Wyszukiwanie. Wyszukiwanie binarne

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

INFORMATYKA SORTOWANIE DANYCH.

Sortowanie Shella Shell Sort

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

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

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Projektowanie i Analiza Algorytmów

Programowanie dynamiczne

Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

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

Definicje. Algorytm to:

Algorytmy i struktury danych

Wykład z Technologii Informacyjnych. Piotr Mika

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

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

Zaawansowane algorytmy i struktury danych

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

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

Technologie Informacyjne

(1) Poprawność Algorytmów

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i Struktury Danych.

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 )

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Podstawy Informatyki. Algorytmy i ich poprawność

Zapis algorytmów: schematy blokowe i pseudokod 1

Algorytmy, reprezentacja algorytmów.

Wykład 4. Sortowanie

Algorytmy. Programowanie Proceduralne 1

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

i = n = n 1 + n 2 1 i 2 n 1. n(n + 1)(2n + 1) n (n + 1) =

Laboratoria nr 1. Sortowanie

Drzewa poszukiwań binarnych

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

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

Algorytm. a programowanie -

Teoria obliczeń i złożoność obliczeniowa

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

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

Algorytmy i Struktury Danych.

Technologie informacyjne Wykład VII-IX

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Przykładowe sprawozdanie. Jan Pustelnik

Algorytmy i struktury danych

Algorytmika i pseudoprogramowanie

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych.

Transkrypt:

Sortowanie przez wstawianie Wykład 1 26 lutego 2019 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 1 / 25

Outline 1 Literatura 2 Algorytm 3 Problem sortowania Pseudokod 4 Sortowanie przez wstawianie Analiza poprawności algorytmu - niezmiennik pętli Analiza złożoności obliczeniowej 5 Notacja asymptotyczna 6 Sortowanie przez wstawianie - podsumowanie (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 2 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ 5 Kyle Loudon - Algorytmy w C 6 Robert Sedgewick - Algorytmy w C++ (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ 5 Kyle Loudon - Algorytmy w C 6 Robert Sedgewick - Algorytmy w C++ 7 Steven S. Skiena - The Algorithm Design Manual 8 Jeff Edmonds - How to think about algorithms 9 Jon Kleinberd, Eva Tardos - Algorithm Design 10 Anany Levitin - The design and analysis of Algorithms (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ 5 Kyle Loudon - Algorytmy w C 6 Robert Sedgewick - Algorytmy w C++ 7 Steven S. Skiena - The Algorithm Design Manual 8 Jeff Edmonds - How to think about algorithms 9 Jon Kleinberd, Eva Tardos - Algorithm Design 10 Anany Levitin - The design and analysis of Algorithms 11 Simon Harris, James Ross - Algorytmy. Od podstaw (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ 5 Kyle Loudon - Algorytmy w C 6 Robert Sedgewick - Algorytmy w C++ 7 Steven S. Skiena - The Algorithm Design Manual 8 Jeff Edmonds - How to think about algorithms 9 Jon Kleinberd, Eva Tardos - Algorithm Design 10 Anany Levitin - The design and analysis of Algorithms 11 Simon Harris, James Ross - Algorytmy. Od podstaw 12 Brian Christian, Tom Griffiths - Algorithms to Live By: The Computer Science of Human Decisions (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Literatura 1 Thomas H. Coremen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Wprowadzenie do algorytmów 2 Donald E. Knuth - Sztuka Programowania 3 Richard Johnsonbaugh, Marcus Schaeffer - Algorithms 4 Richard Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ 5 Kyle Loudon - Algorytmy w C 6 Robert Sedgewick - Algorytmy w C++ 7 Steven S. Skiena - The Algorithm Design Manual 8 Jeff Edmonds - How to think about algorithms 9 Jon Kleinberd, Eva Tardos - Algorithm Design 10 Anany Levitin - The design and analysis of Algorithms 11 Simon Harris, James Ross - Algorytmy. Od podstaw 12 Brian Christian, Tom Griffiths - Algorithms to Live By: The Computer Science of Human Decisions (Algorytmy. Kiedy mniej myśleć. I inne sposoby na racjonalne życie) (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 3 / 25

Algorytm Słowo algorytm pochodzi od nazwiska Abu Ja far Muhammed ibn Musa Al-Khowarizmi matematyka perskiego z IX wieku, początkowo oznaczało ono zasady operacji arytmetycznych na liczbach dziesiętnych (arabskich [indyjskich]). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 4 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. Ścisłość - kolejne kroki są ściśle określone. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. Ścisłość - kolejne kroki są ściśle określone. Determinizm - wyniki kroków pośrednich są jednoznaczne i określone tylko przez dane wejściowe i wyniki kroków poprzedzających. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. Ścisłość - kolejne kroki są ściśle określone. Determinizm - wyniki kroków pośrednich są jednoznaczne i określone tylko przez dane wejściowe i wyniki kroków poprzedzających. Skończoność - algorytm zatrzymuje się po skończonej liczbie kroków. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. Ścisłość - kolejne kroki są ściśle określone. Determinizm - wyniki kroków pośrednich są jednoznaczne i określone tylko przez dane wejściowe i wyniki kroków poprzedzających. Skończoność - algorytm zatrzymuje się po skończonej liczbie kroków. Poprawność - wynik wyprodukowany przez algorytm jest poprawny. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe, zwane wynikiem działania algorytmu. Własności algorytmów: Wejście - algorytm wymaga danych wejściowych. Wyjście - algorytm produkuje dane wyjściowe. Ścisłość - kolejne kroki są ściśle określone. Determinizm - wyniki kroków pośrednich są jednoznaczne i określone tylko przez dane wejściowe i wyniki kroków poprzedzających. Skończoność - algorytm zatrzymuje się po skończonej liczbie kroków. Poprawność - wynik wyprodukowany przez algorytm jest poprawny. Ogólność - algorytm stosuje się do zbioru danych wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 5 / 25

Algorytm Wiele obecnie używanych algorytmów nie spełnia warunku ogólności, skończoności, deterministyczności. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 6 / 25

Algorytm Wiele obecnie używanych algorytmów nie spełnia warunku ogólności, skończoności, deterministyczności. Przykłady: system operacyjny nie jest skończony, algorytmy pisane na maszyny wieloprocesorowe, bądź środowiska rozproszone rzadko są deterministyczne. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 6 / 25

Algorytm Wiele obecnie używanych algorytmów nie spełnia warunku ogólności, skończoności, deterministyczności. Przykłady: system operacyjny nie jest skończony, algorytmy pisane na maszyny wieloprocesorowe, bądź środowiska rozproszone rzadko są deterministyczne. Wiele praktycznych problemów jest za trudnych do efektywnego rozwiązania, dlatego często nagina się kryterium ogólności lub poprawności. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 6 / 25

Problem sortowania Sortowanie - uporządkowanie liczb z danego ciągu w porządku niemalejącym. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 7 / 25

Problem sortowania Sortowanie - uporządkowanie liczb z danego ciągu w porządku niemalejącym. Problem sortowania: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 7 / 25

Problem sortowania Sortowanie - uporządkowanie liczb z danego ciągu w porządku niemalejącym. Problem sortowania: Dane wejściowe: Ciąg n liczb (a 1, a 2,..., a n ). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 7 / 25

Problem sortowania Sortowanie - uporządkowanie liczb z danego ciągu w porządku niemalejącym. Problem sortowania: Dane wejściowe: Ciąg n liczb (a 1, a 2,..., a n ). Dane wyjściowe: Permutacja (a 1, a 2,..., a n) ciągu wejściowego taka, że a 1 a 2 a n. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 7 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, Przypisanie: k 12, i j (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, Przypisanie: k 12, i j Zmienne lokalne w danej procedurze (key, j, i). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, Przypisanie: k 12, i j Zmienne lokalne w danej procedurze (key, j, i). Dostęp do elementu tablicy: A[i] to i-ty element tablicy A. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, Przypisanie: k 12, i j Zmienne lokalne w danej procedurze (key, j, i). Dostęp do elementu tablicy: A[i] to i-ty element tablicy A. Dane złożone z kilku części są organizowane jako obiekty, składające się z atrybutów lub pól. length[a] atrybut mówiący o liczbie elementów tablicy A. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Pseudokod Wcięcia odpowiadają strukturze blokowej. Instrukcje iteracyjne: while, for, repeat,... Instrukcje warunkowe: if-then-else, Komentarze: //, / /, Przypisanie: k 12, i j Zmienne lokalne w danej procedurze (key, j, i). Dostęp do elementu tablicy: A[i] to i-ty element tablicy A. Dane złożone z kilku części są organizowane jako obiekty, składające się z atrybutów lub pól. length[a] atrybut mówiący o liczbie elementów tablicy A. Parametry przekazywane są do procedury przez wartość. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 8 / 25

Sortowanie przez wstawianie INSERTION-SORT(A) 1: for j 2 to length[a] do 2: key A[j] 3: i j 1 4: //Wstaw A[j] w posortowany ciąg A[1... j-1] 5: while i > 0 and A[i] > key do 6: A[i + 1] A[i] 7: i i 1 8: A[i + 1] key (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 9 / 25

Sortowanie przez wstawianie INSERTION-SORT(A) 1: for j 2 to length[a] do 2: key A[j] 3: i j 1 4: //Wstaw A[j] w posortowany ciąg A[1... j-1] 5: while i > 0 and A[i] > key do 6: A[i + 1] A[i] 7: i i 1 8: A[i + 1] key Niezmiennik pętli dla sortowania przez wstawianie: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 9 / 25

Sortowanie przez wstawianie INSERTION-SORT(A) 1: for j 2 to length[a] do 2: key A[j] 3: i j 1 4: //Wstaw A[j] w posortowany ciąg A[1... j-1] 5: while i > 0 and A[i] > key do 6: A[i + 1] A[i] 7: i i 1 8: A[i + 1] key Niezmiennik pętli dla sortowania przez wstawianie: Na początku każdej iteracji pętli for w wierszach 1 8 podtablica A[1..j-1] składa się z elementów znajdujących się pierwotnie w A[1..j-1], ale w porządku niemalejącym. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 9 / 25

Sortowanie przez wstawianie INSERTION-SORT(A) 1: for j 2 to length[a] do 2: key A[j] 3: i j 1 4: //Wstaw A[j] w posortowany ciąg A[1... j-1] 5: while i > 0 and A[i] > key do 6: A[i + 1] A[i] 7: i i 1 8: A[i + 1] key Niezmiennik pętli dla sortowania przez wstawianie: Na początku każdej iteracji pętli for w wierszach 1 8 podtablica A[1..j-1] składa się z elementów znajdujących się pierwotnie w A[1..j-1], ale w porządku niemalejącym. Przykład (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 9 / 25

Niezmiennik pętli - schemat dowodu Dowód poprawności algorytmu z wykorzystaniem niezmiennika pętli: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 10 / 25

Niezmiennik pętli - schemat dowodu Dowód poprawności algorytmu z wykorzystaniem niezmiennika pętli: Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 10 / 25

Niezmiennik pętli - schemat dowodu Dowód poprawności algorytmu z wykorzystaniem niezmiennika pętli: Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Utrzymanie: Jeśli niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli, to pozostaje prawdziwy przed następną. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 10 / 25

Niezmiennik pętli - schemat dowodu Dowód poprawności algorytmu z wykorzystaniem niezmiennika pętli: Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Utrzymanie: Jeśli niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli, to pozostaje prawdziwy przed następną. Zakończenie: Kiedy pętla się kończy z niezmiennika wynika użyteczna własność, która pozwala udowodnić poprawność algorytmu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 10 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. Jednoelementowy fragment tablicy jest zawsze posortowany, niezmiennik jest spełniony przed pierwszą pętlą. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. Jednoelementowy fragment tablicy jest zawsze posortowany, niezmiennik jest spełniony przed pierwszą pętlą. Utrzymanie: Niezmiennik pętli powinien być zachowany w każdej iteracji. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. Jednoelementowy fragment tablicy jest zawsze posortowany, niezmiennik jest spełniony przed pierwszą pętlą. Utrzymanie: Niezmiennik pętli powinien być zachowany w każdej iteracji. Działanie zewnętrznej pętli for polega na przesuwaniu A[j-1], A[j-2], A[j-3],... o jedną pozycję w prawo tak długo, aż zostanie znaleziona właściwa pozycja dla A[j] (wiersze 4-7). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. Jednoelementowy fragment tablicy jest zawsze posortowany, niezmiennik jest spełniony przed pierwszą pętlą. Utrzymanie: Niezmiennik pętli powinien być zachowany w każdej iteracji. Działanie zewnętrznej pętli for polega na przesuwaniu A[j-1], A[j-2], A[j-3],... o jedną pozycję w prawo tak długo, aż zostanie znaleziona właściwa pozycja dla A[j] (wiersze 4-7). Na znalezioną pozycję zostaje wstawiona wartość key, czyli A[j] (wiersz 8). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Dla pętli for moment sprawdzenia niezmiennika przed pierwszą iteracją, następuje po przypisaniu wartości zmiennej sterującej a przed sprawdzeniem warunku. Inicjowanie: Niezmiennik pętli jest prawdziwy przed pierwszą iteracją pętli. Dla j=2, podtablica A[1..j-1] zawiera tylko jeden element A[1], który od początku znajdował się na tej pozycji. Jednoelementowy fragment tablicy jest zawsze posortowany, niezmiennik jest spełniony przed pierwszą pętlą. Utrzymanie: Niezmiennik pętli powinien być zachowany w każdej iteracji. Działanie zewnętrznej pętli for polega na przesuwaniu A[j-1], A[j-2], A[j-3],... o jedną pozycję w prawo tak długo, aż zostanie znaleziona właściwa pozycja dla A[j] (wiersze 4-7). Na znalezioną pozycję zostaje wstawiona wartość key, czyli A[j] (wiersz 8). Operacje te zachowują niezmiennik pętli. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 11 / 25

Niezmiennik pętli - poprawność algorytmu Zakończenie: Co dzieje się kiedy pętla się kończy? (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 12 / 25

Niezmiennik pętli - poprawność algorytmu Zakończenie: Co dzieje się kiedy pętla się kończy? Pętla się kończy, gdy wartość j przekracza n, tzn. j = n + 1. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 12 / 25

Niezmiennik pętli - poprawność algorytmu Zakończenie: Co dzieje się kiedy pętla się kończy? Pętla się kończy, gdy wartość j przekracza n, tzn. j = n + 1. Wstawiając n + 1 w miejsce n + 1 w sformułowaniu niezmiennika pętli, wnioskujemy, że podtablica A[1..n] składa się z elementów znajdujących się pierwotnie w A[1..n], ale w kolejności niemalejącej. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 12 / 25

Niezmiennik pętli - poprawność algorytmu Zakończenie: Co dzieje się kiedy pętla się kończy? Pętla się kończy, gdy wartość j przekracza n, tzn. j = n + 1. Wstawiając n + 1 w miejsce n + 1 w sformułowaniu niezmiennika pętli, wnioskujemy, że podtablica A[1..n] składa się z elementów znajdujących się pierwotnie w A[1..n], ale w kolejności niemalejącej. Podtablica A[1..n] posortowana, zatem cała tablica jest posortowana. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 12 / 25

Niezmiennik pętli - poprawność algorytmu Zakończenie: Co dzieje się kiedy pętla się kończy? Pętla się kończy, gdy wartość j przekracza n, tzn. j = n + 1. Wstawiając n + 1 w miejsce n + 1 w sformułowaniu niezmiennika pętli, wnioskujemy, że podtablica A[1..n] składa się z elementów znajdujących się pierwotnie w A[1..n], ale w kolejności niemalejącej. Podtablica A[1..n] posortowana, zatem cała tablica jest posortowana. Algorytm jest poprawny. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 12 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. Zasoby: czas obliczeń, pamięć, szerokość kanału komunikacyjnego, itp. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. Zasoby: czas obliczeń, pamięć, szerokość kanału komunikacyjnego, itp. Cel: Wybór optymalnego algorytmu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. Zasoby: czas obliczeń, pamięć, szerokość kanału komunikacyjnego, itp. Cel: Wybór optymalnego algorytmu. Założenia analizy złożoności obliczeniowej: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. Zasoby: czas obliczeń, pamięć, szerokość kanału komunikacyjnego, itp. Cel: Wybór optymalnego algorytmu. Założenia analizy złożoności obliczeniowej: Obliczenia realizujemy na jednoprocesorowej (jednordzeniowej) maszynie o swobodnym dostępie do pamięci (RAM). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Analiza złożoności - określamy zasoby potrzebne do wykonania algorytmu. Zasoby: czas obliczeń, pamięć, szerokość kanału komunikacyjnego, itp. Cel: Wybór optymalnego algorytmu. Założenia analizy złożoności obliczeniowej: Obliczenia realizujemy na jednoprocesorowej (jednordzeniowej) maszynie o swobodnym dostępie do pamięci (RAM). Instrukcje wykonywane są sekwencyjnie. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 13 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, operacje na grafach - liczba wierzchołków i liczba krawędzi grafu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, operacje na grafach - liczba wierzchołków i liczba krawędzi grafu. Czas działania - dla konkretnych danych wejściowych - liczba elementarnych operacji lub kroków. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, operacje na grafach - liczba wierzchołków i liczba krawędzi grafu. Czas działania - dla konkretnych danych wejściowych - liczba elementarnych operacji lub kroków. Czas działania - założenia: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, operacje na grafach - liczba wierzchołków i liczba krawędzi grafu. Czas działania - dla konkretnych danych wejściowych - liczba elementarnych operacji lub kroków. Czas działania - założenia: elementarna operacja jest maszynowo niezależna, (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej Czas działania procedury INSERTION-SORT zależy od: rozmiaru danych wejściowych, stopnia posortowania ciągów wejściowych. Czas działania algorytmu rośnie z rozmiarem danych wejściowych. Należy zdefiniować: czas działania oraz rozmiar danych wejściowych. Rozmiar danych wejściowych - zależy istotnie od rozważanego problemu: sortowanie - liczba elementów w ciągu wejściowym, mnożenie dwóch liczb całkowitych - całkowita liczba bitów, operacje na grafach - liczba wierzchołków i liczba krawędzi grafu. Czas działania - dla konkretnych danych wejściowych - liczba elementarnych operacji lub kroków. Czas działania - założenia: elementarna operacja jest maszynowo niezależna, wykonanie i-tego wiersza wymaga czasu c i, przy czym c i jest stałą. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 14 / 25

Analiza złożoności obliczeniowej INSERTION SORT(A) koszt liczba wywołań 1: for j 2 to length[a] c 1 n 2: key A[j] c 2 n 1 3: i j 1 c 3 n 1 4: //Wstaw... 0 n 1 5: while i > 0 and A[i] > key c 5 n t j j=2 6: A[i + 1] A[i] c 6 n t j 1 j=2 7: i i 1 c 7 n t j 1 j=2 8: A[i + 1] key c 8 n 1 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 15 / 25

Analiza złożoności obliczeniowej INSERTION SORT(A) koszt liczba wywołań 1: for j 2 to length[a] c 1 n 2: key A[j] c 2 n 1 3: i j 1 c 3 n 1 4: //Wstaw... 0 n 1 5: while i > 0 and A[i] > key c 5 n t j j=2 6: A[i + 1] A[i] c 6 n t j 1 j=2 7: i i 1 c 7 n t j 1 j=2 8: A[i + 1] key c 8 n 1 Czas działania algorytmu suma czasów działania poszczególnych instrukcji. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 15 / 25

Analiza złożoności obliczeniowej INSERTION SORT(A) koszt liczba wywołań 1: for j 2 to length[a] c 1 n 2: key A[j] c 2 n 1 3: i j 1 c 3 n 1 4: //Wstaw... 0 n 1 5: while i > 0 and A[i] > key c 5 n t j j=2 6: A[i + 1] A[i] c 6 n t j 1 j=2 7: i i 1 c 7 n t j 1 j=2 8: A[i + 1] key c 8 n 1 Czas działania algorytmu suma czasów działania poszczególnych instrukcji. Czas działania instrukcji, która wykonuje się w czasie c i i jest powtarzana n razy wynosi nc i. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 15 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. Przypadek optymistyczny dla sortowania przez wstawianie tablica wejściowa jest posortowana. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. Przypadek optymistyczny dla sortowania przez wstawianie tablica wejściowa jest posortowana. Dla każdego j = 2, 3,..., n zachodzi A[i] key, zatem t j = 1. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. Przypadek optymistyczny dla sortowania przez wstawianie tablica wejściowa jest posortowana. Dla każdego j = 2, 3,..., n zachodzi A[i] key, zatem t j = 1. Minimalny czas działania: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 (n 1) + c 8 (n 1) (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. Przypadek optymistyczny dla sortowania przez wstawianie tablica wejściowa jest posortowana. Dla każdego j = 2, 3,..., n zachodzi A[i] key, zatem t j = 1. Minimalny czas działania: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 (n 1) + c 8 (n 1) T (n) = (c 1 + c 2 + c 3 + c 5 + c 8 )n (c 2 + c 3 + c 5 + c 8 ) (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek optymistyczny Czas działania algorytmu: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + n c 5 j=2 t j + c 6 n j=2 n (t j 1) + c 7 (t j 1) + c 8 (n 1) j=2 Czas działania algorytmu może się różnic nawet dla danych o tym samym rozmiarze. Przypadek optymistyczny dla sortowania przez wstawianie tablica wejściowa jest posortowana. Dla każdego j = 2, 3,..., n zachodzi A[i] key, zatem t j = 1. Minimalny czas działania: T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 (n 1) + c 8 (n 1) T (n) = (c 1 + c 2 + c 3 + c 5 + c 8 )n (c 2 + c 3 + c 5 + c 8 ) T (n) = an + b (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 16 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. n t j = n j = j=2 j=2 n(n + 1) 2 1 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. n t j = n j = j=2 j=2 n(n + 1) 2 n (t j 1) = n (j 1) = j=2 j=2 1 n(n 1) 2 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. n t j = n j = j=2 j=2 n(n + 1) 2 n (t j 1) = n (j 1) = j=2 j=2 1 n(n 1) 2 T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 ( c 6 n(n 1) 2 + c 7 n(n 1) 2 + c 8 (n 1) n(n + 1) 2 1) + (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. n t j = n j = j=2 j=2 n(n + 1) 2 n (t j 1) = n (j 1) = j=2 j=2 1 n(n 1) 2 n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 ( 1) + 2 n(n 1) n(n 1) c 6 + c 7 + c 8 (n 1) 2 2 T (n) = ( c 5 2 + c 6 2 + c ) 7 2 n 2 + ( c 1 + c 2 + c 3 + c 5 2 + c 6 2 + c ) 7 2 + c 8 n + (c 2 + c 3 + c 5 + c 8 ) (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek pesymistyczny Przypadek pesymistyczny tablica wejściowa posortowana w kierunku odwrotnym. Porównujemy każdy A[j] z każdym elementem podtablicy A[1...j 1], w takim przypadku t j = j dla j = 2, 3,..., n. n t j = n j = j=2 j=2 n(n + 1) 2 n (t j 1) = n (j 1) = j=2 j=2 1 n(n 1) 2 n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 5 ( 1) + 2 n(n 1) n(n 1) c 6 + c 7 + c 8 (n 1) 2 2 T (n) = ( c 5 2 + c 6 2 + c ) 7 2 n 2 + ( c 1 + c 2 + c 3 + c 5 2 + c 6 2 + c ) 7 2 + c 8 n + (c 2 + c 3 + c 5 + c 8 ) T (n) = an 2 + bn + c (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 17 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. Wybieramy n liczb i stosujemy sortowanie przez wstawianie. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. Wybieramy n liczb i stosujemy sortowanie przez wstawianie. Jak dużo czasu potrzeba na znalezienie miejsca w tablicy A[1... j 1], aby wstawić element A[j]? (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. Wybieramy n liczb i stosujemy sortowanie przez wstawianie. Jak dużo czasu potrzeba na znalezienie miejsca w tablicy A[1... j 1], aby wstawić element A[j]? Średnio połowa elementów tablicy A[1... j 1] jest mniejsza niż A[j], natomiast połowa większa. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. Wybieramy n liczb i stosujemy sortowanie przez wstawianie. Jak dużo czasu potrzeba na znalezienie miejsca w tablicy A[1... j 1], aby wstawić element A[j]? Średnio połowa elementów tablicy A[1... j 1] jest mniejsza niż A[j], natomiast połowa większa. Sprawdzamy zatem średnio połowę elementów podtablicy, czyli t j = j 2. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Analiza złożoności obliczeniowej - przypadek średni Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla dowolnych danych wejściowych. Dla niektórych algorytmów pesymistyczny czas działania występuje dosyć często. Przypadek średni to czas zbliżony do pesymistycznego. Wybieramy n liczb i stosujemy sortowanie przez wstawianie. Jak dużo czasu potrzeba na znalezienie miejsca w tablicy A[1... j 1], aby wstawić element A[j]? Średnio połowa elementów tablicy A[1... j 1] jest mniejsza niż A[j], natomiast połowa większa. Sprawdzamy zatem średnio połowę elementów podtablicy, czyli t j = j 2. Licząc średni czas działania otrzymamy funkcję kwadratową względem rozmiaru danych, podobnie jak w przypadku pesymistycznym. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 18 / 25

Rząd wielkości funkcji Analizując procedurę INSERTION-SORT korzystaliśmy z pewnych uproszczeń. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 19 / 25

Rząd wielkości funkcji Analizując procedurę INSERTION-SORT korzystaliśmy z pewnych uproszczeń. Ignorujemy rzeczywisty koszt każdej instrukcji, używając stałych c i do reprezentacji tych kosztów. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 19 / 25

Rząd wielkości funkcji Analizując procedurę INSERTION-SORT korzystaliśmy z pewnych uproszczeń. Ignorujemy rzeczywisty koszt każdej instrukcji, używając stałych c i do reprezentacji tych kosztów. Pomijamy stałe c i wprowadzając stałe a, b, c. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 19 / 25

Rząd wielkości funkcji Analizując procedurę INSERTION-SORT korzystaliśmy z pewnych uproszczeń. Ignorujemy rzeczywisty koszt każdej instrukcji, używając stałych c i do reprezentacji tych kosztów. Pomijamy stałe c i wprowadzając stałe a, b, c. Rząd wielkości funkcji an 2 + bn + c określa najbardziej znaczący składnik w formule, czyli an 2. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 19 / 25

Rząd wielkości funkcji Analizując procedurę INSERTION-SORT korzystaliśmy z pewnych uproszczeń. Ignorujemy rzeczywisty koszt każdej instrukcji, używając stałych c i do reprezentacji tych kosztów. Pomijamy stałe c i wprowadzając stałe a, b, c. Rząd wielkości funkcji an 2 + bn + c określa najbardziej znaczący składnik w formule, czyli an 2. Pomijamy składniki niższych rzędów. Nieistotne dla dużego n. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 19 / 25

Notacja asymptotyczna - notacja Θ Dla danej funkcji g(n) oznaczamy przez Θ(g(n)) zbiór funkcji (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 20 / 25

Notacja asymptotyczna - notacja Θ Dla danej funkcji g(n) oznaczamy przez Θ(g(n)) zbiór funkcji Θ(g(n)) = f (n): istnieją dodatnie stałe c 1, c 2 i n 0 takie, że 0 c 1 g(n) f (n) c 2 g(n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 20 / 25

Notacja asymptotyczna - notacja Θ Dla danej funkcji g(n) oznaczamy przez Θ(g(n)) zbiór funkcji Θ(g(n)) = f (n): istnieją dodatnie stałe c 1, c 2 i n 0 takie, że 0 c 1 g(n) f (n) c 2 g(n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 20 / 25

Notacja asymptotyczna - notacja Θ Dla danej funkcji g(n) oznaczamy przez Θ(g(n)) zbiór funkcji Θ(g(n)) = f (n): istnieją dodatnie stałe c 1, c 2 i n 0 takie, że 0 c 1 g(n) f (n) c 2 g(n) dla wszystkich n n 0 Mówimy, że g(n) jest asymptotycznie dokładnym oszacowaniem dla f (n). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 20 / 25

Notacja asymptotyczna - notacja Θ Dla danej funkcji g(n) oznaczamy przez Θ(g(n)) zbiór funkcji Θ(g(n)) = f (n): istnieją dodatnie stałe c 1, c 2 i n 0 takie, że 0 c 1 g(n) f (n) c 2 g(n) dla wszystkich n n 0 Mówimy, że g(n) jest asymptotycznie dokładnym oszacowaniem dla f (n). Notacja Θ asymptotycznie ogranicza funkcję od góry i od dołu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 20 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 21 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 21 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 21 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 Dla każdego n n 0, f (n) nie przekracza g(n). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 21 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 Dla każdego n n 0, f (n) nie przekracza g(n). Notacja O asymptotycznie ogranicza funkcję od góry. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 21 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 22 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 Za pomocą notacji O opisujemy często czas działania, badając ogólna strukturę algorytmu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 22 / 25

Notacja asymptotyczna - notacja O Dla danej funkcji g(n) oznaczamy przez O(g(n)) zbiór funkcji O(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 f (n) cg(n) dla wszystkich n n 0 Za pomocą notacji O opisujemy często czas działania, badając ogólna strukturę algorytmu. Struktura podwójnie zagnieżdżonej pętli w algorytmie sortowania przez wstawianie daje górne oszacowanie O(n 2 ) na pesymistyczny czas działania. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 22 / 25

Notacja asymptotyczna - notacja Ω Dla danej funkcji g(n) oznaczamy przez Ω(g(n)) zbiór funkcji (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 23 / 25

Notacja asymptotyczna - notacja Ω Dla danej funkcji g(n) oznaczamy przez Ω(g(n)) zbiór funkcji Ω(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 cg(n) f (n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 23 / 25

Notacja asymptotyczna - notacja Ω Dla danej funkcji g(n) oznaczamy przez Ω(g(n)) zbiór funkcji Ω(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 cg(n) f (n) dla wszystkich n n 0 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 23 / 25

Notacja asymptotyczna - notacja Ω Dla danej funkcji g(n) oznaczamy przez Ω(g(n)) zbiór funkcji Ω(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 cg(n) f (n) dla wszystkich n n 0 Dla każdego n n 0, f (n) jest nie mniejsza niż cg(n). (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 23 / 25

Notacja asymptotyczna - notacja Ω Dla danej funkcji g(n) oznaczamy przez Ω(g(n)) zbiór funkcji Ω(g(n)) = f (n): istnieją dodatnie stałe c i n 0 takie, że 0 cg(n) f (n) dla wszystkich n n 0 Dla każdego n n 0, f (n) jest nie mniejsza niż cg(n). Notacja Ω asymptotycznie ogranicza funkcję od dołu. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 23 / 25

Sortowanie przez wstawianie 300 250 T(n)=8*10-11 *n 2, Dell Precision 5820: Intel(R) Xeon(R) W-2155 CPU 3.30GHz Intel(R) Core(TM) i5-6600k CPU 3.50GHz Yoga 920: Intel(R) Core(TM) i7-8550u CPU 1.80GHz Thinkpad T580: Intel(R) Core(TM) i7-8550u CPU 1.80GHz Dell: Intel(R) Xeon(R) Gold 6146 CPU 3.20GHz AMD Phenom(tm) II X6 1090T Processor T(n)=30*10-11 *n 2, Intel(R) Core(TM)2 Duo CPU P8700 2.53GHz T(n) - czas sortowania [s] 200 150 100 50 0 0e+00 1e+05 2e+05 3e+05 4e+05 5e+05 6e+05 7e+05 8e+05 9e+05 1e+06 n - rozmiar tablicy (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 24 / 25

Sortowanie przez wstawianie - podsumowanie Złożoność obliczeniowa: (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 25 / 25

Sortowanie przez wstawianie - podsumowanie Złożoność obliczeniowa: T o (n) = Ω(n), (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 25 / 25

Sortowanie przez wstawianie - podsumowanie Złożoność obliczeniowa: T o (n) = Ω(n), T sr (n) = Θ(n 2 ), (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 25 / 25

Sortowanie przez wstawianie - podsumowanie Złożoność obliczeniowa: T o (n) = Ω(n), T sr (n) = Θ(n 2 ), T p (n) = O(n 2 ) (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 25 / 25

Sortowanie przez wstawianie - podsumowanie Złożoność obliczeniowa: T o (n) = Ω(n), T sr (n) = Θ(n 2 ), T p (n) = O(n 2 ) Złożoność pamięciowa: działa w miejscu, wymaga O(1) dodatkowej pamięci, tylko key jest poza tablicą. (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 25 / 25