Asymptotická složitost algoritmů

Podobné dokumenty
Různé algoritmy mají různou složitost

Algoritmy I, složitost

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Časová složitost / Time complexity

Časová složitost algoritmů

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

COMPLEXITY

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Digitální učební materiál

Algoritmizace řazení Bubble Sort

Digitální učební materiál

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

IB111 Úvod do programování skrze Python

Tato tematika je zpracována v Záznamy přednášek: str

Základní informace o předmětu Otázka:

ALGORITMY A DATOVÉ STRUKTURY

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

IB109 Návrh a implementace paralelních systémů. Analytický model paralelních programů. RNDr. Jiří Barnat, Ph.D.

Rekurze a rychlé třídění

Časová a prostorová složitost algoritmů

Základy algoritmizace, návrh algoritmu

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

MIDTERM D. Příjmení a jméno:

Pole a kolekce. v C#, Javě a C++

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

OPTIMALIZACE. (přehled metod)

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Digitální učební materiál

Prohledávání do šířky = algoritmus vlny

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Hledání k-tého nejmenšího prvku

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

2. lekce Algoritmus, cyklus Miroslav Jílek

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

10. Složitost a výkon

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Datové struktury 2: Rozptylovací tabulky

Řídicí struktury. alg3 1

13. Třídící algoritmy a násobení matic

Základy algoritmizace

IB111 Úvod do programování skrze Python

Aplikovaná matematika I

Prioritní fronta, halda

Elegantní algoritmus pro konstrukci sufixových polí

Sada 1 - Základy programování

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Úvod do problematiky

Úvod do programování 10. hodina

Časová složitost algoritmů, řazení a vyhledávání

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Používejte jen ty konstrukty jazyka C/C++, které jsme doposud probírali (nepoužívejte STL apod.)

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

Úloha č. 2 - Kvantil a typická hodnota. (bodově tříděná data): (intervalově tříděná data): Zadání úlohy: Zadání úlohy:

Vysvětlete funkci a popište parametry jednotlivých komponent počítače a periferních zařízení.

Složitosti základních operací B + stromu

Téma 8: Optimalizační techniky v metodě POPV

Architektury počítačů a procesorů

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

IAJCE Přednáška č. 12

2. Složitost, grafové algoritmy (zapsal Martin Koutecký)

Pohled do nitra mikroprocesoru Josef Horálek

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

VZOR. Vzor přijímacího testu do magisterského studia oboru Otevřená informatika

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

1 Nejkratší cesta grafem

Určování složitosti algoritmů. Základy diskrétní matematiky, BI-ZDM

Aritmetika s velkými čísly na čipové kartě

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Obsah 10. přednášky: Jak bude probíhat zkouška?! Podrobné informace:

Statistika pro geografy

Algoritmizace prostorových úloh

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie

Stromy, haldy, prioritní fronty

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Static Load Balancing Applied to Time Dependent Mechanical Problems

Cvičení MI-PRC I. Šimeček

8.1. Separovatelné rovnice

Úvod do programování 7. hodina

6 Příkazy řízení toku

Základy řazení. Karel Richta a kol.

a a

NPRG030 Programování I, 2018/19 1 / :03:07

TGH05 - Problém za milion dolarů.

Rekurze - tvorba a zápis algoritmů v jazyce Pascal

Transkript:

Semestrální projekt 1 Y14TED Asymptotická složitost algoritmů Autor: Antonín DANĚK

Osnova Slide 2 Co je to složitost algoritmu? Jak se počítá složitost algoritmu? Smysl přesného výpočtu složitosti algoritmu aneb Zjednodušení Zjednodušení aneb Asymptotická složitost algoritmů Ukázka lineární versus kvadratický algoritmus Řád růstu funkcí Složitosti řadících algoritmů

Co je to složitost algoritmu? Slide 3 Co je to algoritmus? Postup práce (kuchařka, Java metoda) Vlastnosti (konečnost) Dva algoritmy vykonají stejnou práci, ale trvají různě dlouho. Proč? Mají různou složitost Vykonávají různý počet operací

Jak se počítá složitost algoritmu? Slide 4 Složitost algoritmu se vyjadřuje počtem provedených základních operací. Aritmetické operace Podmínky (testy) Přesuny v paměti static int count=0; for(int i=0; i<pole.length; i++) { if(pole[i]<=i) count++; } Složitost tohoto kódu je: 1 + N + N + 0..N Nejhorší varianta: 3N + 1 Nejlepší varianta: 2N + 1

Smysl přesného výpočtu složitosti algoritmu aneb Zjednodušení Čím výkonnější procesory nám hardwareáři dávají, tím méně softwareáři optimalizují programy pro rychlost. Slide 5 Předpokládáme, že je jedna operace zabere procesoru 1μs (10^-6 vteřiny). Ve skutečnosti je obvykle situace ještě několikrát lepší (4 jádrové 3GHz procesory).» Program musí být pro běh na více jádrech optimalizovaný. Milion operací proběhne za 1s Nemá smysl počítat jednotlivé operace. Nemá smysl počítat ani 10ky, 100ky, 1000ce, 10 000ce (či 100 000ce) operací.

Slide 6 Zjednodušení aneb Asymptotická složitost algoritmů Obvykle automaticky mluvíme o asymptotické složitosti Zanedbáme operace nezávislé na datech Zanedbáme dílčí jednodušší části algoritmu Zanedbáme multiplikační konstanty static int count=0; for(int i=0; i<pole.length; i++) { if(pole[i]<=i) count++; } Složitost tohoto kódu je: 1 + N + N + 0..N Nejhorší varianta: 3N + 1 Nejlepší varianta: 2N + 1 Asymptotická složitost tohoto kódu je: N

Ukázka lineární versus kvadratický algoritmus - kvadratický Slide 7 Máme dvě pole. Program zjistí součet prvků prvního pole (sumpole();) a do proměnné count uloží, kolikrát se takové číslo nachází v druhém poli. POMALÉ (N^2): for(int i=0; i<pole2.length; i++) { if(sumpole(pole1)==pole2[i]) count++; } Metoda sumpole(); projde celé první pole její složitost je N. Náš cyklus prochází druhé pole a v každé iteraci volá tuto metodu. N krát tedy voláme metodu o složitosti N (Předpokládáme stejnou velikost obou polí.) N * N = N^2

Ukázka lineární versus kvadratický algoritmus - lineární Slide 8 Máme dvě pole. Program zjistí součet prvků prvního pole (sumpole();) a do proměnné count uloží, kolikrát se takové číslo nachází v druhém poli. RYCHLÉ (N): int suma = sumpole(pole1); for(int i=0; i<pole2.length; i++) { if(suma==pole2[i]) count++; } Zásadní rozdíl: Sumu prvního pole jsme předpočítali a uložili do proměnné. Metodu sumpole(); tedy voláme pouze jednou a asymptotická složitost tohoto algoritmu je N.

Ukázka lineární versus kvadratický algoritmus - výsledek Slide 9 Asymptotická složitost algoritmu by se dala vyložit jako řád růstu času v závislosti na datech. Pro milionové N: už není parabola viditelná červený algoritmus proběhne za 1s modý algoritmus proběhne za 11 dní

Řád růstu funkcí* Množina omega (Ω) funkce které od určitého bodu rostou rychleji než f(x) (nebo jejich násobek) Slide 10 Množina omikron (Ο) funkce které od určitého bodu rostou pomaleji než f(x) (nebo jejich násobek) Množina theta (Θ) funkce které rostou stejně rychle jako f(x) N ϵ Ο(N^2) N^2 ϵ Ω(N) log(n) ϵ Ο(N) N*log(N) ϵ Ω(N) * Tento slide je extrémně nudný.

Tabulka rychlostí (jestliže jedna operace zabere procesoru 1μs) Ještě rychleji než 2^N roste N! Slide 11 Vstupní data Asymptotická složitost 1 N N*log(N) N^2 N^3 2^N 1 1μs 1μs 1μs 1μs 1μs 2μs 10 1μs 10μs 10μs 100μs 1ms 1ms 100 1μs 100μs 200μs 10ms 1s 3*10^11 dob ledových 1000 1μs 1ms 3ms 1s 16,6 min ehm 1000000 1μs 1s 6s 11,4 dne 31 709 let HeapSort BubbleSort Tabulka vychází z: http:/ / cs.wikipedia.org/ wiki/ Asymptotická_složitost

Složitosti řadících algoritmů Slide 12 BubbleSort : N^2 InsertionSort : N^2 SelectionSort : N^2 QuickSort : N^2 MergeSort : N*log(N) HeapSort : N*log(N) Velmi často potřebujeme seřadit nějaké prvky. Je velmi vhodné, naučit se používat efektivní algoritmy.

Konec Slide 13 Děkuji za pozornost. Máte-li dotaz ptejte se. Zdroje: hlava, Wikipedia