1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)
|
|
- Tereza Kovářová
- před 7 lety
- Počet zobrazení:
Transkript
1 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. Hloubka (plytkost) 5. Šířka Popis jen principu, jak funguje algoritmus a ne konkrétní proměnné a každý příkaz. Pro reprezentaci stromu pomocí směrníků je potřeba nejprve vytvořit datový typ, který bude zastupovat jednotlivé vrcholy binárního stromu. Nejvhodnějším typem bude typ záznam: type vrchol = record klic: Integer; pocet: Integer; levy, pravy: TStrom; První položka záznamu, proměnná klic reprezentuje hodnotu umístěnou do tohoto vrcholu stromu. Jelikož je strom uspořádaný (zleva doprava) má každá hodnota své přesné místo ve vrcholu nebo listu stromu a nesní se již v jiném místě stromu opakovat. Proměnná pocet proto udává četnost, neboli počet výskytů dané hodnoty ve stromě, pokud se ve vstupních hodnotách objevuje vícekrát. Poslední dvě položky záznamu levy, pravy reprezentují odkazy na další vrcholy nebo listy stromu a jsou typu směrník, který ukazuje na místo v paměti, kde se vyskytuje další záznam (vrchol) stromu. type TStrom = ^vrchol; Tímto směrníkovým způsobem je zajištěno spojení jednotlivých vrcholů stromu od kořenů až po listy. Abychom ale vždy věděli ve kterém vrcholu strom začíná je nutné vytvořit ještě proměnnou St typu TStrom, která bude vždy obsahovat odkaz na kořen (začátek) stromu. var St: TStrom; 1. Implementace funkce počet vrcholů Tato funkce má za úkol spočítat počet vrcholů v našem již existujícím směrníkovém stromu. function pocetvrcholu(s: TStrom): Integer; result:=1; if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy);
2 Vstupní proměnná je typu TStrom, což je ukazatel na vrchol stromu, aby funkce fungovala správně je pak v programu při jejím volání potřeba zadat odkaz na kořen stromu, tedy proměnnou St. Funkce vrací hodnotu udávající počet vrcholů ve stromě. Funkce funguje rekurzivně, to znamená, že uvnitř volá sama sebe. Tak dochází k stále hlubšímu vnořování se do struktury stromu. Když funkce narazí na konec stromu opět se začíná vynořovat zpět a dochází ke sčítání počtu vrcholů. Funkce tedy nejprve zjišťuje zdali je vrchol, pro který je zavolána prázdný (koncový) nebo ne. Podle toho pak nastaví hodnotu výsledku 0 nebo 1. result:=1; V případě nalezení konce stromu pouze vrací 0 a končí, pokud ale vrchol stromu existuje nastaví hodnotu na 1 a dále pak kontroluje zda tento vrchol stromu má další listy, resp. odkazy na další vrcholy stromu v paměti, to znamená že proměnné levy a pravy odkazující na další vrcholy nejsou prázdné. Nejprve se kontroluje levá větev a pokud odkaz není prázdný znamená to že strom pokračuje i doleva. Proto se opět rekurzivně volá stejná funkce pocetvrcholu pro další z vrcholů stromu. A po návratu je zjištěná hodnota přičtena k výsledku. Počet vrcholů tak narůstá. if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); Stejný postup se pak opakuje i pro pravou větev a dochází tak k větvení na obě strany, čímž je zajištěna úplnost výsledku. if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy); Funkce tedy volá sama sebe tolikrát, kolik je ve stromě vrcholů. Díky rekurzi je algoritmus velmi jednoduchý a univerzální, jeho nároky na paměť jsou však větší. 2. Implementace funkce počet listů Tato funkce má za úkol zjistit počet listů ve stromu, což jsou vlastně vrcholy, které již nemají další větve. Nemají tedy odkazy na levý a pravý vrchol, který by strom dále zvětšoval. Vstupní proměnná je typu TStrom, stejně jako v předchozím případě a pokud chceme prohledat celý strom při jejím volání v programu opět používáme na vstupu proměnnou St, kořen stromu. Funkce vrací počet listů ve stromu. function pocetlistu(s: TStrom): Integer; if (S^.levy=nil) and (S^.pravy=nil) then result:=1 IF s^.levy<>nil then result:=result+pocetlistu(s^.levy); IF s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); Funkce je opět rekurzivní a ve své podstatě velmi podobná předchozí funkci pro zjištění počtu všech vrcholů (i konečných = listů) stromu. Na začátku funkce je podmínka, která zjišťuje zda vstupní vrchol je listem či nikoliv. Tedy pokud je levý i pravý odkaz na další vrcholy stromu prázdný, jedná se o list a funkce přímo vrací hodnotu 1. Znamená to, že narazila na konec stromu. if (S^.levy=nil) and (S^.pravy=nil) then result:=1
3 Pokud ale zkoumaný vstupní vrchol má alespoň jeden odkaz na levý nebo pravý následující vrchol, je třeba aby opět rekurzivně zavolala sama sebe a pokračovala ve zkoumání hlouběji ve stromě. Nejprve však nastaví svou návratovou hodnotu na nula, protože není listem. Dále pak podle toho ve které z větví se nachází další vrchol se vnořuje buď do levé pravé nebo obou částí stromu voláním sama sebe. A při návratu přičítá k dosavadní vlastní zjištěné hodnotě 0 hodnotu výsledku následně volaných instancí funkce. Tím opět dojde k předávání a přičítání hodnot zpětně mezi funkcemi při vynořování. If s^.levy<>nil then result:=result+pocetlistu(s^.levy); If s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); Funkce tedy volá sama sebe tak dlouho, dokud nenarazí na list, jedině ten vrací hodnotu 1, která se zpětně předává a přičítá. Pak dojde k vynořování zpět až k první instanci volané funkce, která vrací kompletní výsledek. 3. Implementace funkce počet listů Funkce vrací součet všech hodnot obsažených ve stromě, v našem případě je to součet proměnných klic které jsou v záznamech jednotlivých vrcholů stromu. Její implementace formou rekurze je velmi jednoduchá. Vstupní proměnná je stejného typu jako v předchozích případech a platí pro ni stejná pravidla. function soucet(s: TStrom): Integer; result:=soucet(s^.levy)+s^.klic+soucet(s^.pravy) Princip rekurze je opět stejný, funkce volá stále opakovaně další instance stejné funkce pro další vrcholy stromu, dokud nenarazí na prázdný vrchol. První podmínka tedy zjišťuje zda se jedná o prázdný nebo existující vrchol. V případě prázdného vrcholu funkce dosadí návratovou hodnotu 0 (prázdný, neexistující vrchol nemá hodnotu) a postupně se vynořuje. Pokud ale vrchol existuje dochází k výpočtu hodnoty a to sečtením hodnoty klíče tohoto vrcholu a vrcholů v levé a pravé následující větvi. Proto funkce volá rekurzivně sama sebe aby zjistila hodnoty v dalších následujících vrcholech. Dochází tak k vnořování. Při vynořování se pak hodnoty sčítají a předávají předchozím instancím funkce kde se opět sčítají a tak pořád dokola dokud nedojde k úplnému návratu ke kořeni stromu s celkovým výsledkem. 4. Implementace funkce hloubka (plytkost) Tato funkce má za úkol zjistit největší a nejmenší hloubku stromu. To znamená největší počet větví (úrovní) od kořene k (nejvzdálenějšímu) listu a nejmenší počet větví od kořene k (nejbližšímu) listu. Abychom mohli jednodušeji provést výpočet je dobré vytvořit pomocné funkce, které nám pomohou zjistit maximu a minimum ze dvou zadaných čísel. function max(a, b: Integer): Integer;
4 if a<b then result:=b result:=a function min(a, b: Integer): Integer; if a<b then result:=a result:=b Samotná funkce hloubka pak rekurzivně, zpětně porovnává a sčítá jednotlivé hloubky ve vrcholech a to tak, že porovnává dosavadně zjištěnou hloubku v levé a pravé větvi. Ta která je větší se předá instanci funkce která pracuje s nadřazeným vrcholem a přičte se k ní hodnota 1 (protože se vzdálenost od kořene zmenšila o další úroveň). Dochází opět k porovnávání. Poslední porovnání se provádí v kořenu stromu, kde se stanoví jednoznačný výsledek. function hloubka(s: TStrom): Integer; if S=nil then result:=-1 result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 Pokud je vstupní vrchol se kterým má funkce pracovat prázdný, znamená to, že je to konec stromu a vrchol již neexistuje, funkce vrací hodnotu -1. if S=nil then result:=-1 pokud ovšem vrchol existuje, funkce volá sama sebe pro vrcholy v levé a pravé větvi a to přímo jako vstupní parametry pomocné funkce max, která zjistí ve které z větví je počet úrovní větší. Tak dochází k vnořování do struktury stromu. Větev s větším počtem doposud zjištěných úrovní je pak vyhodnocena jako max a po přičtení hodnoty 1 je výsledek předán instanci funkce v nadřazeném vrcholu. Tak dochází k vynořování. result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 Funkce pro zjištění plytkosti je podobná jen s tím rozdílem, že zde dochází ke zjišťování a porovnávání minima, čili minimální hloubky ve stromě. Ve vrcholu se vždy vybere zjištěná menší hodnota počtů úrovní v levé a pravé větvi. function plytkost(s: TStrom): Integer; if S=nil then result:=-1 result:=min(plytkost(s^.levy), plytkost(s^.pravy))+1 5. Implementace funkce šířka Funkce šířka zjistí největší šířku stromu, to je největší počet prvků (vrcholů i listů) vedle sebe ve stejné úrovni stromu. Samotná funkce sirka není rekurzivní ale pro svou funkci využívá dvě rekurzivní funkce a to již dříve popsanou funkci hloubka a novou funkci pocetnaurovni. Nejprve tedy vytvoříme novou rekurzivní funkci pocetnaurovni, která má za úkol zjistit šířku stromu v zadané úrovni. Na vstupu bude tedy kromě proměnné obsahující první vrchol stromu (S) i proměnná udávající úroveň (n) na které probíhá zjišťování šířky. function pocetnaurovni(n: Integer; S: TStrom): Integer;
5 if n=0 then result:=1 if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); Při prohledávání stromu se vychází od kořene stromu a s každým dalším v nořením se úroveň n snižuje o 1. To znamená, že funkce nejprve několikrát volá sama sebe (vnořuje se) dokud nedosáhne hodnoty n = 0, čili požadované zjišťované úrovně. Pak teprve vrací hodnotu 1, která indikuje že se ocitla v hledané úrovni a pracuje právě s jedním z vrcholů, který nás zajímá. Poté se začíná vynořovat. if n=0 then result:=1 Pokud ovšem ještě nedosáhla požadované úrovně, a v levé nebo pravé větvi existuje směrník na další podvrchol stromu, volá opět sama sebe, resp. další instanci funkce s odkazem na tento podvrchol a s n-1, jelikož je opět o úroveň hlouběji. Výsledek (result) v této úrovni nejprve nastavuje na 0. if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); Při vynořování pak opět dochází ke sčítání výsledků instancí funkcí z jednotlivých hlubších úrovní a při úplném návratu ke kořeni stromu je vrácená hodnota úplná. Funkce sirka pak pomocí funkce hloubka nejprve zjistí počet úrovní daného stromu a pomocí cyklu (for i) prohledává jednotlivé úrovně stromu od nulté až po poslední (hloubka(s)), přičemž hledá maximální šířku stromu. Výsledek funkce se nejprve nastaví na 0 (result), to znamená že max. šířka stromu je na začátku 0. Pak se porovnává se zjištěnou šířkou dané úrovně (funkce pocetnaurovni), která je průběžně ukládána do proměnné p. Pokud je p větší, výsledek se nastaví na větší zjištěnou šířku stromu. function sirka(s: TStrom): Integer; var i, p: Integer; for i:=0 to hloubka(s) do p:=pocetnaurovni(i, S); if p>result then result:=p Po průchodu všemi úrovněmi stromu, je v p maximální zjištěná šířka stromu. Celý program implementation {$R *.dfm}
6 type TStrom = ^vrchol; vrchol = record klic: Integer; pocet: Integer; levy, pravy: TStrom; var St: TStrom; function pocetvrcholu(s: TStrom): Integer; result:=1; if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy); function pocetlistu(s: TStrom): Integer; if (S^.levy=nil) and (S^.pravy=nil) then result:=1 IF s^.levy<>nil then result:=result+pocetlistu(s^.levy); IF s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); function soucet(s: TStrom): Integer; result:=soucet(s^.levy)+s^.klic+soucet(s^.pravy) function soucetnerekurz(s: TStrom): Integer; var zas: array [1..20] of TStrom; vrch: Integer; vrch:=1; zas[vrch]:=s; repeat if zas[vrch]=nil then Dec(vrch) S:=zas[vrch]; result:=result+s^.klic; zas[vrch]:=s^.levy; Inc(vrch); zas[vrch]:=s^.pravy until vrch=0 function max(a, b: Integer): Integer; if a<b then result:=b result:=a
7 function hloubka(s: TStrom): Integer; if S=nil then result:=-1 result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 function min(a, b: Integer): Integer; if a<b then result:=a result:=b function plytkost(s: TStrom): Integer; if S=nil then result:=-1 result:=min(plytkost(s^.levy), plytkost(s^.pravy))+1 function pocetnaurovni(n: Integer; S: TStrom): Integer; if n=0 then result:=1 if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); function sirka(s: TStrom): Integer; var i, p: Integer; for i:=0 to hloubka(s) do p:=pocetnaurovni(i, S); if p>result then result:=p procedure VytvorBVS(x: Integer; var S: TStrom); if S=nil then new(s); S^.klic:=x; S^.pocet:=1; S^.levy:=nil; S^.pravy:=nil if x<s^.klic then VytvorBVS(x, S^.levy) if x>s^.klic then VytvorBVS(x, S^.pravy) S^.pocet:=S^.pocet+1 procedure TForm2.Button1Click(Ser: TObject); var f: TextFile;
8 a: Integer; button1.enabled := false; button2.enabled := true; button3.enabled := true; button4.enabled := true; button5.enabled := true; AssignFile(f,Edit2.Text); reset(f); while not EOF(f) do readln(f, a); VytvorBVS(a, St) CloseFile(f) procedure TForm2.Button2Click(Ser: TObject); procedure Tisk(h: Integer; S: TStrom); var s1: String; i: Integer; if S<>nil then Tisk(h+1, S^.pravy); s1:=''; for i:=1 to h do s1:=s1+' '; S1:=s1+IntToStr(S^.klic); Memo1.Font.Color:=clRed; Memo1.Lines.Add(s1); Tisk(h+1, S^.levy) var i: Integer; Memo1.Lines.Clear; Tisk(1, St); memo2.lines.clear; Memo2.Font.Color:=clGreen; Memo2.Lines.Add('Počet vrcholů: '+IntToStr(pocetvrcholu(St))); Memo2.Lines.Add('Počet listů: '+IntToStr(pocetlistu(St))); Memo2.Lines.Add('Součet vrcholů: '+IntToStr(soucet(St))); Memo2.Lines.Add('Součet vrcholů: '+IntToStr(soucetnerekurz(St))); Memo2.Lines.Add('Hloubka: '+IntToStr(hloubka(St))); Memo2.Lines.Add('Plytkost: '+IntToStr(plytkost(St))); for i:=0 to hloubka(st) do Memo2.Lines.Add('Úroveň '+IntToStr(i)+' má '+'vrcholů: '+IntToStr(pocetnaurovni(i, St))); Memo2.Lines.Add('Šířka: '+IntToStr(sirka(St))); procedure TForm2.Button3Click(Ser: TObject); procedure Vykresli(x, y, sirka: Integer; S: TStrom); sirka:=sirka div 2; if S<> nil then if S^.levy<>nil then Image1.Canvas.MoveTo(x, y);
9 Image1.Canvas.LineTo(x-sirka, y+30); Vykresli(x-sirka, y+30, sirka, S^.levy) if S^.pravy<>nil then Image1.Canvas.MoveTo(x, y); Image1.Canvas.LineTo(x+sirka, y+30); Vykresli(x+sirka, y+30, sirka, S^.pravy) Image1.Canvas.TextOut(x-5, y-8, IntToStr(S^.klic)) Image1.Canvas.Brush.Color:=clWhite; Image1.Canvas.Brush.Style:=bsSolid; Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height); Image1.Canvas.Pen.Color:=clGray; Image1.Canvas.Brush.Color:=RGB(255,255,150); Vykresli(Image1.Width div 2, 10, Image1.Width div 2, St) procedure TForm2.Button4Click(Ser: TObject); var a: Integer; procedure Zrus(var S: TStrom; x: Integer); var pom: TStrom; function ZrusMin(var S: TStrom): Integer; var pom: TStrom; if S^.levy=nil then result:=s^.klic; pom:=s; S:=S^.pravy; dispose(pom) result:=zrusmin(s^.levy) if S=nil then if x<s^.klic then Zrus(S^.levy, x) if x>s^.klic then Zrus(S^.pravy, x) if (S^.levy=nil) and (S^.pravy=nil) then dispose(s); S:=nil if S^.pravy=nil then pom:=s; S:=S^.levy; dispose(pom) if S^.levy=nil then pom:=s; S:=S^.pravy; dispose(pom) S^.klic:=ZrusMin(S^.pravy) a:=strtoint(edit1.text); Zrus(ST, a); Edit1.Text := ''; Edit1.SetFocus;
10 procedure TForm2.Button5Click(Ser: TObject); procedure Vymaz(var S: TStrom); button1.enabled := true; button2.enabled := false; button3.enabled := false; button4.enabled := false; button5.enabled := false; if S^.levy<>nil then Vymaz(S^.levy); if S^.pravy<>nil then Vymaz(S^.pravy); Dispose(S); S:=nil Vymaz(St); Edit2.SetFocus;.
Předmět: Algoritmizace praktické aplikace
Předmět: Algoritmizace praktické aplikace Vytvořil: Roman Vostrý Zadání: Vytvoření funkcí na stromech (reprezentace stromu haldou). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka 5.
VíceBinární vyhledávací strom. Proč binární? Vyhledávání
Binární vyhledávací strom J e d n á s e o o d rů d u o b e c ně j š í d a t o v é s t r u k t u r y z v a n é s t r o m. P o j e m p o c h á z í z t e o r i e g r a f ů, k d e j e s t r o m e m n a z ý
VíceImplementace 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íceImplementace 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íceBiná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íceAbstraktní datové typy FRONTA
Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do
VíceBiná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íceTest 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
VíceReprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
VíceČ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ícePascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
Více2) 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
Více1. D Y N A M I C K É DAT O V É STRUKTUR Y
1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové
VíceŘešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C
Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat
VíceRadomíra Duží L06615. Datový typ množina
Radomíra Duží L06615 Datový typ množina Množina slouží k uložení prvků stejného bázového ordinárního typu. Bázové typy - jsou typy, jejichž hodnot mohou prvky množiny nabývat. Nesmí obsahovat více než
VíceVyhledá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
VíceImplementace aritmetického stromu pomocí směrníků
Implementace aritmetického stromu pomocí směrníků Úvod Aritmetický strom je binární strom, který má ve vnitřních uzlech matematické operátory (+, -, /, *) a v listech (vrcholech) má operandy (např. čísla
VíceAlgoritmizace řazení Bubble Sort
Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,
VíceImplementace 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íceNPRG030 Programování I, 2018/19 1 / :03:07
NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování
Více1. 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íceVyhledá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Časová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
VíceProgramovací 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íceZákladní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě
Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické
VíceVyuč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íce2. ú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íce5 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ícebfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
VíceZákladní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě
Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické
VíceDatové 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íceAnotace. Jednotky (tvorba a využití), struktury (typ record),
Anotace Jednotky (tvorba a využití), struktury (typ record), medián v lineárním čase. Jednotky oddělený překlad Občas máme obecně využitelné funkce, které chceme používat v různých programech současně.
VíceLogické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false
Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární
VíceProhledá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íce2.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íceKnihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny
Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 Říjen 2012 2 Druhé vydání,
VíceNásobení pomocí sčítání
Neznalost zákonů neomlouvá Násobení pomocí sčítání Zadání problému: Vymyslete algoritmus, jak násobit dvě čísla, když operaci násobení neznáme. Upřesnění zadání: Známe čísla, známe operaci sčítání, odčítání.
VíceAplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu
1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu
VíceŘízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností:
Delphi lekce 7 Minimum z Object Pascalu (část 2) Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností: Větvení cykly větvení volání podprogramů V
VíceAlgoritmizace 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 Grafové úlohy Daniela Szturcová Tento
VícePrioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
VíceBinární soubory (datové, typované)
Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i
VíceStandardní 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íceKnihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny
Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny 1 TXV 003 56.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá DataBoxLib_v14 OBSAH 1 Úvod...3
VíceDynamické 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íceGrafové 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ícedovolují dělení velkých úloh na menší = dekompozice
Podprogramy dovolují dělení velkých úloh na menší = dekompozice Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
VíceGrafové 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ícePřednáška 3. Rekurze 1
Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady
VíceAlgoritmy 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ícebfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Vícetype Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;
Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá
VíceSada 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íceCZ.1.07/1.5.00/
Celá čísla Celočíselný typ má označení INTEGER. Kromě tohoto základního jsou k dispozici ještě další celočíselné typy, které uvádí následující tabulka. Každý typ umožňuje definovat určitý rozsah celých
VíceAlgoritmizace 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
VíceStruktura 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ů
VíceTGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
Vícepopel, glum & nepil 16/28
Lineární rezoluce další způsob zjemnění rezoluce; místo stromu směřujeme k lineární struktuře důkazu Lineární rezoluční odvození (důkaz) z Ë je posloupnost dvojic ¼ ¼ Ò Ò taková, že Ò ½ a 1. ¼ a všechna
VíceNMIN102 Programování /2 Z, Zk
NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer Pavel
VíceTGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
VíceRekurze. Pavel Töpfer, 2017 Programování 1-8 1
Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo
Víceint ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
VíceAlgoritmizace 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íceKnihovna XmlLib TXV 003 63.01 první vydání prosinec 2010 změny vyhrazeny
Knihovna XmlLib TXV 003 63.01 první vydání prosinec 2010 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 OBSAH 1 Úvod...3 2
VíceSyntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava
Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku
Více3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem
ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte
VíceZákladní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
VícePřednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.
Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu
VíceNáznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.
Jednoduchý interpretační překladač Náznak ukázky syntaxe a sémantiky pro projekt Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 8. ledna 2008 1 Syntaktické
VíceBasic256 - ú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íceAnotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,
Anotace Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), základní třídicí algoritmy. Soubory a práce s nimi Dnes budou pouze soubory textové. Textový soubor ovládáme pomocí proměnné
VíceEVROPSKÝ 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íceAplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom
8 Podklady ředmětu ro akademický rok 2013/2014 Radim Farana Obsah 2 Dynamické datové struktury. Strom. Binární stromy. Vyhledávací stromy. Vyvážené stromy. AVL stromy. Strom 3 Název z analogie se stromy.
Více1 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íceStromy, 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íceDynamické 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é
VíceOSTRAVSKÁ UNIVERSITA V OSTRAVĚ Pedagogická fakulta Obor informační technologie ve vzdělávání Kombinované studium
OSTRAVSKÁ UNIVERSITA V OSTRAVĚ Pedagogická fakulta Obor informační technologie ve vzdělávání Kombinované studium Implementace aritmetického stromu pomocí haldy David Farber L06617 16.05.2007 Úvod Aritmetický
VíceCvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox
Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox 1 Opakování kreslení do Image 1. Canvas = plátno - Color, Caption Nastavení typu čáry pro kreslení perem Pen: barva Image1.Canvas.Pen.Color
VíceHomer. 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íceNPRG030 Programování I, 2017/18 1 / :22:16
NPRG030 Programování I, 2017/18 1 / 26 20. 10. 2017 11:22:16 Ordinální typy standardní: integer, char, boolean Vlastnosti ordinálních typů: 1. hodnot je konečný počet a hodnoty jsou uspořádány 2. ke každé
VícePODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2
PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C
VíceStromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy
Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný
VíceIAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
VíceSelect sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání
Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít
VíceALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
VíceALGORITMIZACE 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íceProgramová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
VíceÚloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů
Stavový prostor a jeho prohledávání SP = formalismus k obecnějšímu uchopení a vymezení problému, který spočívá v nalezení posloupnosti akcí vedoucích od počátečního stavu úlohy (zadání) k požadovanému
VíceInterpret jazyka IFJ2011
Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:
VíceZadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.
TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců. Zadání: V textovém souboru text.txt je uloženo několik řádků textu. Vytvořte makro, které určí nejdelší řádek z daného souboru. 1. Název
VíceAlgoritmizace. 1. Úvod. Algoritmus
1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá
VíceKolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín
Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit
VíceUkazatel (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
VícePARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ
KATEDRA INFORMATIKY, PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ Slajdy vytvořili Vilém Vychodil a Jan Konečný (KI, UP Olomouc) PP 2, Lekce
Více6 Příkazy řízení toku
6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní
VíceRekurzivní algoritmy
Rekurzivní algoritmy 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) ZS
VíceNPRG030 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íceOptimalizace & soft omezení: algoritmy
Optimalizace & soft omezení: algoritmy Soft propagace Klasická propagace: eliminace nekonzistentních hodnot z domén proměnných Soft propagace: propagace preferencí (cen) nad k-ticemi hodnot proměnných
VíceAnotace. Pointery. Martin Pergel,
Anotace Pointery K čemu jsou dynamické proměnné? K mnoha algoritmům bychom potřebovali pole proměnlivé délky nebo aspoň jinou datovou strukturu proměnlivé délky. Jak implementovat frontu a zásobník? Použijeme
VíceMartin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od
IB000 Lámání čokolády Martin Milata, 27.11.2007 1 Čokoláda s alespoň jedním sudým rozměrem Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už
Více