Texty k Programování na VŠFS. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

Rozměr: px
Začít zobrazení ze stránky:

Download "Texty k Programování na VŠFS. Petr Kučera () Texty k Programování na VŠFS 29. května 2006 1 / 117"

Transkript

1 Texty k Programování na VŠFS Petr Kučera 29. května 2006 Petr Kučera () Texty k Programování na VŠFS 29. května / 117

2 Obsah Základní informace k předmětu Dynamicky alokovaná paměť Jednoduché dynamicky alokované datové struktury Stromy Grafy Vstup a výstup do souboru Rekurze Třídící algoritmy Petr Kučera () Texty k Programování na VŠFS 29. května / 117

3 Základní informace k předmětu www: Zápočet: Zkouška: Literatura: kucerap/vsfs/programovani Dostatečná účast (chybět nejvýš čtyři vyučovací hodiny), nebo zápočtový program (postup jako minulý semestr.) Praktická, naprogramování zadané úlohy nebo úloh. Töpferová Dana, Töpfer Pavel Sbírka úloh z programování, Grada 1992 Töpfer Pavel Algoritmy a programovací techniky, Prometheus 1995 Petr Kučera () Texty k Programování na VŠFS 29. května / 117

4 Část I Dynamicky alokovaná paměť Petr Kučera () Texty k Programování na VŠFS 29. května / 117

5 Typ ukazatel Proměnná typu ukazatel na typ obsahuje adresu dat daného typu. Deklarace: var p:^typ; type typ ukazatele = ^typ; Například: var p: ^string[32]; type pstr32 = ^string[32]; type ppstr32 = ^pstr32; Porovnání ukazatelů: =, <> Hodnota nil, má-li ukazatel hodnotu nil, znamená to, že nikam neodkazuje. Vždy testovat. Dereferenční operátor ^ (ukazatel^), použití například: writeln (pˆ); Petr Kučera () Texty k Programování na VŠFS 29. května / 117

6 Dynamická alokace paměti new Někdy je užitečné říct si o paměť až za běhu programu, například, když na začátku nevíme, kolik jí budeme potřebovat, nebo chceme prostě šetřit pamětí. Alokace, procedura new (ukazatel). Například: new (p); Velikost paměti, která se alokuje, je daná typem ukazatele. Pokud se nepodaří paměť alokovat, program skončí s chybou. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

7 Uvolnění paměti dispose Dealokace, uvolnění paměti, procedura dispose (ukazatel). Například: dispose (p); Po dispose má ukazatel nedefinovanou hodnotu. Okamžitě přiřadit nil. Pokud p a q jsou ukazatelé ukazující na stejný objekt a zavoláme dispose (p);, hodnota q se nemění. Pokud je p=nil, dojde po dispose (p); k chybě a ukončení programu. Testovat! Pokud paměť neuvolníte a ztratíte na ni ukazatel, zůstane zabraná až do konce programu. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

8 Poznámky k paměti V pascalu je paměť běžícího programu organizována ve čtyřech segmentech: Code segment, v němž je uložen kód programu. Data segment, v němž jsou uložena staticky alokovaná data (tj. na začátku programu). Stack segment, v němž jsou uloženy aktivační záznamy při volání procedur a funkcí (tj. kam se vrátit po jejich ukončení, kam vrátit hodnotu apod.) a hlavně lokální proměnné v procedurách a funkcích. Heap segment, čili halda, zde se přiděluje dynamicky alokovaná paměť. Velikosti jednotlivých segmentů mohou být omezeny. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

9 Příklad program ukazatel (input, output); var p: ^string[32]; type pstring32 = ^string[32]; begin new (p); p^ := Ahoj světe! ; writeln (p^); dispose (p); p := nil; end. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

10 Lineární spojový seznam Lineární spojový seznam je posloupnost záznamů stejného typu seřazených za sebe a spojených pomocí ukazatelů. Každý uzel seznamu obsahuje nějaká data a odkaz na následníka. Data Data Data Data NIL Petr Kučera () Texty k Programování na VŠFS 29. května / 117

11 Lineární seznam v Pascalu Typ ukazatel na záznam R může být deklarován před deklarací typu R, ale v rámci jednoho bloku type. (Jinak by nešlo realizovat.) Deklarace typu spojového seznamu (data jsou například jedno číslo): type PLSeznam = ^TLSeznam; TLSeznam = record data : integer; dalsi : PLSeznam; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

12 Manipulace s lineárním spojovým seznamem (cvičení) I 1 function vytvor(n: integer): PLSeznam; Funkce vytvoří seznam s N prvky a vrátí odkaz na první prvek z tohoto seznamu (nil, pokud N <= 0). V položkách data budou uložena čísla 1... N vzestupně od začátku do konce. 2 function najdi(s: PLSeznam; d: integer): PLSeznam; Funkce najde prvek v seznamu, který má položku data shodnou s d a vrátí odkaz na něj, nebo nil, pokud prvek v seznamu není. 3 function najdipredchudce(s, p: PLSeznam): PLSeznam; Funkce najde předchůdce prvku p v seznamu s a vrátí na něj odkaz. Pokud se p v seznamu nevyskytuje, vrátí nil, je-li p první, vrátí p. 4 function konec(s: PLSeznam): PLSeznam; Vrátí odkaz na poslední prvek seznamu. 5 procedure vypis(s: PLSeznam); Vypíše na obrazovku čísla v pořadí, v jakém jsou v seznamu. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

13 Manipulace s lineárním spojovým seznamem (cvičení) II 1 procedure vlozzaprvek(p, q: PLSeznam); Vloží prvek q za prvek p. 2 procedure pridejnazacatek(var s: PLSeznam; p: PLSeznam); Vloží prvek p na začátek seznamu s. 3 procedure pridejnakonec(var s: PLSeznam; p: PLSeznam); Vloží prvek p na konec seznamu s. 4 function smaz(var s: PLSeznam; p: PLSeznam): PLSeznam; Smaže prvek p ze seznamu s. Buď si nejprve vymění data s následníkem, nebo nejprve najde předchůdce. Vrací odkaz na smazaný prvek, v položce dalsi bude mít nil. Pokud jej nebudete už používat, nezapomeňte po smaz na dispose. 5 procedure zrus(var s: PLSeznam); Projde seznam a pomocí dispose zruší jeho prvky, s bude po ukončení obsahovat nil. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

14 Část II Jednoduché dynamicky alokované datové struktury Petr Kučera () Texty k Programování na VŠFS 29. května / 117

15 Jednoduché datové struktury Lineární spojový seznam. Obousměrný spojový seznam Seznam s hlavou Petr Kučera () Texty k Programování na VŠFS 29. května / 117

16 Obousměrný spojový seznam Obousměrný spojový seznam je lineární seznam, v němž má každý prvek odkaz nejen na následníka, ale i na předchůdce. Data Data Data Data NIL NIL Petr Kučera () Texty k Programování na VŠFS 29. května / 117

17 Obousměrný seznam v Pascalu type POSeznam = ^TOSeznam; TOSeznam = record data : integer; dalsi : POSeznam; pred : POSeznam; end; Funkce a procedury přistupující k obousměrnému seznamu jsou implementované podobně jako pro lineární seznam. Něco je jednodušší, například vkládání, mazání, protože máme odkaz na předchůdce. Ale musíme hlídat i odkazy na předchůdce, proto je implementace poněkud pracnější. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

18 Seznam s hlavou Seznam libovolného typu si reprezentujeme hlavou, což je struktura, která teprve odkazuje na skutečný seznam. Hlava může obsahovat i jiné položky, například odkaz na konec, počet prvků a podobně. Příklad čtyřprvkového lineárního seznamu s hlavou: 4 Hlava Data Data Data Data NIL Petr Kučera () Texty k Programování na VŠFS 29. května / 117

19 Seznam s hlavou v Pascalu Příklad pro lineární seznam s hlavou s odkazy na začátek a počtem prvků: type THLSeznam = record pocet : integer; zac : PLSeznam; kon : PLSeznam; end; Manipulace je shodná s manipulací s lineárním seznamem, ale musíme upravovat počet a oba odkazy v hlavě. Hlava může být alokovaná staticky. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

20 Zásobník Datová struktura řídící se pravidlem: Poslední dovnitř, první ven. (Anglicky Last In First Out, zkráceně LIFO.) Dno Vrchol Přistupujeme k němu obvykle pomocí těchto procedur a funkcí: top Vrací prvek na vrcholu zásobníku. push Uloží prvek na vrchol zásobníku. pop Smaže prvek z vrcholu zásobníku a vrátí jej. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

21 Zásobník pomocí pole Například zásobník celých čísel: const MAX_ZAS_VEL = 100; type TZasobnikA = record zasobnik : array [1..MAX_ZAS_VEL] of integer; vrchol : integer; end; procedure ZAInit (var z : TZasobnikA); {Inicializace} function ZATop (var z : TZasobnikA) : integer; procedure ZAPush (var z : TZasobnikA; cis : integer); function ZAPop (var z : TZasobnikA) : integer; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

22 Zásobník pomocí pole (poznámky) Položka vrchol vlastně vždy obsahuje počet prvků v zásobníku. Přístupové procedury a funkce pouze aktualizují hodnotu položky vrchol a přistupují jen k zasobnik [vrchol]. Pozor na přetečení nebo podtečení (nutno kontrolovat). ZATop zásobník nemění, předání odkazem použito, aby se nekopírovalo celé pole. Výhodou implementace pomocí pole je rychlost. Nevýhodou je, že musíme dopředu dobře odhadnout maximální velikost zásobníku a to, že zásobník zabírá stále stejně paměti, i když obsahuje jen jeden či dva prvky. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

23 Zásobník pomocí seznamu s hlavou Přidáváme i odebíráme ze začátku seznamu. Výhody a nevýhody opačně než u implementace pomocí pole. Opět zásobník celých čísel: type TZasobnikLS = record zac : PLSeznam; end; procedure ZLSInit (var z : TZasobnikLS); {Inicializace} function ZLSTop (var z : TZasobnikLS) : integer; procedure ZLSPush (var z : TZasobnikLS; cis : integer); function ZLSPop (var z : TZasobnikLS) : integer; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

24 Fronta Datová struktura řídící se pravidlem: První dovnitř, první ven. (Anglicky First In First Out, zkráceně FIFO.) Vstup Výstup Přistupujeme k němu obvykle pomocí těchto procedur a funkcí: first Vrací první prvek fronty. put Uloží prvek na konec fronty. get Smaže prvek ze začátku fronty a vrátí jej. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

25 Fronta pomocí pole Například fronta celých čísel: const MAX_FR_VEL = 100; type TFrontaA = record fronta : array [1..MAX_FR_VEL] of integer; zac, kon : integer; pocet : integer; end; procedure FAInit (var z : TFrontaA); {Inicializace} function FAFirst (var z : TFrontaA) : integer; procedure FAPut (var z : TFrontaA; cis : integer); function FAGet (var z : TFrontaA) : integer; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

26 Fronta pomocí pole (poznámky) Při posunu indexů zac a kon počítáme modulo MAX VELIKOST FRONTY, jako by bylo pole do kolečka. Vyhneme se tím přesunu prvků, kdybychom došli na konec pole. Abychom poznali přetečení a podtečení, musíme si pamatovat počet prvků (a kontrolovat jej). Výhody a nevýhody jako u zásobníku pomocí pole. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

27 Fronta pomocí seznamu s hlavou Přidáváme na konec seznamu, odebíráme ze začátku. Výhody a nevýhody jako u zásobníku pomocí seznamu. Fronta celých čísel: type TFrontaLS = record zac, kon : PLSeznam; end; procedure FLSInit (var z : TFrontaLS); {Inicializace} function FLSTop (var z : TFrontaLS) : integer; procedure FLSPush (var z : TFrontaLS; cis : integer); function FLSPop (var z : TFrontaLS) : integer; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

28 Varianty fronty Oboustraná fronta Přidávání i odebírání z obou konců, implementace nejsnáze pomocí obousměrně vázaného seznamu. Prioritní fronta Prvky jsou odebírány podle priorit (pokud mají stejnou prioritu, bere se jako normální fronta). Pokud je různých priorit málo, třeba d, můžeme implementovat pomocí d různých seznamů nebo polí. Pokud je priorit hodně, bývá implementace pomocí pole nebo seznamu pomalá (kvůli třídění), lepší je halda (o té možná jindy). Petr Kučera () Texty k Programování na VŠFS 29. května / 117

29 Cvičení 1 Implementujte zásobník celých čísel pomocí pole i dynamicky pomocí seznamu. 2 Implementujte frontu celých čísel pomocí pole i dynamicky pomocí seznamu. 3 Implementujte prioritní frontu celých čísel, která upřednostňuje sudá čísla před lichými. 4 Implementujte oboustranou frontu. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

30 Část III Stromy Petr Kučera () Texty k Programování na VŠFS 29. května / 117

31 Stromy 6 Co je to strom 7 Reprezentace stromu 8 Binární vyhledávací stromy 9 Cvičení Petr Kučera () Texty k Programování na VŠFS 29. května / 117

32 Co je to strom... Formálně: Acyklický graf. Neformálně: Struktura skládající se z vrcholů (uzlů). Jeden je význačný, nazývá se kořen, ten reprezentuje přístup ke stromu. Kořen má několik následníků neboli synů. Každý z nich je kořenem menšího stromu, tj. má další syny atd. V binárním stromě má každý vrchol nejvýš dva syny (levého a pravého). Strom Binární strom Petr Kučera () Texty k Programování na VŠFS 29. května / 117

33 Reprezentace binárního stromu S vrcholem mohou být asociována data (v příkladu celé číslo). Ve vrcholu se občas hodí mít kromě odkazu na syny i odkaz na otce (v příkladu chybí). type PBinVrchol = ^TBinVrchol; TBinVrchol = record levy, pravy : PBinVrchol; data : integer; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

34 Reprezentace obecného stromu I Je-li maximální počet synů omezený a ne příliš velký, můžeme odkazy na ně uchovávat v poli. const MAX_POCET_SYNU = 20; type PVrchol = ^TVrchol; TVrchol = record syn : array [1..MAX_POCET_SYNU] of PVrchol; data : integer; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

35 Reprezentace obecného stromu II Jinou možností je uchovávat odkazy na syny ve spojovém seznamu. type PSeznamSynu = ^TSeznamSynu; PVrchol = ^TVrchol; TSeznamSynu = record syn : PVrchol; dalsi : PSeznamSynu; end; TVrchol = record syn : PSeznamSynu; data : integer; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

36 Reprezentace obecného stromu III Dalším způsobem je pamatovat si jen odkaz na prvního syna a svého dalšího bratra. Chceme-li se dozvědět všechny syny, přejdeme do prvního a projdeme postupně všechny jeho bratry. Obecný strom jsme vlastně nahradili binárním. type PVrchol = ^TVrchol; TVrchol = record syn, bratr : PVrchol; data : integer; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

37 Binární vyhledávací strom (BVS) je binární strom, v němž navíc asociujeme s každým vrcholem tzv. klíč (například číslo). Navíc pro každý vrchol v platí, že všechny prvky v podstromu levého syna (není-li nil) mají klíč menší než klíč v a všechny prvky v podstromu pravého syna (není-li nil) mají klíč větší než klíč v Petr Kučera () Texty k Programování na VŠFS 29. května / 117

38 Reprezentace BVS Binární strom, liší se jen položkou klíč. Položka data pro jednoduchost vynechána. type PBVSVrchol = ^TBVSVrchol; TBVSVrchol = record levy, pravy : PBVSVrchol; klic : integer; end; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

39 Vyhledávání v BVS function najdi (PBVSVrchol : koren; x : integer):pbvsvrchol Hledáme prvek s klíčem x. Začínáme v kořeni Porovnáme hodnotu x s klíčem aktuálního vrcholu, je-li x stejný jako klíč, končíme, je-li x větší, změníme aktuální klíč na pravého syna, je-li x menší, změníme aktuální klíč na levého syna. x= Petr Kučera () Texty k Programování na VŠFS 29. května / 117

40 Vkládání do BVS procedure vloz (var PBVSVrchol : koren; x : integer) Nejprve postupujeme stejně jako ve funkci najdi, dokud nenarazíme na nil. (Pokud prvek najdeme, tak ohlásíme chybu.) Tím jsme našli místo, kde by vrchol byl, kdyby byl ve stromě. Vytvoříme nový vrchol se zadaným klíčem a přidáme jej na nalezené místo. x= Petr Kučera () Texty k Programování na VŠFS 29. května / 117

41 Mazání z BVS procedure smaz (var PBVSVrchol : koren; x : integer) Nejprve stejně jako ve funkci najdi nenajdeme prvek v, při hledání v najdeme rovnou i jeho otce o. Nemá-li vrchol v syna, prostě v, s využitím odkazu na o, odstraníme. Má-li vrchol v jediného syna s, smažeme v a s připojíme jako syna o (toho, kterým byl v). Pokud má vrchol v dva syny,... viz následující slide. x=46 50 x= o o 67 6 v v s Petr Kučera () Texty k Programování na VŠFS 29. května / 117

42 Mazání z BVS (dokončení) Má-li v dva syny l a r, najdeme nejbližší menší prvek w, což je největší prvek z levého podstromu. Ten najdeme tak, že jdeme z l stále doprava, všimněte si, že w nikdy nemá pravého syna. Vyměníme datové a klíčové položky w a v. Poté w smažeme tak, jak bylo popsáno. Analogicky lze použít nejbližší větší prvek. x=23 v 23 6 l r 43 o 50 x=23 50 o v 6 l r w 1 23 w Petr Kučera () Texty k Programování na VŠFS 29. května / 117

43 Cvičení Implementujte funkce a procedury pro vyhledávání, vkládání a mazání v binárním vyhledávacím stromě. Implementujte funkce, které najdou největší a nejmenší prvek z binárního vyhledávacího stromu. Implementujte funkci, která vypíše prvky uložené v binárním vyhledávacím stromě od nejmenšího do největšího, nepoužívejte přitom rekurzi, o které si řekneme později. Jako nápověda může sloužit, že se zde využije zásobník. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

44 Část IV Grafy Petr Kučera () Texty k Programování na VŠFS 29. května / 117

45 Grafy 10 Co je to graf 11 Reprezentace grafu 12 Průchod stromu a grafu 13 Průchod stromu do hloubky 14 Průchod stromu do šířky 15 Průchod grafu do hloubky 16 Průchod grafu do šířky 17 Cvičení Petr Kučera () Texty k Programování na VŠFS 29. května / 117

46 Co je to graf... Graf je struktura skládající se z vrcholů a hran mezi těmito vrcholy. (Například silniční síť.) Orientovaný graf hrany jsou orientované, tj. u každé je dáno, že vede z jednoho vrcholu do jiného a ne naopak. Neorientovaný graf hrany nejsou orientované, tj. každá vede jakoby oběma směry. Sousedi či následníci vrcholy jsou ty vrcholy, do nichž z něj vede hrana. Cesta je posloupnost vrcholů v 1,..., v k, že mezi dvěma následujícími vždy vede hrana a žádný vrchol se neopakuje. Cyklus je cesta, která začíná i končí ve stejném vrcholu. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

47 Co je to graf... Neorientovaný graf Orientovaný graf b f d h b f d h c c a g e a g e Cesta a, b, c, d, e Petr Kučera () Texty k Programování na VŠFS 29. května / 117

48 Matice sousednosti Matice sousednosti grafu s n vrcholy je matice A velikosti n n booleovských hodnot. b Deklarace: var A: array [1..N, 1..N] of boolean; A[i, j] = true, právě když je v grafu hrana z vrcholu i do vrcholu j. a f c g d e h a b c d e f g h a b c d e f g h Petr Kučera () Texty k Programování na VŠFS 29. května / 117

49 Matice incidence b Matice incidence grafu s n vrcholy a m hranami je matice I velikosti m n booleovských hodnot. a Deklarace: var I: array [1..M, 1..N] of boolean; I [i, j] = true, právě když vrchol j je prvkem hrany i. f c g d e h a b c d e f g h Petr Kučera () Texty k Programování na VŠFS 29. května / 117

50 Seznam sousedů Seznam sousedů grafu s n vrcholy a m hranami se skládá z pole V délky n, v němž si ke každému vrcholu i pamatujeme odkaz na seznam vrcholů, do nichž z i vede hrana. Seznamy buď dynamicky pomocí lineárního spojového seznamu. Hodí se pokud se často mění struktura grafu. Nebo pomocí druhého pole E délky m. V [i] pak obsahuje index v poli E, na němž začíná seznam sousedů vrcholu i, seznam končí na V [i + 1] 1. Pro jednoduchost přidáme vrchol N + 1, abychom mohli k vrcholům přistupovat jednotným způsobem. Z téhož důvodu i M + 1 v jako rozsah v deklaraci V. Deklarace: var V: array [1..N+1] of 1..M+1; E: array [1..M] of 1..N; Petr Kučera () Texty k Programování na VŠFS 29. května / 117

51 Seznam sousedů příklad b f d h c a g e a b c d e f g h? V E b g a c f d g e c h h Petr Kučera () Texty k Programování na VŠFS 29. května / 117

52 Průchod stromu nebo grafu Chceme navštívit všechny vrcholy a něco s nimi udělat. Navíc máme požadavky na pořadí, v jakém je navštívíme. Například chceme vypsat uzly binárního vyhledávacího stromu uspořádané podle klíčů. Nebo chceme v grafu pro daný počáteční vrchol spočítat délku nejkratší cesty (co do počtu hran) do ostatních vrcholů. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

53 Průchod stromu do hloubky Konkrétní úloha: Vypsat uzly binárního vyhledávacího stromu uspořádané podle klíčů. Postupujeme tak, že v daném vrcholu v nejprve vypíšeme všechny uzly v podstromu levého syna, potom vrchol v, potom všechny uzly v podstromu pravého syna. Uzly v obou podstromech zpracováváme analogicky. Realizace buď pomocí rekurze (později), nebo pomocí zásobníku. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

54 Průchod stromu do hloubky algoritmus 1 Z prázdný zásobník 2 v kořen stromu 3 zezasobniku false 4 Dokud není v nil, opakuj následující kroky: 1 Má-li v levého syna l a zezasobniku = false 1 push(z, v) 2 v l 3 zezasobniku false 4 pokračuj další smyčkou cyklu 2 vypiš v 3 Má-li v pravého syna r 1 v r 2 zezasobniku false 3 pokračuj další smyčkou cyklu 4 v pop(z) 5 zezasobniku true Petr Kučera () Texty k Programování na VŠFS 29. května / 117

55 Průchod stromu do hloubky varianty Podle pořadí zpracovávaných vrcholů rozeznáváme tři varianty průchodu do hloubky. preorder Zpracuj vrchol v, zpracuj levý podstrom vrcholu v, zpracuj pravý podstrom vrcholu v. inorder Zpracuj levý podstrom vrcholu v, zpracuj vrchol v, zpracuj pravý podstrom vrcholu v. postorder Zpracuj levý podstrom vrcholu v, zpracuj pravý podstrom vrcholu v, zpracuj vrchol v. Předešlý algoritmus zařídí výpis v pořadí inorder. Ostatní varianty lze provést snadnou modifikací, my si je ukážeme později v části o rekurzi. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

56 Průchod stromu do šířky Konkrétní úloha: Vypsat uzly binárního stromu v pořadí podle jejich hloubky. Realizace pomocí fronty (tady nejde rekurzi moc dobře použít). Petr Kučera () Texty k Programování na VŠFS 29. května / 117

57 Průchod stromu do šířky algoritmus 1 F prázdná fronta 2 put(f, kořen stromu) 3 Dokud není F prázdná, opakuj následující kroky: 1 v get(f ) 2 vypiš v 3 Má-li v levého syna l, put(f, l). 4 Má-li v pravého syna r, put(f, r). Petr Kučera () Texty k Programování na VŠFS 29. května / 117

58 Průchod grafu do hloubky Chceme navštívit každý vrchol grafu právě jednou a to tak, že jsme-li ve vrcholu v, který má následníky u 1,..., u k, chceme nejprve navštívit všechny vrcholy, do nichž vede cesta z u 1, potom všechny vrcholy, do nichž vede cesta z u 2 atd. Stejně jako při průchodu stromem, použijeme zásobník. Například chceme zjistit komponenty souvislosti grafu (komponenta souvislosti je množina vrcholů, které jsou všechny spojené cestami. Navíc už je maximální, nejde k ní tedy nic přidat.) Petr Kučera () Texty k Programování na VŠFS 29. května / 117

59 Průchod grafu do hloubky Tento algoritmus označí (nastaví K[i] na 1) všechny vrcholy, do nichž vede cesta z vrcholu s. N označuje počet vrcholů. 1 Z prázdný zásobník 2 push(z, počáteční vrchol s) 3 K: array [1..N] of integer 4 K[i] 0 pro i = 1... N. 5 K[s] 1 6 Dokud není Z prázdný, opakuj následující kroky: 1 v pop(z) 2 Pro každého následníka u vrcholu v, pro nějž K[u] = 0, proveď: 1 push(z, u). 2 K[u] 1 Petr Kučera () Texty k Programování na VŠFS 29. května / 117

60 Průchod grafu do hloubky poznámky Graf je vhodné reprezentovat pomocí seznamu následníků. Pokud chceme najít všechny komponenty, voláme tento algoritmus, dokud je pro nějaký vrchol K[v] = 0 s tím, že jako počáteční vrchol použijeme vrchol v. Číslo komponenty postupně zvyšujeme, v algoritmu bylo 1. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

61 Průchod grafu do šířky Chceme navštívit každý vrchol grafu právě jednou a to tak, že jsme-li ve vrcholu v, který má následníky u 1,..., u k, chceme nejprve navštívit vrcholy u 1,..., u k a pak teprve jejich následníky atd. Stejně jako při průchodu stromem, použijeme frontu. Například vycházíme z vrcholu s a chceme najít pro každý vrchol v délku nejkratší cesty (co do počtu hran) z s do v. Případně i tuto cestu. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

62 Průchod grafu do šířky algoritmus Tento algoritmus spočítá pro každý vrchol délku nejkratší cesty (počet hran) z vrcholu s. Délku uloží do pole D, předchůdce na této cestě do P. 1 F prázdná fronta 2 put(f, počáteční vrchol s) 3 D, P: array [1..N] of integer 4 D[i] N + 1, P[i] N + 1 pro i = 1... N. 5 D[s] 0 6 Dokud není F prázdná, opakuj následující kroky: 1 v get(f ) 2 Pro každého následníka u vrcholu v, pro nějž D[u] = N + 1, proveď: 1 put(f, u). 2 D[u] D[v] P[u] v Petr Kučera () Texty k Programování na VŠFS 29. května / 117

63 Průchod grafu do šířky poznámky Vhodnou reprezentací grafu je opět seznam sousedů. Cestu do vrcholu zrekonstruujeme pomocí předchůdců. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

64 Cvičení 1 Implementujte algoritmus pro vypsání uzlů binárního vyhledávacího stromu uspořádané podle klíče. 2 Implementujte průchod stromem do šířky. 3 Implementujte průchod grafem do hloubky a hledání komponent souvislosti grafu. 4 Implementujte průchod grafem do šířky a počítání nejkratších cest ze zadaného vrcholu (co do počtu hran). 5 Implementujte průchod stromem v pořadí preorder, inorder, postorder. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

65 Část V Vstup a výstup do souboru Petr Kučera () Texty k Programování na VŠFS 29. května / 117

66 Vstup a výstup do souboru 18 Typy souborů 19 Otevření a uzavření souboru 20 Pohyb v souboru 21 Textové soubory 22 Netextové soubory 23 Cvičení Petr Kučera () Texty k Programování na VŠFS 29. května / 117

67 Typy souborů Soubor s udaným typem, např.: var f1: file of integer; Soubor bez udaného typu, základní položkou je byte, např.: var f2: file; Textový soubor, čte se obvykle po znacích nebo po řádcích, např.: var f3: text; Standardní vstup, obvykle jde o vstup z klávesnice, je to textový soubor jen pro čtení, který je vždy otevřený po spuštění programu. Čte z něj pomocí funkcí read, readln a podobných, u nichž se nespecifikuje soubor parametrem. Standardní výstup, obvykle jde o výstup na obrazovku, je to textový soubor jen pro zápis, který je vždy otevřený po spuštění programu. Zapisuje se do něj pomocí funkcí write, writeln a podobných. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

68 Otevření a uzavření souboru Nejprve je nutné asociovat soubor se jménem: assign (f1, "cisla"); Poté je možné soubor otevřít: reset soubor musí existovat, textové soubory jsou otevřeny pouze pro čtení. rewrite pokud soubor existoval, smaže nejprve jeho obsah, pokud neexistoval, vytvoří jej. append otevírá textový soubor pro zápis, soubor musí existovat a zapisovaný text bude přidáván na konec souboru. Například: reset (f1); rewrite (f2); append (f3); Nakonec je slušné soubor zavřít. close (f1); Další manipulace se soubory a adresáři viz. nápověda a dokumentace. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

69 Pohyb v souboru V každý okamžik je program v souboru na určité pozici, tj. za nějakým znakem, či složkou daného typu. Funkce eof vrací true, pokud je tato pozice na konci souboru, false jinak. Pohyb je vykonáván jednak přirozeně čtením a zápisem, jednak pomocí dalších funkcí, které se liší podle typu souboru. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

70 Pohyb v textovém souboru U všech funkcí pro textové soubory, pokud není udán soubor, míní se standardní vstup případně výstup. eoln vrací true, pokud je pozice souboru na znaku konce řádku, jinak false. seekeof má stejný význam jako eof, ale ignoruje všechny mezery, tabelátory a znaky konce řádku. Změní pozici na první znak za těmito znaky a pak vrátí, co by vrátilo eof. seekeoln má stejný význam jako eoln, ale ignoruje všechny mezery a tabelátory. Změní pozici na první pozici za těmito znaky a pak vrátí, co by vrátilo eoln Petr Kučera () Texty k Programování na VŠFS 29. května / 117

71 Čtení z textového souboru Procedury read, readln. Prvním parametrem může být textový soubor, jinak se bere standardní vstup. Další parametry mohou být typu char, celočíselného, reálného nebo string, ze souboru se přečte příslušná hodnota (znak, reprezentace čísla nebo řetězec příslušné délky) a načte se do daného parametru. readln se liší jen tím, že nakonec přejde na nový řádek. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

72 Zápis do textového souboru Procedury write, writeln Prvním parametrem může být opět textový soubor, jinak se míní standardní výstup. Další parametry mohou být stejného typu jako u read. Parametry je možné zadat pomocí: hodnota [ : minšířka [ : početmíst]] Potom: minšířka specifikuje, na kolik pozic se má výstup zarovnat. početmíst specifikuje počet desetinných míst je za desetinnou tečkou (jen reálné parametry). writeln se liší jen tím, že na konec přidá znak konce řádku. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

73 Buffery Všechny operace se bufferují. Velikost bufferu je možné změnit pomocí settextbuf. flush vyprázdní buffer a přitom zapíše dosud nezapsané znaky na disk. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

74 Příklad práce s textovým souborem (začátek) program textsoub; var vstup: text; vystup: text; soucet: integer; scitanec: integer; begin assign (vstup, vstup.txt ); assign (vystup, vystup.txt ); reset (vstup); rewrite (vystup); Petr Kučera () Texty k Programování na VŠFS 29. května / 117

75 Příklad práce s textovým souborem (dokončení) while not seekeof (vstup) do begin soucet := 0; while not seekeoln (vstup) do begin read (vstup, scitanec); soucet := soucet + scitanec; end; writeln (vystup, soucet:10); readln (vstup); end; close (vstup); close (vystup); end. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

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

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

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 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í

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

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

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

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Stromy, haldy, prioritní fronty

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

Více

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dě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í: 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.

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury 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 TUO) Lineární datové

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

Maturitní téma: Programovací jazyk JAVA

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

Více

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

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

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Dynamické datové typy a struktury

Dynamické datové typy a struktury .. a Programovací techniky doc. Ing. Jiří Rybička Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Programovací techniky a 2 / 18 Uchovávají adresu v paměti Programovací techniky a 2 / 18 Uchovávají

Více

Základní datové struktury

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

Více

NPRG030 Programování I, 2016/17 1 / :58:13

NPRG030 Programování I, 2016/17 1 / :58:13 NPRG030 Programování I, 2016/17 1 / 31 10. 10. 2016 10:58:13 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE NPRG030 Programování

Více

5 Rekurze a zásobník. Rekurzivní volání metody

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í

Více

Algoritmy I, složitost

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á??

Více

Algoritmizace a programování

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

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- 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á

Více

ABSTRAKTNÍ DATOVÉ TYPY

ABSTRAKTNÍ DATOVÉ TYPY Jurdič Radim ABSTRAKTNÍ DATOVÉ TYPY Veškeré hodnoty, s nimiž v programech pracujeme, můžeme rozdělit do několika skupin zvaných datové typy. Každý datový typ představuje množinu hodnot, nad kterými můžeme

Více

Algoritmy a datové struktury

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

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Algoritmizace prostorových úloh

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á

Více

Sada 1 - Základy programování

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

Více

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í 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

Více

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. 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

Více

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka

Více

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

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

Více

Datové struktury. alg12 1

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

Více

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace: Fronta Fronta je sekvence first-in-first-out (první do fronty první z fronty) prvků. Prvky mohou být vkládány pouze nakonec (rear) fronty a odstraňovány pouze zpočátku (front) fronty Délka fronty je počet

Více

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

Více

Kolekce, cyklus foreach

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

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

Více

Anotace. Pointery, dynamické proměnné

Anotace. Pointery, dynamické proměnné Anotace Třídění, Pointery, dynamické proměnné Radix- alias bucketsort Třídíme-li celá (přirozená) čísla, jejichž velikost je omezena, můžeme využít toho, že v desítkovém zápisu je na každé pozici jen jedna

Více

Základy algoritmizace a programování

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;

Více

IB111 Úvod do programování skrze Python

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ě

Více

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

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č

Více

Implementace binárního stromu směrníky

Implementace binárního stromu směrníky Téma: Vypracoval: Zdeněk Alčer Implementace binárního stromu směrníky 1. Teorie stromu: Pojem strom je datová struktura, která je v teorii grafů formálně definována jako zvláštní případ grafu bez cyklů.

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 07. Základní příkazy vstup a výstup hodnot Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA) Předmět: Algoritmizace praktické aplikace (3ALGA) Vytvořil: Jan Brzeska Zadání: Vytvoření funkcí na stromech (reprezentace stromu směrníky). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4.

Více

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

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

Více

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

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vyhledávací stromy Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vytvářejí se vždy nad již existující datovou strukturou (zpravidla tabulkou). Vyhledávací stromy můžeme rozdělit

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

Více

Matice sousednosti NG

Matice sousednosti NG Matice sousednosti NG V = [ v ij ] celočíselná čtvercová matice řádu U v ij = ρ -1 ( [u i, u j ] )... tedy počet hran mezi u i a u j?jaké vlastnosti má matice sousednosti?? Smyčky, rovnoběžné hrany? V

Více

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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.

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

Standardní algoritmy vyhledávací.

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í

Více

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

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 binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

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

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 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

Více

Semestrální práce 2 znakový strom

Semestrální práce 2 znakový strom Semestrální práce 2 znakový strom Ondřej Petržilka Datový model BlockFileRecord Bázová abstraktní třída pro záznam ukládaný do blokového souboru RhymeRecord Konkrétní třída záznamu ukládaného do blokového

Více

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

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky. V průběhu budou vysvětlena následující témata: 1. Dynamicky alokovaná paměť 2. Jednoduché

Více

Basic256 - úvod do programování Příklady. ing. petr polách

Basic256 - úvod do programování Příklady. ing. petr polách Basic256 - úvod do programování Příklady ing. petr polách 1 Basic 256 input, print Př.: Vytvořte program pro součet dvou čísel: input "Zadej a: ", a input "Zadej b: ", b print a+b input "Zadej a: ", a

Více

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná

Více

Paměť počítače. alg2 1

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

Více

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5 Obsah Obsah 1 Řídicí struktury 1 2 Podmínka 1 2.1 Podmínka typu case......................... 2 3 Příkaz skoku 3 4 Cykly 4 4.1 Cyklus s podmínkou na začátku................... 4 4.2 Cyklus s podmínkou

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

Úvod do programování 6. hodina

Ú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

Více

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132 Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3 Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Práce s binárními soubory. Základy programování 2 Tomáš Kühr Práce s binárními soubory Základy programování 2 Tomáš Kühr Binární soubory Mohou mít libovolnou strukturu Data jsou uložena ve stejné podobě jako v paměti za běhu programu Výhody: Pro uložení je potřeba

Více

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

Vyvažování a rotace v BVS, všude se předpokládá AVL strom Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 13. Práce s řetězci - palindrom Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona:

Více

NPRG030 Programování I, 2015/16 1 / :25:32

NPRG030 Programování I, 2015/16 1 / :25:32 NPRG030 Programování I, 2015/16 1 / 21 22. 10. 2015 13:25:32 Podprogramy Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X

Více

vyhledávací stromové struktury

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é

Více

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Jméno a příjmení: Školní rok: Třída: VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf 2007/2008 VI2 PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Petr VOPALECKÝ Číslo úlohy: Počet

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

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 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á)

Více

Úvod do programování 10. hodina

Úvod do programování 10. hodina Úvod do programování 10. 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 Dvojrozměrné pole

Více

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě

Více

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013 2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

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

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

Více

Binární vyhledávací stromy

Binární vyhledávací stromy Binární vyhledávací stromy Definice: Binární vyhledávací strom (po domácku BVS) je buďto prázdná množina nebo kořen obsahující jednu hodnotu a mající dva podstromy (levý a pravý), což jsou opět BVS, ovšem

Více

Šablony, kontejnery a iterátory

Š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

Více

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

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á

Více

5 Orientované grafy, Toky v sítích

5 Orientované grafy, Toky v sítích Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost

Více

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1 Rekurze a zásobník Jak se vypočítá rekurzivní program? volání metody vyšší adresy ret1 main(){... fa(); //push ret1... PC ret2 void fa(){... fb(); //push ret2... return //pop void fb(){... return //pop

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 13. Otázka : Základní datové struktury (pole, zásobník, binární strom atd.), datové struktury vhodné pro fyzickou implementaci relačních dat v SŘBD (hašovací

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet. 4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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é

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Stručný návod k programu Octave

Stručný návod k programu Octave Stručný návod k programu Octave Octave je interaktivní program vhodný pro technické výpočty. Je nápadně podobný programu MATLAB, na rozdíl od něho je zcela zadarmo. Jeho domovská vebová stránka je http://www.octave.org/,

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Základy informatiky Teorie grafů Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Obsah přednášky Barvení mapy Teorie grafů Definice Uzly a hrany Typy grafů Cesty, cykly, souvislost grafů Barvení mapy

Více