5. Vyhledávání a řazení 1

Podobné dokumenty
10. Složitost a výkon

IB111 Úvod do programování skrze Python

Algoritmizace prostorových úloh

Třídění a vyhledávání Searching and sorting

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

Algoritmy I, složitost

IB111 Úvod do programování skrze Python

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

Algoritmizace řazení Bubble Sort

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

Datové struktury 2: Rozptylovací tabulky

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

Sada 1 - Základy programování

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

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Časová složitost algoritmů

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

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

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

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

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

Spojový seznam. Jan Kybic.

IB111 Úvod do programování 1 / 62

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

IB111 Základy programování Radek Pelánek 1 / 61

Časová a prostorová složitost algoritmů

11. Přehled prog. jazyků

Bubble sort. příklad. Shaker sort

Algoritmizace a programování

Stromy, haldy, prioritní fronty

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Dynamické datové struktury III.

Časová složitost / Time complexity

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Základní datové struktury III: Stromy, haldy

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

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Prioritní fronta, halda

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

Základy algoritmizace a programování

Základy algoritmizace 4. Problémy, algoritmy, data

Algoritmy a datové struktury

PB161 Programování v jazyce C++ Přednáška 3

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Standardní algoritmy vyhledávací.

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

Databáze, sítě a techniky programování X33DSP

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

vyhledávací stromové struktury

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Vzdálenost uzlů v neorientovaném grafu

Algoritmy I. Třídění ALGI 2010/2011

3. Řízení běhu programu

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

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

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

Rekurze a rychlé třídění

Programování v Pythonu

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

Stromy. Jan Kybic.

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Digitální učební materiál

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

PB161 Programování v jazyce C++ Přednáška 3

Algoritmizace prostorových úloh

Rozptylovací tabulky

Programování v C++ 2, 8. cvičení

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

Složitost UPR 2008/09 1

Abstraktní datové typy

Digitální učební materiál

Spojová implementace lineárních datových struktur

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

Dynamické datové struktury IV.

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Da D to t v o é v ty t py IB111: Datové typy

Základy vytěžování dat

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)

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

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

ALGORITMY A DATOVÉ STRUKTURY

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Základy algoritmizace. Hašování

Maturitní témata Školní rok: 2015/2016

Algoritmy výpočetní geometrie

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Dynamické programování. Optimální binární vyhledávací strom

Algoritmizace prostorových úloh

Maturitní téma: Programovací jazyk JAVA

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Binární vyhledávací stromy II

Transkript:

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 1 Základy algoritmizace 5. Vyhledávání a řazení 1 doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 2 Základy algoritmizace Dnes: Vyhledávání v poli Řazení pole Insertion sort Selection sort Bubble sort

Vyhledávání Úloha Najděte prvek s danou hodnotou/vlastností v poli. Řešení Vstup: pole array o velikosti n, hledaná vlastnost val Výstup: prvek pole splňující hledané kritérium Výstup (alternativní): True pokud pole obsahuje prvek Algoritmus: Je v tom rozdíl? def searchlinear(array, val): for i in array: elem = array[i] if elem == val: return elem Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 3

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 4 Vyhledávání Podobné úlohy Najděte největší číslo v poli celých čísel Najděte nejmenší číslo Najděte k-té největší číslo Najděte nejmenší číslo Sekvenční vyhledávání Nejde to lépe?

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 5 Vyhledávání Hledání binárním půlením Rychlejší prohledání Vyhledávací pole musí být uspořádané def binsearch(array, val): l, r = 0, len(array) - 1 while r>=l: i = int((l + r)/2) if val == array[i]: return array[i] if val > array[i]: l = i + 1 else: r = i - 1 Alternativně funkce vrací True/False, index i, atd.

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 6 Vyhledávání Zobecnění klíč-hodnota Obecně hledáme prvky podle klíče který je asociován s daným prvkem V dnešní přednášce uvažujeme jako klíč číselnou hodnotu prvku V Pythonu můžeme použít tuple (klíč, hodnota) Pro porovnávání lze definovat funkce value, equals, greater, atp. pro libovolné struktury hodnot (objektů) Uvažujme, že hledané prvky lze porovnávat pomocí operátorů >, <, ==

Jak pole uspořádat? Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 7

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 8 Řazení Motivace urychlení vyhledávání dotazů A neprázdná posloupnost prvků a 1 a n A délka posloupnosti val a i hodnota prvku a i pro porovnání Posloupnost je seřazená právě tehdy, když A < 2, A 2, val(a 1 ) val a 2 a posloupnost a 2 a n neobsahuje prvek a 1 a je seřazená

Řazení Dle způsobu uložení Vnitřní řazení vs. vnější řazení Dle způsobu využití klíčů Adresní řazení vs. asociativní řazení Kategorie řazení Vkládáním Výběrem Výměnou Stabilní algoritmus řazení pokud se relativní pořadí prvků se shodnou hodnotou nemění v průběhu řazení Metriky kvality počet porovnání C(n), počet přesunů M(n), paměťová náročnost S(n) Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 9

Řazení vkládáním Insertion sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 10

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 11 Insert Sort Řazení přímým vkládáním for i 2, n vlož a i na patřičné místo mezi a 1,..., a i def insertsort(array): for i in range(1, len(array)): currentvalue = array[i] position = i while position>0 and array[position-1]>currentvalue: array[position]=array[position - 1] position = position-1 array[position]=currentvalue

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 12

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 13

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 14

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 15

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 16

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 17

Insert Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 18

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 19 Insert Sort Řazení přímým vkládáním for i 2, n vlož a i na patřičné místo mezi a 1,..., a i def insertsort(array): for i in range(1, len(array)): currentvalue = array[i] position = i while position>0 and array[position-1]>currentvalue: array[position]=array[position - 1] position = position-1 array[position]=currentvalue

Řazení výběrem Selection sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 20

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 21 Select Sort Řazení přímým výběrem for i 1, n najdi index k nejmenšího prvku v a i,..., a n, a k = min a i,..., a n, zaměň prvky a i, a k def selectsort(array): for i in range(len(array)): least = i for k in range(i + 1, len(array)): if array[k] < array[least]: least = k array[least], array[i] = array[i],array[least]

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 22

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 23

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 24

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 25

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 26

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 27

Select Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 28

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 29 Select Sort Řazení přímým výběrem for i 1, n najdi index k nejmenšího prvku v a i,..., a n, a k = min a i,..., a n, zaměň prvky a i, a k def selectsort(array): for i in range(len(array)): least = i for k in range(i + 1, len(array)): if array[k] < array[least]: least = k array[least], array[i] = array[i],array[least]

Řazení výměnou Bubble sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 30

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 31 Bubble Sort Maximální prvek probublává na i-tou pozici, kde i=n, n-1,, 1 def bubblesort(array): for last in range(len(array)-1, 0, -1): for i in range(last): if array[i]>array[i+1]: array[i],array[i+1]=array[i+1],array[i]

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 32

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 33

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 34

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 35

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 36

Bubble Sort Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 37

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 38 Bubble Sort Maximální prvek probublává na i-tou pozici, kde i=n, n-1,, 1 def bubblesort(array): for last in range(len(array)-1, 0, -1): for i in range(last): if array[i]>array[i+1]: array[i],array[i+1]=array[i+1],array[i]

Který je lepší? Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 39

Řazení Porovnání algoritmů Časová náročnost (best, average, worst) Porovnávací algoritmy nemohou být lepší než n log n Paměťová náročnost (memory) Stabilita řazení Vše v big O notaci Více se tomuto tématu budeme věnovat v druhé půlce semestru Algoritmus Best Average Worst Memory Stable Insertion sort n 2 n 2 n 2 1 Yes Selection sort n 2 n 2 n 2 1 No Bubble sort n n 2 n 2 1 Yes Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 40

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 41 Základy algoritmizace Dnes: Vyhledávání v poli Lineární vyhledávání Binární vyhledávání Řazení pole Insertion sort Selection sort Bubble sort Příště pokročilejší datové struktury