Vyhledávání, zejména rozptylování
|
|
- Eduard Jelínek
- před 8 lety
- Počet zobrazení:
Transkript
1 Datové struktury a algoritmy Část 11 Vyhledávání, zejména rozptylování Petr Felkel
2 Topics Vyhledávání Rozptylování (hashing) Rozptylovací funkce Řešení kolizí Zřetězené rozptylování Otevřené rozptylování Linear Probing Double hashing DSA 2
3 Slovník - Dictionary Řada aplikací potřebuje dynamickou množinu s operacemi: Search, Insert, Delete = slovník Př. Tabulka symbolů překladače identifikátor typ adresa suma int 0xFFFFDC DSA 3
4 Vyhledávání Porovnáváním klíčů (log n) Nalezeno, když klíč_prvku = hledaný klíč např. sekvenční vyhledávání, BVS,... Indexováním klíčem (přímý přístup) (1) klíč je přímo indexem (adresou) rozsah klíčů ~ rozsahu indexů Rozptylováním průměrně (1) výpočtem adresy z hodnoty klíče asociativní adresní vyhledávání DSA 4
5 Rozptylování - Hashing = kompromis mezi rychlostí a spotřebou paměti času - sekvenční vyhledávání paměti - přímý přístup (indexování klíčem) málo času i paměti - hashing - velikost tabulky reguluje čas vyhledání DSA 5
6 Rozptylování - Hashing Konstantní očekávaný čas pro vyhledání a vkládání (search and insert)!!! Něco za něco: čas provádění ~ délce klíče není vhodné pro operace výběru podmnožiny a řazení (select a sort) DSA 6
7 Rozptylování použité klíče K U možné klíče = Universum klíčů Rozptylování vhodné pro K << U K množina použitých klíčů U universum klíčů DSA 7
8 U 10 K Rozptylování h(10) h(2) h(31)? h(k) h(21) Dvě fáze M-1 1. Výpočet rozptylovací funkce h(k) (h(k) vypočítá adresu z hodnoty klíče) 2. Vyřešení kolizí h(31)... kolize: index 1 již obsazen... DSA 8
9 1. Výpočet rozptylovací funkce h(k) DSA 9
10 Rozptylovací funkce h(k) Zobrazuje množinu klíčů K U do intervalu adres A = <a min, a max >, obvykle <0,M-1> U >> K ~= A (h(k) Vypočítá adresu z hodnoty klíče) Synonyma: k 1 k 2, h(k 1 ) = h(k 2 ) = kolize DSA 10
11 Rozptylovací funkce h(k) Je silně závislá na vlastnostech klíčů a jejich reprezentaci v paměti Ideálně: výpočetně co nejjednodušší (rychlá) aproximuje náhodnou funkci využije rovnoměrně adresní prostor generuje minimum kolizí proto: využívá všechny složky klíče DSA 11
12 Rozptylovací funkce h(k) -příklady Příklady fce h(k) pro různé typy klíčů reálná čísla celá čísla bitová řetězce Chybná rozptylovací funkce DSA 12
13 Rozptylovací funkce h(k)-příklady Pro reálná čísla z intervalu <0, 1> multiplikativní: h(k,m) = round( k * M ) neoddělí shluky blízkých čísel (s rozdílem < 1/M) M = velikost tabulky (table size) DSA 13
14 Rozptylovací funkce h(k)-příklady Pro celá čísla multiplikativní: (kde M je prvočíslo, klíče mají w bitů) h(k,m) = round( k /2 w * M ) modulární: h(k,m) = k % M kombinovaná: h(k,m) = round( c * k ) % M, c <0,1> h(k,m) = (int)( * k ) % M h(k,m) = (16161 * k) % M // pozor na přetečení DSA 14
15 Rozptylovací funkce h(k)-příklady Hash functions h(k) - examples Rychlá, silně závislá na reprezentaci klíčů & je bitový součin h(k) = k & (M-1) kde M = 2 x (není prvočíslo), je totéž jako h(k) = k % M, tj.použije x nejnižších bitů klíče DSA 15
16 Rozptylovací funkce h(k)-příklady Pro řetězce (for strings): int hash( char *k, int M ) { int h = 0, a = 127; for( ; *k!= 0; k++ ) h = ( a * h + *k ) % M; return h; } Hornerovo schéma : P(a) = k 4 * a 4 + k 3 * a 3 + k 2 * a 2 + k 1 *a 1 + k 0 * a 0 = (((k 4 *a + k 3 )*a + k 2 )*a + k 1 )*a + k 0 Výpočet hodnoty polynomu P v bodě a, koeficienty P jsou jednotlivé znaky (jejich číselná hodnota) v řetězci *k. DSA 16
17 Rozptylovací funkce h(k)-příklady Pro řetězce (for strings) Java: public int hashcode( String s, int M ) { int h = 0; for( int i = 0; i < s.length(); i++ ) h = 31 * h + s.charat(i); return h; } Hodnota konstant 127, 31 přispívá rovnoměrnému psoudonáhodnému rozptýlení. DSA 17
18 Rozptylovací funkce h(k)-příklady Pro řetězce: (pseudo-) randomizovaná int hash( char *k, int M ) { int h = 0, a = 31415; b = 27183; for( ; *k!= 0; k++, a = a*b % (M-1) ) h = ( a * h + *k ) % M; return h; } DSA 18
19 Rozptylovací funkce h(k)-chyba Častá chyba: funkce vrací stále nebo většinou stejnou hodnotu chyba v konverzi typů funguje, ale vrací blízké adresy proto generuje hodně kolizí => aplikace je extrémně pomalá, řešení kolizí zdržuje. DSA 19
20 Rozptylovací funkce h(k) Shrnutí -počítá adresu z hodnoty klíče DSA 20
21 Rozptylovací funkce h(k) Každá hashovací funkce má slabá místa, kdy pro různé klíče dává stejnou adresu Univerzální hashování Místo jedné hashovací funkce h(k) máme konečnou množinu H funkcí mapujících U do intervalu {0, 1,, m-1} Při spuštění programu jednu náhodně zvolíme Tato množina je univerzální, pokud pro různé klíče x,y U vrací stejnou adresu h(x) = h(y) přesně v H /m případech Pravděpodobnost kolize při náhodném výběru funkce h(k) je tedy přesně 1/m DSA 21
22 2. Vyřešení kolizí DSA 22
23 a) Zřetězené rozptylování 1/5 Chaining h(k) = k mod 3 posloupnost : 1, 5, 21, 10, 7 heads link 0 21 \ Vkládá se na začátek \ 2 5 \ seznamy synonym DSA 23
24 a) Zřetězené rozptylování 2/5 private: link* heads; int N,M; [Sedgewick] public: init( int maxn ) { N=0; M = maxn / 5; }... // initialization // No. of nodes // table size heads = new link[m]; // table with pointers for( int i = 0; i < M; i++ ) heads[i] = null; DSA 24
25 a) Zřetězené rozptylování 3/5 Item search( Key k ) { return searchlist( heads[hash(k, M)], k ); } void insert( Item item ) // Vkládá se na začátek { int i = hash( item.key(), M ); heads[i] = new node( item, heads[i] ); N++; } DSA 25
26 a) Zřetězené rozptylování 4/5 n = počet prvků, m = velikost tabulky, m<n. Řetěz synonym má ideálně délku =n/m, >1 (plnění tabulky) Insert I(n) = t hash + t link = O(1) velmi nepravděpodobný extrém Search Q(n) = t hash + t search průměrně = t hash + t c * n/(2m) = O(n) O(1 + ) Delete D(n) = t hash + t search + t link = O(n) O(1 + ) pro malá (velká m) se hodně blíží O(1)!!! pro velká (malá m) m-násobné zrychlení vůči sekvenčnímu hledání. DSA 26
27 a) Zřetězené rozptylování 5/5 Praxe: volit m = n/5 až n/10 => plnění = 10 prvků / řetěz vyplatí se hledání sekvenčně (je krátké) neplýtvá nepoužitými ukazateli Shrnutí: + nemusíme znát n předem potřebuje dynamické přidělování paměti potřebuje paměť na ukazatele a na tabulku[m] DSA 27
28 b) Otevřené rozptylování (open-address hashing) Známe předem počet prvků (odhad) nechceme ukazatele (v prvcích ani tabulku) => posloupnost do pole Podle tvaru hashovací funkce h(k) při kolizi: 1. lineární prohledávání (linear probing) 2. dvojí rozptylování (double hashing) DSA 28
29 b) Otevřené rozptylování h(k) = k mod 5 (h(k) = k mod m, m je rozměr pole) posloupnost: 1, 5, 21, 10, Problém: kolize - 1 blokuje místo pro linear probing 2. double hashing Pozn.: 1 a 21 jsou synonyma často ale blokuje nesynonymum. Kolize je blokování libovolným klíčem DSA 29
30 Test - Probe = určení, zda pozice v tabulce obsahuje klíč shodný s hledaným klíčem search hit = klíč nalezen search miss = pozice prázdná, klíč nenalezen Jinak = na pozici je jiný klíč, hledej dál DSA 30
31 b) Otevřené rozptylování (open-addressing hashing) Metoda řešení kolizí (solution of collisions) b1) Linear probing Lineární prohledávání b2) Double hashing Dvojí rozptylování DSA 31
32 b1) Linear probing h(k) = [(k mod 5) + i ] mod 5 = (k + i) mod 5; i = 0; posloupnost: 1, 5, 21, 10, kolize - 1 blokuje => 1. linear probing vlož o 1 pozici dál (i++ => i = 1) 4 DSA 32
33 b1) Linear probing h(k) = (k + i) mod 5 posloupnost: 1, 5, 21, 10, kolize - 5 blokuje - vlož dál 2. kolize - 1 blokuje - vlož dál 3. kolize - 21 blokuje - vlož dál vloženo o 3 pozice dál (i = 3) 4 DSA 33
34 b1) Linear probing h(k) = (k + i) mod 5 posloupnost: 1, 5, 21, 10, kolize - vlož dál (i++) 2. kolize - vlož dál (i++) vlož o 2 pozice dál (i = 2) DSA 34
35 b1) Linear probing h(k) = (k + i) mod 5 posloupnost: 1, 5, 21, 10, i = 0 i = 0 i = 1 i = 3 i = 2 DSA 35
36 b1) Linear probing h(k) = k mod 5 posloupnost: 1, 5, 21, 10, kolize - 1 blokuje (collision-blocks) DSA 36
37 b1) Linear probing h(k) = [(k mod 5) + i.const ] mod 5, h(k) = (k + i.3) mod 5 posloupnost: 1, 5, 21, 10, kolize - 1 blokuje (collision blocks) stačí prvočíslo m nebo číslo nesoudělné s m vlož o 3 pozice dál (i++ => i = 1) 4 21 (i je číslo pokusu) DSA 37
38 b1) Linear probing h(k) = (k + i.3) mod 5 posloupnost: 1, 5, 21, 10, kolize - 5 blokuje - vlož dál (vlož o 3 pozice dál (i = 1) DSA 38
39 b1) Linear probing h(k) = (k + i.3) mod 5 posloupnost: 1, 5, 21, 10, i = DSA 39
40 b1) Linear probing h(k) = (k + i.3) mod 5 posloupnost: 1, 5, 21, 10, i = 0 i = 0 i = 0 i = 1 i = 1 DSA 40
41 b1) Linear probing h(k) = (k + i) mod 5 h(k) = (k + i.3) mod i = i = i = i = i = i = i = 3! 3 10 i = i = i = 1 hrozí dlouhé shluky (long clusters) vhodná volba posunu i 3 je věcí náhody DSA 41
42 b1) Linear probing private: Item *ht; int N,M; [Sedgewick] Item nullitem; public: init( int maxn ) // initialization { N=0; // Number of stored items M = 2*maxN; // load_factor < 1/2 ht = new Item[M]; for( int i = 0; i < M; i++ ) ht[i] = nullitem; }... DSA 42
43 b1) Linear probing void insert( Item item ) { int i = hash( item.key(), M ); while(!ht[i].null() ) i = (i+const) % M; // Linear probing } ht[i] = item; N++; DSA 43
44 Item search( Key k ) { int i = hash( k, M ); b1) Linear probing } while(!ht[i].null() ) { //!cluster end // zarážka (sentinel) if( k == ht[i].key() ) return ht[i]; else i = (i+const) % M; // Linear probing } return nullitem; DSA 44
45 b) Otevřené rozptylování (open-addressing hashing) Metoda řešení kolizí (solution of collisions) b1) Linear probing Lineární prohledávání b2) Double hashing Dvojí rozptylování DSA 45
46 b2) Double hashing Hash function h(k) = [h 1 (k) + i.h 2 (k) ] mod m h 1 (k) = k mod m // initial position h 2 (k) = 1 + (k mod m ) // offset Both depend on k => Each key has different probe sequence m = prime number or m = power of 2 m = slightly less m = odd If d = greatest common divisor => search m/d slots only Ex: k = , m = 701, m = 700 h 1 (k) = 80, h 2 (k) = 257 Starts at 80, and every 257 % 701 DSA 46
47 b2) Double hashing void insert( Item item ) { Key k = item.key(); int i = hash( k, M ), j = hashtwo( k, M );// different for k 1!= k 2 while(!ht[i].null() ) i = (i+j) % M; //Double Hashing } ht[i] = item; N++; DSA 47
48 b2) Double hashing Item search( Key k ) { int i = hash( k, M ), j = hashtwo( k, M );// different for k 1!= k 2 } while(!ht[i].null() ) { if( k == ht[i].key() ) return ht[i]; else i = (i+j) % M; // Double Hashing } return nullitem; DSA 48
49 Double hashing - example b2) Double hashing h(k) = [h 1 (k) + i.h 2 (k) ] mod m Input h 1 (k)= k %11 h 2 (k)= 1+k %10 i h(k) ,1 1, ,1 1, ,1 3, h 1 (k) = k % 11 h 2 (k) = 1 + (k % 10) DSA 49
50 b) Otevřené rozptylování (open-addressing hashing) = plnění tabulky (load factor of the table) = n/m, 0,1 n = počet prvků (number of items in the table) m = velikost tabulky, m>n (table size) DSA 50
51 b) Otevřené rozptylování (open-addressing hashing) Expected number of probes Linear probing: Search hits 0.5 ( / (1 - ) ) found Search misses 0.5 ( / (1 - ) 2 ) not found Double hashing: Search hits (1 / ) ln ( 1 / (1 - ) ) Search misses 1 / (1 - ) = n/m, 0,1 DSA 51
52 b) Očekávaný počet testů Linear probing: Plnění 1/2 2/3 3/4 9/10 Search hit Search miss Double hashing: Plnění 1/2 2/3 3/4 9/10 Search hit Search miss Tabulka může být více zaplněná než začne klesat výkonnost. K dosažení stejného výkonu stačí menší tabulka. DSA 52
53 References [Cormen] Cormen, Leiserson, Rivest: Introduction to Algorithms, Chapter 12, McGraw Hill, 1990 or better: [CLRS] Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms, third edition, Chapter 11, MIT press, 2009 DSA 53
Topics. Vyhledávání, zejména rozptylování. Slovník - Dictionary. Vyhledávání. Rozptylování - Hashing. Rozptylování - Hashing
8..007 Datové struktury a algoritmy Vyhlednávání Topics ást Vyhledávání, zejména rozptylování Petr Felkel Rozptylování (hashing) Rozptylovací funkce ešení kolizí Z et zené rozptylování Otev ené rozptylování
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
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í
Návrh designu: Radek Mařík
Návrh designu: Radek Mařík 1. Hashovací (=rozptylovací) funkce a) převádí adresu daného prvku na jemu příslušný klíč b) vrací pro každý klíč jedinečnou hodnotu c) pro daný klíč vypočte adresu d) vrací
Abstraktní datové typy II.
Datové struktury a algoritmy Abstraktní datové typy II. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2012 Datové struktury a algoritmy,
HASHING GENERAL Hashovací (=rozptylovací) funkce
Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný
HASHING GENERAL Hashovací (=rozptylovací) funkce
Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný
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ě
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
Algoritmizace Hashing II. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Hashing II Jiří Vyskočil, Marko Genyg-Berezovskyj 010 Srůstající hashování (coalesced hashing) Znám předem počet prvků (odhad) Z důvodů efektivity nechci ukazatele (mezi prvky). Na jednu pozici tabulky
Úvod. Úvod do programování. Úvod. Hashovací tabulky
do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava do programování, 2004/2005 Mnohé aplikace nepotřebují ke svému provozu celou škálu operací podporovaných
POZOR klíč NENÍ index (adresa), ale podle klíče se hodnoty ukládají na indexy (adresy).
Hashovací tabulka = Hash table Hashovací tabulka (hash table, rozptýlená tabulka, hešovací tabulka) je datová struktura, která slouží k ukládání dvojic klíč-hodnota. kombinuje výhody vyhledávání pomocí
Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018
Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018 doc. Mgr. Jiří Dvorský, Ph.D. 24. dubna 2018 Verze zadání 24. dubna 2018 První verze 1 1 Hašovací tabulka V tomto zadání
Tabulka. Často jde nejenom o dynamickou množinu, ale i statickou množinu. Matematické tabulky statická množina
Tabulka Často jde nejenom o dynamickou množinu, ale i statickou množinu Matematické tabulky statická množina x cos x 0,0 1,000 0,1 0,995 0,2 0,980 0,3 0,955 0,4 0,921 0,5 0,878 0,6 0,825 0,7 0,765 0,8
2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky
Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých
Š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
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é
ALS1 Přednáška 1. Pravěpodobnost, náhodná proměnná, očekávaná hodnota náhodné proměnné, harmonická čísla
ALS Přednáška Pravěpodobnost, náhodná proměnná, očekávaná hodnota náhodné proměnné, harmonická čísla Prostor elementárních jevů S je množina, jejíž prvky se nazývají elementární jev. Jev je podmnožina
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é
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]
Algoritmizace a programování
Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech
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)):
Spojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
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
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
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
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
vyhledávací stromové struktury
0.05.0 vyhledávací algoritmy Brute Force, Binary Search, Interpolation Search indexové soubory Dense index, Sparse index, Multilevel index transformační funkce Perfect Hash Close Hash Table Open Hash Table
1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:
Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.
Poslední nenulová číslice faktoriálu
Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Vyhledávací algoritmy
Vyhledávací algoritmy Sekvenční hledání, binární hledání, indexace klíče, BST, hashing. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš
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
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
Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické
Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
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
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
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
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 Datové struktury Daniela Szturcová
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
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
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 Datové struktury Daniela Szturcová
Hašování (Vyhledávání metodou transformace klíče)
Hašování (Vyhledávání metodou transformace klíče) Velmi účinnou vyhledávací metodou je hašování. Pro její anglický název hashing se poměrně obtížně hledá vhodný překlad do českého jazyka, proto zůstaneme
Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
ADT/ADS = abstraktní datové typy / struktury
DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní
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á
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Struktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Kontejnery Iterátory Algoritmy Nikola Beneš 4. října 2016 PB161 přednáška 3: kontejnery, iterátory, algoritmy 4. října 2016 1 / 25 Standardní knihovna C++ Už
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;
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Dynamické programování. Optimální binární vyhledávací strom
The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
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
Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo
Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v
int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:
13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže
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
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr
Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K
- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku
Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová
Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit
Jednoduché stránkování Operační systémy Přednáška 8: Správa paměti II Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné velikosti
ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů
ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;
Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III
Michal Krátký Ú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 tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz
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
Karel Kohout 18. května 2010
Karel (karel.kohout@centrum.cz) 18. května 2010 1 2 3 4 Hašovací funkce = Message-Digest algorithm 5, vychází z MD4 (podobně jako SHA-1), autor prof. Ronald Rivest (RSA) Řetězec livobovolné délky na řetězec
Č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 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á??
Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012
Přednáška Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
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ě
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];
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Dynamické programování
Dynamické programování 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 (BI-EFA)
Zpracování deklarací a přidělování paměti
Zpracování deklarací a přidělování paměti Účel deklarací -pojmenování objektů -umístění objektů v paměti Tabulka symbolů -uchovává informace o objektech -umožňuje kontextové kontroly -umožňuje operace
AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující
Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární stromy pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný
Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s
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
ABSTRAKTNÍ DATOVÉ TYPY (ADT)
ABSTRAKTNÍ DATOVÉ TYPY (ADT) hierarchie abstrakcí: nejvyšší úroveň ZOO DruhZvirat celá čísla, řetězce nejnižší úroveň bity Abstrahujeme od - reprezentace (implementace) dat - realizace (implementace) operací
Rekurentní rovnice, strukturální indukce
, strukturální indukce Jiří Velebil: Y01DMA 23. února 2010: Strukturální indukce 1/19 Backusova-Naurova forma Například syntaxe formuĺı výrokové logiky kde a At. Poznámky 1 Relaxace BNF. ϕ ::= a tt (ϕ
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika
amortizovaná složitost, Fibonacciho halda, počítačová aritmetika Jiří Vyskočil, Marko Genyg-Berezovskyj 2009 Amortizovaná složitost Asymptotická složitost často dostatečně nevypovídá o složitosti algoritmů,
Hashovací funkce. Andrew Kozlík KA MFF UK
Hashovací funkce Andrew Kozlík KA MFF UK Hashovací funkce Hashovací funkce je zobrazení h : {0, 1} {0, 1} n. Typicky n {128, 160, 192, 224, 256, 384, 512}. Obraz h(x) nazýváme otisk, hash nebo digest prvku
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ý
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal
Databázové systémy - SQL * definice dat * aktualizace * pohledy Tomáš Skopal Osnova přednášky definice dat definice (schémat) tabulek a integritních omezení CREATE TABLE změna definice schématu ALTER TABLE
Aplikace. vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin
Aplikace Aplikace se liší tím, k jakému účelu jsou tvořeny. To má vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin s podobnou
Databáze I. 5. přednáška. Helena Palovská
Databáze I 5. přednáška Helena Palovská palovska@vse.cz SQL jazyk definice dat - - DDL (data definition language) Základní databáze, schemata, tabulky, indexy, constraints, views DATA Databáze/schéma
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
Základní definice Aplikace hašování Kontrukce Známé hašovací funkce. Hašovací funkce. Jonáš Chudý. Úvod do kryptologie
Úvod do kryptologie Základní definice Kryptografická hašovací funkce Kryptografickou hašovací funkcí nazveme zobrazení h, které vstupu X libovolné délky přiřadí obraz h(x) pevné délky m a navíc splňuje
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Úvod do programování 7. hodina
Úvod do programování 7. 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 Syntax Znaky Vlastní implementace
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,