Třídění a vyhledávání Searching and sorting
|
|
- Oldřich Konečný
- před 7 lety
- Počet zobrazení:
Transkript
1 Třídění a vyhledávání Searching and sorting Jan Kybic kybic@fel.cvut.cz / 33
2 Vyhledávání Třídění Třídící algoritmy 2 / 33
3 Vyhledávání Searching Mějme posloupnost (pole) a 0,..., a N 1 Mějme hodnotu q Úkol: zjistit, zda existuje a i = q 3 / 33
4 Vyhledávání Searching Mějme posloupnost (pole) a 0,..., a N 1 Mějme hodnotu q Úkol: zjistit, zda existuje a i = q Varianty Výstup: ano/ne nebo pozice Hledání opakujeme mnohokrát pro stejné a předzpracování Posloupnost a je setříděná. Stochastické hledání 3 / 33
5 Vyhledávání v Pythonu operátor in Obsahuje pole daný prvek? >>> a=[17,20,26,31,44,77,65,55,93] >>> 20 in a True >>> 30 in a False >>> 30 not in a True >>> 20 not in a False 4 / 33
6 Vyhledávání v Pythonu (2) in / not in funguje i pro řetězce, n-tice a podobné typy (containers) >>> "omo" in "Olomouc" # podřetězec True >>> "" in "Olomouc" # prázdný řetězec True >>> "olo" in "Olomouc" # rozlišuje velká/malá písmena False >>> 4 in (3,4) True >>> 3. in (3,4) # na typu nezáleží True 5 / 33
7 Lineární vyhledávání linear/sequential search Procházíme postupně a než narazíme na q def sequential_search(a,q): """ Returns True if a contains q """ for x in a: if x==q: return True return False Image from Miller & Ranum: Problem solving with algothms and data structures 6 / 33
8 Lineární vyhledávání linear/sequential search Procházíme postupně a než narazíme na q def sequential_search(a,q): """ Returns True if a contains q """ for x in a: if x==q: return True return False Počet porovnání: nejméně nejvíce průměrně q a N N N q a 1 N N/2 Složitost O(N), kde N=len(a). Rychleji to nejde, protože na každý prvek a i se musíme podívat. 6 / 33
9 Lineární vyhledávání empirická složitost seq in seq not in Python in Python not in time [s] n Soubor search_experiments.py 7 / 33
10 Binární vyhledávání Binary search Vyhledávání v setříděné posloupnosti Mějme posloupnost (pole) a 1 a 2 a 3 a N 1 a N Mějme hodnotu q Úkol: zjistit, zda existuje a i = q Je vyhledávání v setříděném poli rychlejší? 8 / 33
11 Binární vyhledávání Binary search Hlavní myšlenky Postupně zmenšujeme interval indexů, kde by mohlo ležet q V každém kroku porovnáme q s prostředním prvkem intervalu a podle toho zvolíme jeden z podintervalů. Skončíme, pokud je prvek nalezen, nebo pokud je podinterval prázdný. Image from Miller & Ranum: Problem solving with algothms and data structures 8 / 33
12 Binární vyhledávání implementace def binary_search(a,q): l=0 # first index of the subinterval h=len(a)-1 # last index of the subinterval while l<=h: m=(l+h)//2 # middle point if a[m]==q: return True if a[m]>q: h=m-1 else: l=m+1 return False 9 / 33
13 Binární vyhledávání časová složitost Počet porovnání Počet prvků v intervalu je d = h l + 1 a v první iteraci d = N V každé iteraci se interval d zmenší nejméně na polovinu Po t iteracích je d N2 t Dokud algoritmus běží, musí platit d 1, 1 d N2 t N 2 t t log 2 N Počet porovnání t log 2 N Složitost O(log n) Strategie rozděl a panuj (Divide and conquer) 10 / 33
14 Binární vyhledávání empirická složitost binary in binary not in time [s] n Soubor search_experiments.py 11 / 33
15 Binární vs. sekvenční vyhledávání seq in seq not in binary in binary not in 10-2 time [s] n Vyplatí se, pokud mnohokrát vyhledáváme nad stejným a. 12 / 33
16 Vyhledávání Třídění Třídící algoritmy 13 / 33
17 Třídění Sorting Mějme posloupnost (pole) A = [ a 0,..., a N 1 ] a relaci Najděte takovou permutaci B = [ b 0,..., b N 1 ] pole A, aby b 0 b 1 b N 1. Poznámky: Formy výstupu: Třídění na místě (in place) Vytvoření nového pole B, pole A zůstává nezměněno. Najdeme indexy j1, j 2,..., j N, tak aby b i = a ji (a[j[i]]) Stabilní třídění zachovává pořadí ekvivalentních prvků. 14 / 33
18 Třídění v Pythonu Funkce sorted vrací nové setříděné pole >>> a=[80,43,20,15,90,67,51] >>> sorted(a) [15, 20, 43, 51, 67, 80, 90] Metoda sort setřídí pole na místě (úspornější) >>> a.sort() >>> a [15, 20, 43, 51, 67, 80, 90] 15 / 33
19 Třídění v Pythonu Funkce sorted vrací nové setříděné pole >>> a=[80,43,20,15,90,67,51] >>> sorted(a) [15, 20, 43, 51, 67, 80, 90] Metoda sort setřídí pole na místě (úspornější) >>> a.sort() >>> a [15, 20, 43, 51, 67, 80, 90] Třídění sestupně >>> sorted(a,reverse=true) [90, 80, 67, 51, 43, 20, 15] 15 / 33
20 Třídění řetězců Lze třídit veškeré porovnatelné typy, například řetězce >>> names=["barbora","adam","david","cyril"] >>> sorted(names) [ Adam, Barbora, Cyril, David ] 16 / 33
21 Třídění řetězců Lze třídit veškeré porovnatelné typy, například řetězce >>> names=["barbora","adam","david","cyril"] >>> sorted(names) [ Adam, Barbora, Cyril, David ] Třídění není podle českých pravidel print(sorted(["pan","paze"])) ['pan', 'paze'] print(sorted(["pán","paže"])) ['paže', 'pán'] 16 / 33
22 Třídění n-tic n-tice jsou tříděny postupně podle složek >>> a=[(50,2),(50,1),(40,100),(40,20)] >>> sorted(a) [(40, 20), (40, 100), (50, 1), (50, 2)] 17 / 33
23 Třídění n-tic n-tice jsou tříděny postupně podle složek >>> a=[(50,2),(50,1),(40,100),(40,20)] >>> sorted(a) [(40, 20), (40, 100), (50, 1), (50, 2)] >>> studenti=[("bara",18),("adam",20),... ("David",15),("Cyril",25)] >>> sorted(studenti) [( Adam, 20), ( Bara, 18), ( Cyril, 25), ( David, 15)] 17 / 33
24 Uživatelská třídící funkce Funkce v parametru key transformuje prvky pro třídění. Třídení podle druhé složky dvojice >>> a=[(50,2),(50,1),(40,100),(40,20)] >>> sorted(a,key=lambda x: x[1]) [(50, 1), (50, 2), (40, 20), (40, 100)] >>> studenti=[("bara",18),("adam",20),... ("David",15),("Cyril",25)] >>> sorted(studenti,key=lambda x: x[1]) [( David, 15), ( Bara, 18), ( Adam, 20), ( Cyril, 25)] 18 / 33
25 Uživatelská třídící funkce (2) Třídění bez ohledu na velikost písmen >>> s=["python","quido","abeceda","zahrada"] >>> sorted(s) [ Python, Quido, abeceda, zahrada ] >>> sorted(s,key=lambda x: x.lower()) [ abeceda, Python, Quido, zahrada ] 19 / 33
26 Vyhledávání Třídění Třídící algoritmy 20 / 33
27 Třídící algoritmy Třídění probubláváním (bubble sort) Třídění zatřiďováním (insertion sort) Třídění výběrem (selection sort) Shell sort Třídění spojováním (merge sort) Quick sort sort, sorted 21 / 33
28 Řazení probubláváním Bubble sort Vyměňuje sousední prvky ve špatném pořadí. Jeden průchod: Image from Miller & Ranum: Problem solving with algothms and data structures 22 / 33
29 Řazení probubláváním implementace Bubble sort def bubble_sort(a): """ sorts array a in-place in ascending order""" for i in range(len(a)-1,0,-1): # i=n a[i+1:] is already sorted for j in range(i): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] # exchange 23 / 33
30 Řazení probubláváním implementace Bubble sort def bubble_sort(a): """ sorts array a in-place in ascending order""" for i in range(len(a)-1,0,-1): # i=n a[i+1:] is already sorted for j in range(i): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] # exchange Složitost Vnější smyčka proběhne N 1 N-krát Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max. N-krát Počet porovnání je tedy max. N 2 složitost O(N 2 ) Počet výměn je velký, element musí probublat nakonec 23 / 33
31 Řazení probubláváním vylepšení Pokud neproběhla žádná výměna, je pole setříděné. def bubble_sort(a): """ sorts array a in-place in ascending order""" for i in range(len(a)-1,0,-1): # i=n a[i+1:] is already sorted exchanged=false # exchanges in this iteration? for j in range(i): if a[j]>a[j+1]: a[j],a[j+1]=a[j+1],a[j] # exchange exchanged=true if not exchanged: break 24 / 33
32 Třídění probubláváním kontrola >>> a=[31, 60, 23, 91, 62, 65, 59, 92, 42, 74] >>> bubble_sort(a) >>> a [23, 31, 42, 59, 60, 62, 65, 74, 91, 92] 25 / 33
33 Třídění probubláváním kontrola >>> a=[31, 60, 23, 91, 62, 65, 59, 92, 42, 74] >>> bubble_sort(a) >>> a [23, 31, 42, 59, 60, 62, 65, 74, 91, 92] Správný test je důkladnější: def test_sort(f=bubble_sort): for j in range(100): n=100 a=[random.randrange(100000) for i in range(n)] f(a) for i in range(n-1): assert(a[i]<=a[i+1]) print(f. name," sort test passed") 25 / 33
34 Třídění zatřiďováním Insertion sort Prvek a i zatřídíme do již setříděných a 0,..., a i 1 26 / 33
35 Třídění zatřiďováním implementace Insertion sort def insertion_sort(a): """ sorts array a in-place in ascending order""" for i in range(1,len(a)): # a[0:i] is sorted val=a[i] j=i while j>0 and a[j-1]>val: a[j]=a[j-1] j-=1 a[j]=val 27 / 33
36 Třídění zatřiďováním implementace Insertion sort def insertion_sort(a): """ sorts array a in-place in ascending order""" for i in range(1,len(a)): # a[0:i] is sorted val=a[i] j=i while j>0 and a[j-1]>val: a[j]=a[j-1] j-=1 a[j]=val Složitost Vnější smyčka proběhne N 1 N-krát. Vnitřní smyčka proběhne max. i < N krát. Počet porovnání je tedy max. N 2 složitost O(N 2 ). Nepoužívá výměny, ale posun (rychlejší). Přirozeně detekuje setříděné pole. 27 / 33
37 Třídění zatřiďováním kontrola >>> a=[43, 22, 42, 7, 58, 85, 48, 82, 80, 1] >>> insertion_sort(a) >>> a [1, 7, 22, 42, 43, 48, 58, 80, 82, 85] 28 / 33
38 Třídění výběrem Selection sort Vybere maximum mezi a 0,..., a N 1, to umístí do a N 1. Vybere maximum mezi a 0,..., a N 2, to umístí do a N / 33
39 Třídění výběrem implementace Selection sort def selection_sort(a): """ sorts array a in-place in ascending order""" for i in range(len(a)-1,0,-1): # find out what should go to a[i] max_pos=0 # index of the maximum for j in range(1,i+1): if a[j]>a[max_pos]: max_pos=j a[i],a[max_pos]=a[max_pos],a[i] 30 / 33
40 Třídění výběrem implementace Selection sort def selection_sort(a): """ sorts array a in-place in ascending order""" for i in range(len(a)-1,0,-1): # find out what should go to a[i] max_pos=0 # index of the maximum for j in range(1,i+1): if a[j]>a[max_pos]: max_pos=j a[i],a[max_pos]=a[max_pos],a[i] Složitost Vnější smyčka proběhne N 1 N-krát Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max. N-krát Počet porovnání je tedy max. N složitost O(N 2 ) Pouze jedna výměna v každé vnější smyčce 30 / 33
41 Třídění výběrem kontrola >>> a=[60, 46, 31, 69, 45, 11, 43, 14, 61, 36] >>> selection_sort(a) >>> a [11, 14, 31, 36, 43, 45, 46, 60, 61, 69] 31 / 33
42 Porovnání rychlosti Náhodná pole bubble_sort selection_sort insertion_sort python_sort time [s] N 32 / 33
43 Porovnání rychlosti Náhodná pole bubble_sort selection_sort insertion_sort python_sort time [s] N 32 / 33
44 Porovnání rychlosti Setříděné pole bubble_sort selection_sort insertion_sort python_sort 10 time [s] N 33 / 33
45 Porovnání rychlosti Setříděné pole bubble_sort selection_sort insertion_sort python_sort time [s] N 33 / 33
Spojový seznam. Jan Kybic.
Spojový seznam Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 25 Složitost operací u lineárních datových struktur v Pythonu operace zásob. fronta pole pole řetězce přidej na začátek
Rekurze a rychlé třídění
Rekurze a rychlé třídění Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 54 Rekurze Rychlé třídění 2 / 54 Rekurze Recursion Rekurze = odkaz na sama sebe, definice za pomoci sebe
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Třídění, vyhledávání Daniela Szturcová
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově
5. Vyhledávání a řazení 1
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
Základy řazení. Karel Richta a kol.
Základy řazení Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická
Sada 1 - Základy programování
S třední škola stavební Jihlava Sada 1 - Základy programování 17. Řadící algoritmy Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2
NPRG030 Programování I, 2018/19 1 / :03:07
NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2014 1 / 48 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý
Algoritmizace řazení Bubble Sort
Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,
A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.
A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1 Selection sort Neseřazeno Seřazeno Start T O U B J R M A K D Z E min
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) {
Vyhledání extrému v poli použito v algoritmech řazení hledání maxima 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) max = pole[i];
Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění
Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double
Stromy. Jan Kybic.
Stromy Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 44 Stromy Binární vyhledávací stromy Množiny a mapy 2 / 44 Strom (Tree) Strom skládá se s uzlů (nodes) spojených hranami (edges).
Časová složitost / Time complexity
Časová složitost / Time complexity Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 24 Složitost algoritmů Algorithm complexity Časová a paměťová složitost Trvání výpočtu v závislosti
Základy algoritmizace a programování
Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;
DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3
DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),
Standardní algoritmy vyhledávací.
Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární
Maturitní téma: Programovací jazyk JAVA
Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek
IB111 Úvod do programování 1 / 62
Vyhledávání, řazení, složitost IB111 Úvod do programování 2016 1 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota x Jak na to? 2 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota
Algoritmy I. Třídění ALGI 2010/2011
Algoritmy I Třídění 1 ALGI 2010/2011 Třídící problém Je dána množina A = {a 1,a 2,...,a n }. Je potřebné najít permutaci π těchto n prvků, která zobrazuje danou posloupnost do neklesající posloupnosti
Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem
Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel
IB111 Základy programování Radek Pelánek 1 / 61
Vyhledávání, řazení, složitost IB111 Základy programování Radek Pelánek 2017 1 / 61 ... ale nejdřív Praktické rady: čtení chybových hlášek časté chyby 2 / 61 Čtení chybových hlášek Traceback (most recent
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:
Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.
Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.
Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká
Bubble sort. příklad. Shaker sort
Bubble sort pseudokód function bubblesort(array a) for i in 1 -> a.length - 1 do for j in 1 -> a.length - i - 1 do if a[j] < a[j+1] prohoď(a[j], a[j+1]); //razeni od nejvyssiho function bubblesort(int[]
ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení
ALG Radix sort (přihrádkové řazení) Counting sort Přehled asymptotických rychlostí jednotlivých řazení Ilustrační experiment řazení Radix sort Neseřazeno Řaď podle. znaku Cbb DaD adb DCa CCC add DDb adc
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
Pattern matching Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CI jako výuková strategie na vysoké škole Pattern matching porovnávání vzorů Hledání
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??
vyhledávací stromové struktury
vyhledávací algoritmy Brute Force Binary Search Interpolation Search indexové soubory Dense index, Sparse index transformační funkce Perfect Hash, Close Hash Table, Open Hash Table vyhledávací stromové
Konečný automat. Jan Kybic.
Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s
Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace
Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:
Složitost UPR 2008/09 1
Složitost UPR 2008/09 1 Ohodnocení algoritmu Jak porovnávat efektivitu algoritmů? Požadavky na paměť Požadavky na rychlost výpočtu Asymptotická složitost UPR 2008/09 2 Měření algoritmu Dvě míry: čas x
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky
Dynamic programming. Optimal binary search tree
The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamic programming Optimal binary search tree Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The complexity
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í
Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít
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
Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat Autor:
Základy algoritmizace. Hašování
Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):
IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
Časová složitost algoritmů
Časová složitost algoritmů Důležitou vlastností algoritmu je časová náročnost výpočtů provedené podle daného algoritmu Ta se nezískává měřením doby výpočtu pro různá data, ale analýzou algoritmu, jejímž
Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)
Algoritmy vyhledávání a řazení Zatím nad lineární datovou strukturou (polem) Vyhledávací problém Vyhledávání je dáno Universum (množina prvků) U je dána konečná množina prvků X U (vyhledávací prostor)
Rozptylovací tabulky
Rozptylovací tabulky Hash tables Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 31 Rozptylovací tabulka Hash table Rozptylovací tabulka = implementace množiny / asociativního pole
Úvod do programování 6. hodina
Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection
Algoritmizace a programování
Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický
Dynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.
Řazení Problém řazení: Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria. Až 30% času běžného počítače. Příklad: Mějme zjistit zda jsou v posloupnosti prvků, například celých čísel,
3 Algoritmy řazení. prvku a 1 je rovněž seřazená.
Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A ... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka()
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
10. Složitost a výkon
Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 10 1 Základy algoritmizace 10. Složitost a výkon doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří
Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)
13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací
Dynamické programování
Dynamické programování Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 26 Memoizace Dynamické programování 2 / 26 Memoizace (Memoization/caching) Pro dlouhotrvající funkce f (x) Jednou
Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41
Obsah přednášky Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Analýza algoritmu Proč vůbec dělat analýzu? pro většinu problémů existuje několik různých přístupů aby
Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi
Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, s.r.o. haken@havit.cz, @RobertHaken Základní algoritmy v praxi Agenda Intro Řazení Vyhledávání Datové struktury LINQ to Objects Intro Asymptotická
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
3 Vyhledávání, třídící algoritmy
3 Vyhledávání, třídící algoritmy Vyhledávání Nechme zelináře zelinářem a pojd me se spolu podívat na jinou úlohu. Tentokrát budeme chtít napsat spellchecker. Pro začátek bude velmi jednoduchý. Dostane
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
Stromy. Jan Hnilica Počítačové modelování 14
Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A
Rekurentní rovnice, strukturální indukce
Rekurentní rovnice, strukturální indukce Jiří Velebil: A7B01MCS 26. září 2011: 1/20 Příklad (Parketáž triminy z minulé přednášky) P(n) = počet parket k vyparketování místnosti rozměru n 1 P(1) = 1. 2 P(n
Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012
Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18
Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.
Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu
Pole a kolekce. v C#, Javě a C++
Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java
ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech
ABALG 5/ ALG Vícedimenzionální data Řazení vícedimenzionálních dat Experimentální porovnání řadících algoritmů na vícedimenzionálních datech ABALG 5/ Vícedimenzionální data..7.. -.. d = 6 5 6.....7.. -.....9
TGH05 - Problém za milion dolarů.
TGH05 - Problém za milion dolarů. Jan Březina Technical University of Liberec 20. března 2012 Časová složitost algoritmu Závislost doby běhu programu T na velikosti vstupních dat n. O(n) notace, standardní
Hledání k-tého nejmenšího prvku
ALG 14 Hledání k-tého nejmenšího prvku Randomized select CLRS varianta Partition v Quicksortu 0 Hledání k-tého nejmenšího prvku 1. 2. 3. Seřaď seznam/pole a vyber k-tý nejmenší, složitost (N*log(N)). Nevýhodou
Anotace. pointery (pars prima). Martin Pergel,
Anotace Základní třídicí algoritmy, jednotky oddělený překlad, pointery (pars prima). Problém třídění jednoduché třídicí algoritmy Bublinkové třídění (BubbleSort), zatřid ování alias třídění přímým vkládáním
Šablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA STROJNÍHO INŽENÝRSTVÍ ÚSTAV AUTOMATIZACE A INFORMATIKY FACULTY OF MECHANICAL ENGINEERING INSTITUTE OF AUTOMATION AND COMPUTER SCIENCE
Různé algoritmy mají různou složitost
/ 1 Různé algoritmy mají různou složitost 1/ 1 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená?? 2/ 1 Asymptotická složitost y y x x Každému algoritmu
Časová složitost algoritmů, řazení a vyhledávání
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Časová složitost algoritmů, řazení a vyhledávání BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta
Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí
Zadání k 2. programovacímu testu
Zadání k 2. programovacímu testu Úvod do programovacích jazyků (Java) 4.12.2008 00:08 Michal Krátký Katedra informatiky Technická univerzita Ostrava Historie změn, příklady: 21 Poznámka: Pokud není řečeno
Techniky návrhu algoritmů
Techniky návrhu algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
13. Třídící algoritmy a násobení matic
13. Třídící algoritmy a násobení matic Minulou přednášku jsme probírali QuickSort, jeden z historicky prvních třídících algoritmů, které překonaly kvadratickou složitost aspoň v průměrném případě. Proč
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
ˇ 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
řazení rychlejší než kvadratické Karel Horák, Petr Ryšavý 20. dubna 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Která z následujících posloupností představuje haldu uloženou v poli? 1. 9 5 4 6 3 2. 5 4
Praktická cvičení algoritmů
UČEBNÍ TEXTY OSTRAVSKÉ UNIVERZITY Přírodovědecká fakulta Praktická cvičení algoritmů Hashim Habiballa Ostravská Univerzita 2006 Praktická cvičení algoritmů KIP/XPOP1 distanční studijní opora RNDr. PaedDr.
PG 9.5 novinky ve vývoji aplikací
PG 9.5 novinky ve vývoji aplikací P2D2 2016 Antonín Houska 18. února 2016 Část I GROUPING SETS, ROLLUP, CUBE Agregace Seskupení řádků tabulky (joinu) do podmnožin podle určitého kĺıče. Za každou podmnožinu
SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů
SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list
Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha
Vyhodnocování dotazů slajdy k přednášce NDBI001 Jaroslav Pokorný MFF UK, Praha pokorny@ksi.mff.cuni.cz Časová a prostorová složitost Jako dlouho trvá dotaz? CPU (cena je malá; snižuje se; těžko odhadnutelná)
Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010
Pokročilé haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (I-EFA) ZS 2010/11,
Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj
Anotace Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj Direktivy překladače Překladač kontroluje plno věcí, například: zda nekoukáme za konec
Základní informace o předmětu Otázka:
Základní informace o předmětu Otázka: Proč vůbec porovnávat algoritmy? Vlastnosti algoritmů přirozenost a stabilita algoritmu časová náročnost algoritmu asymetrická a asymptotická časová náročnost algoritmů
Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky
Komprese dat Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI přednášky Statistické metody Jan Outrata (Univerzita Palackého v Olomouci) Komprese dat Olomouc, únor březen 2016 1 / 23 Tunstallův
Elegantní algoritmus pro konstrukci sufixových polí
Elegantní algoritmus pro konstrukci sufixových polí 22.10.2014 Zadání Obsah Zadání... 3 Definice... 3 Analýza problému... 4 Jednotlivé algoritmy... 4 Algoritmus SA1... 4 Algoritmus SA2... 5 Algoritmus
III/2 Inovace a zkvalitnění výuky prostřednictvím ICT
Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň
Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky
Komprese dat Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI přednášky Slovníkové metody Jan Outrata (Univerzita Palackého v Olomouci) Komprese dat Olomouc, únor březen 2016 1 / 23 Slovníkové
PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2
PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C
Datové struktury 2: Rozptylovací tabulky
Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy
Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39