Implementace binárního stromu směrníky
|
|
- Magdalena Hrušková
- před 7 lety
- Počet zobrazení:
Transkript
1 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ů. Strom (viz obr. 1) je útvar složený z vrcholů (uzlů) a hran s následujícím tvarem. Jeden význačný vrchol zcela nahoře, kterým se vstupuje do celého stromu, se nazývá kořen stromu. Tento vrchol má několik následovníků (synů) se kterými je spojen hranami. Každý vrchol může mít své následovníky a ti zase svoje atd. Žádný vrchol není následovníkem dvou nebo více vrcholů současně, naopak každý vrchol s výjimkou kořene má pouze jednoho předchůdce (otce). Vrcholy, které nemají žádné další následovníky, se nazývají listy stromu. Vrcholy s výjimkou kořene jsou vnitřními vrcholy stromu. Útvar s prázdnou strukturou je prázdný strom. Četnost stromu je maximální počet následovníků, které má některý z jeho vrcholů. Cesta od kořene k některému z vrcholů se nazývá větev. Jelikož stromy neobsahují cykly, je větev jednoznačně určena. Hloubka stromu je délka cesty (počet hran) maximální větve. Udává maximální vzdálenost mezi kořenem stromu a některým z listů. Strom, který má maximálně 2 následovníky se nazývá binární strom (obr. 2). Obyčejný binární strom je binární strom bez jakékoliv organizované formy jednotlivých prvků. V programové reprezentaci řešení binárních stromů směrníky, jsou vrcholy záznamy a nesou jednak informaci a jednak odkazy na další vrcholy. Hrany jsou reprezentovány směrníky a určují vazby mezi jednotlivými vrcholy. Pro binární stromy, kde vrchol smí mít maximálně dva následovníky, užíváme směrníky s názvy Levý a Pravý, přičemž ukazují sestupování ve směru listů. Část nesené informace tvoří klíč (obr. 3). Strana 1 (celkem 16)
2 Stromy se nejčastěji zobrazují grafickou interpretací, viz následující obrázky. obr.1 Strom 1 Kořen 1 Vnitřní vrcholy 2,3,5,8 2 3 Listy 4,6,7, obr.2 Binární strom Kořen Vnitřní vrcholy 2,3,4,8 Listy 5,6,7, obr.3 Binární strom se znázorněnými směrníky Strom Strom Klíč 1 Levý Pravý Klíč 2 Levý Pravý Klíč 3 Levý Pravý Klíč 4 Levý Pravý Klíč 5 Levý Pravý Klíč 6 Levý Pravý Klíč 7 Levý Pravý Klíč 8 Levý Pravý Klíč 9 Levý Pravý Strana 2 (celkem 16)
3 2. Datový typ směrník Pro implementace binárního stromu se směrníky se vrátíme ke zopakování obecných zásad datového typu směrník. Směrník (užíváno též ukazatel, anglicky pointer), představuje zcela odlišný způsob práce s pamětí. U všech statických proměnných lze jednoduše určit dobu jejich existence. Globální existují po celou dobu existence programu, lokální proměnné podprogramu vznikají v okamžiku jeho startu a jsou zrušeny, jakmile podprogram končí. Beze změn zůstávají jejich deklarované vlastnosti. Proměnná zpřístupněná prostřednictvím směrníku se nazývá dynamicky alokovaná proměnná. Příkaz k jejímu vytvoření musí být naprogramován. Obdobně musí být dán pokyn i pro její zrušení. Dynamicky alokované proměnné a z nich vytvořené konstrukce vznikají až za běhu programu podle současné situace. Není nutné předem stanovit, kolik jich přesně bude a kdy přesně budou existovat. Směrník v sobě neuchovává konkrétní hodnotu nějakého prvku, ale uchovává v sobě adresu prvku v operační paměti počítače. Adresa, kterou směrník obsahuje, může ukazovat do libovolné části operační paměti. Směrník ukazuje vždy na proměnnou určitého typu. Existují různé typy směrníku, vždy podle datového typu dynamické proměnné, na kterou směrník ukazuje. Každý nový směrník tedy slouží jedné dynamické proměnné. Definice směrníku obsahuje právě jméno daného typu s předchozím operátorem nepřímé adresace ^. Např. typ SmeInteger, který je směrníkem na Integer se definuje takto type SmeInteger = ^ Integer ; var Cislo : SmeInteger ; Strana 3 (celkem 16)
4 Proměnná Cislo takto bude obsahovat směrník na dynamicky alokovanou proměnnou typu Integer. Obsahem proměnné Cislo bude adresa, která má být interpretována jako adresa počátku proměnné typu Integer. Alokace paměti Alokování paměti se vyžádá prostřednictvím standardní procedury New ( <Směrník> ) ; Jejím parametrem je proměnná typu směrník. New zjistí typ tohoto směrníku a najde někde kousek paměti odpovídající velikosti. Tento kousek paměti si označí za obsazený a do proměnné uloží adresu jeho začátku. Pro náš započatý případ provedeme New ( Cislo ) ; Tím se alokuje v paměti místo pro proměnnou typu Integer a jeho adresa se uloží do proměnné Cislo. Od tohoto okamžiku Cislo ukazuje na tuto dynamicky alokovanou proměnnou. Graficky znázorněno Tímto je proměnné přidělena paměť a směrník naplněn adresou. Zápis, který uloží trojku do proměnné, na kterou ukazuje Cislo zapíšeme takto Cislo^ := 3; a graficky zobrazeno Strana 4 (celkem 16)
5 Na tutéž dynamicky alokovanou proměnnou může odkazovat několik směrníků, stačí jen přiřadit mezi sebou jejich hodnoty. Např. použijeme další deklarovanou proměnnou Nejmenši typu Integer a zapíšeme příkazy New ( Cislo ) ; Cislo^ := 3; Nejmensi := Cislo; přičemž vzniká tato situace, kdy oba směrníky obsahují adresu stejné proměnné. Pozor na zdánlivě obdobnou možnost New ( Cislo ) ; Cislo^ := 3; New ( Nejmensi ); Nejmensi^ := Cislo^; Zde čtvrtý příkaz říká do proměnné, na kterou ukazuje Nejmensi, ulož obsah proměnné, na kterou ukazuje Cislo. Zde se jedná o dvě zcela samostatně dynamicky alokované proměnné, jejichž obsahy přiřazujeme. Pak znázorněno Uvolnění paměti Dynamicky alokované proměnné jsou ručně vytvářeny a stejně i zanikají, pro odstranění se používá procedura Strana 5 (celkem 16)
6 Dispose ( <Směrník> ) Parametrem je opět proměnná typu směrník. Dynamicky alokovaná proměnná na kterou ukazuje, bude zrušena a jí vyhražená paměť se uvolní pro další použití. Obsah směrníku je po provedení Dispose nedefinován. Příkaz Dispose ( Cislo); povede k likvidaci proměnné, na kterou ukazuje Cislo. Konstanta nil. Tato speciální konstanta symbolizuje, že daný směrník nikam nevede. Nil je univerzální a lze ji přiřadit libovolnému směrníku bez ohledu na jeho konkrétní typ. Je nutno dobře rozlišovat směrník s nedefinovanou hodnotou a směrník s hodnotou nil. Hodnota směrníku je na začátku nebo po provedení Dispose nedefinována. Pokud však směrníku přiřadíme nil, jeho hodnota definována je, jen její směrník právě neukazuje na žádnou dynamickou proměnnou. Směrníky stejného typu lze navzájem porovnávat, povoleny jsou však pouze testy na rovnost ( = ) a nerovnost ( < > ). Dva směrníky jsou si rovni, pokud obsahují stejnou adresu (ukazují na tutéž proměnnou). 3. Implementace binárních stromů Strana 6 (celkem 16)
7 Strukturu typu strom lze definovat jako prázdnou strukturu, tj. prázdný strom, nebo jako vrchol (prvek), ke kterému je připojen konečný počet stromových struktur, nazývaných podstromy. Jinak řečeno každý strom je tvořen dalšími stromy, pro které platí tatáž definice. Definice stromu je tedy rekurzivní, což se promítne v použitých algoritmech, které budou obsahovat rekurzivní podprogramy. Vrchol u stromové struktury lze obecně deklarovat takto: Type SmeVrchol = ^vrchol; vrchol = record datovaslozka : TypDatoveSlozky; levypodstrom, pravypodstrom : SmeVrchol Vrcholy jsou reprezentovány dynamickými proměnnými stejného typu záznam. Ze zápisu je patrné, že položky levypodstrom a pravypodstrom jsou opětně definovány jako typ směrník na strom. Při realizaci určité funkce či procedury, která má být uskutečněna nad všemi vrcholy, je třeba celým stromem projít a všechny vrcholy navštívit. K průchodu binárním stromem nám slouží tři rekurzivní metody, které se od sebe liší vzájemným pořadím provedení dané operace nad daným vrcholem (uzlem) a průchodem oběma podstromy. Metody s názvy Preorder, Inorder a Postorder si ukážeme na programové realizaci procedury, jejímž parametrem je směrník na zpracovávaný vrchol. 1. Procedura Preorder nejprve provádí danou operaci nad daným vrcholem (uzlem), poté provede průchod levým podstromem a nakonec pravým podstromem. procedure Preorder(Strom : SmeVrchol); if Strom <> nil then {neprázdný vrchol pro prohledávání? } {operace nad daným vrcholem} Preorder(Strom^.levypodstrom); {průchod levým podstromem} Preorder(Strom^.pravypodstrom); {průchod pravým podstromem} Strana 7 (celkem 16)
8 2. Procedura Inorder projde nejdříve levým podstromem, na to zpracuje operaci nad daným vrcholem a nakonec projde pravým podstromem. procedure Inorder(Strom : SmeVrchol); if Strom <> nil then Inorder(Strom^.levypodstrom); Inorder(Strom^.pravypodstrom); {průchod levým podstromem} {operace nad daným vrcholem} {průchod pravým podstromem} 3. Procedura Postorder projde nejdříve levým podstromem, na to projde pravým podstromem a nakonec zpracuje operaci nad daným vrcholem. procedure Preorder(Strom : SmeVrchol); if Strom <> nil then Preorder(Strom^.levypodstrom); Preorder(Strom^.pravypodstrom); {průchod levým podstromem} {průchod pravým podstromem} {operace nad daným vrcholem} Pokud bychom aplikovali tyto tři metody průchodu binárním stromem pro obrázek č. 2 (respektive také obr. 3), získali bychom výpisy s pořadím číselných položek: preorder: 1, 2, 4, 8, 9, 5, 3, 6, 7 inorder: 4, 8, 9, 2, 5, 1, 6, 3, 7 postorder: 9, 8, 4, 5, 2, 6, 7, 3, 1 Strana 8 (celkem 16)
9 5. Aplikace konkrétního programu s demonstrací operací pro binární strom. 5.1 Vytvoření binárního stromu Deklarace pro řešený příklad: type TStrom = ^vrchol; vrchol = record Klic: Integer; levy, pravy: TStrom var St,nalezeny: TStrom; {deklarace směrníku na kořen stromu} {a pomocného směrníku pro hledání vrcholu } Idx: Integer; {pomocné počítadlo vrcholů} Vytvoření stromu je prováděno pomocí globální procedury VytvorStrom. V ní probíhá vždy náhodný výběr pro nastavení směrníků a tím určení cesty doleva nebo doprava. Následuje zjišťování, zda existuje volná pozice pro nový vrchol (uzel), pro vybraný směrník. Následně proběhne vytvoření vrcholové proměnné pro pomocný směrník, uložení hodnoty do nového vrcholu, vynulování pomocných směrníků pro nové následovníky (potomky) a napojení tohoto vrcholu (prozatímního listu) na směrník předchůdce (otce). Tím je dosaženo vytvoření stromu s předem nedefinovanou strukturou. procedure VytvorStrom(var S: TStrom; cis: Integer); var pom: TStrom; if random(2) = 0 then {náhodný výběr cesty doleva-doprava} if S^.levy = nil then {zjištění volné pozice pro nový vrchol (uzel)} new(pom); pom^.klic := cis; {odkaz na proměnnou kam ukazuje směrník } pom^.levy := nil; pom^.pravy := nil; {vynulování pro vytvoření listu} Strana 9 (celkem 16)
10 S^.levy := pom else VytvorStrom(S^.levy, cis) {rekurzívně pokračování do levého podstromu} else if S^.pravy = nil then new(pom); pom^.klic := cis; pom^.levy := nil; pom^.pravy := nil S^.pravy := pom else VytvorStrom(S^.pravy, cis) {rekurzívně pokračování do pravého podstromu} K iniciování globální procedury VytvorStrom je sestavena procedura Vytvor_BSClick. V jejím těle probíhá operace zajišťující vytvoření kořenu s hodnotou 1 a následných vrcholů s hodnotami až do velikosti žádané hodnoty. procedure TForm1.Vytvor_BSClick(Ser: TObject); var i: Integer; {část programu pro vytvoření stromu s voláním procedury VytvorStrom} new(st);st^.levy := nil; St^.pravy := nil; St^.Klic := 1; for i := 2 to StrToInt(Edit_vytvor.text) do VytvorStrom(St,i); Idx := StrToInt(Edit_vytvor.text); Pro inicializaci náhodného generátoru hodnot je použito příkazu Randomize procedure TForm1.FormCreate(Ser: TObject); Randomize 5.2 Vykreslení a tisk vytvořeného binárního stromu Pro vykreslení struktury stromu je použita procedura Kresli_BSClick, která s využitím rekurzívní lokální procedury vykreslí na plátno grafickou strukturu vytvořeného stromu metodou postorder. procedure TForm1.Kresli_BSClick(Ser: TObject); procedure Kresli(S: TStrom; x, y, sirka: Integer); sirka := sirka div 2; if S <> nil then {neprázdný vrchol pro kreslení? } if S^.levy <> nil then {vykreslení hran vlevo} Strana 10 (celkem 16)
11 Image1.Canvas.MoveTo(x, y); Image1.Canvas.LineTo(x-sirka,y+30); Kresli(S^.levy, x-sirka, y+30, sirka); if S^.pravy <> nil then {vykreslení hran vpravo} Image1.Canvas.MoveTo(x, y); Image1.Canvas.LineTo(x+sirka,y+30); Kresli(S^.pravy, x+sirka, y+30, sirka); Image1.Canvas.TextOut(x-5, y-8, IntToStr(S^.Klic)); {zápis potomka} {tělo procedury zajišťující vymazání plátna a parametrizování volané procedury} Image1.Canvas.Brush.Color := clwhite; Image1.Canvas.Brush.Style := bssolid; Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height); Kresli(St, Image1.Width div 2, 30, Image1.Width div 2) Tisk stromu pracuje při tisku s typem řetězec, nemá tedy při výpisu řešeno zobrazení hran a pro jistou zjednodušenost řešení je zobrazená struktura pootočena o devadesát stupňů proti směru hodinových ručiček. Tvorba zobrazení je opět řešena rekurzívní lokální procedurou. procedure TForm1.Tisk_BSClick(Ser: TObject); procedure tisk(s: TStrom; h: Integer); var S1: String; j: Integer; if S <> nil then {realizace rozepsání vrcholů} tisk(s^.pravy, h+1); {hloubka (sloupec) pro pravého následníka} s1 := ''; for j := 1 to h do s1 := s1+' '; s1 := s1+inttostr(s^.klic); {realizace zvyšování hloubky následníkům} Memo1.Lines.Add(s1); {výpis hodnoty vrcholu} tisk(s^.levy, h+1) Memo1.Lines.Clear; tisk(st, 1) {hloubka (sloupec) pro levého následníka} 5.3 Prohledávání a uspořádání vytvořené struktury binárního stromu Strana 11 (celkem 16)
12 K prohledávání stromu používáme metody preorder, inorder a postorder dle obecného základu vysvětleného výše. V řešeném příkladu je vždy pro jednotlivé metody sestavena lokální procedura s výpisem zjištěných posloupností hodnot (pro ukázku metoda preorder): procedure TForm1.PreorderClick(Ser: TObject); procedure Preorder(S: TStrom); if S <> nil then {neprázdný vrchol pro prohledávání? } Memo2.Lines.Add(IntToStr(S^.Klic)); Preorder(S^.levy); Preorder(S^.pravy) {výpis hodnoty klíče} Memo2.Lines.Clear; Preorder(St) {vymazání obsahu okna pro výpis} Pro konkrétní příklad byly vytvořeny tři globální procedury Preorder_Hledej, Inorder_Hledej a Postorder_Hledej, které jsou používány i pro další algoritmy demonstrující základní operace na stromech. Při nalezení je nastaven pomocný globální směrník nalezeny jako směrník na nalezený hledaný vrchol(uzel). Ukázkou je sestavená procedura Preorder_Hledej: procedure Preorder_Hledej(S:TStrom; Hledany: Integer); if S <> nil then {neprázdný vrchol pro prohledávání? } if (S^.Klic = Hledany) then nalezeny := S; {směrník nastaven na hledaný} {vrchol} if(nalezeny = nil ) then Preorder_Hledej(S^.levy,Hledany); {pokud nenalezen prohledává se dále} {rekurzívní postup do levého podstromu} if(nalezeny = nil ) then Preorder_Hledej(S^.pravy,Hledany); {rekurzívní postup do pravého podstromu} Strana 12 (celkem 16)
13 5.4 Přidání vrcholu (uzlu) do vytvořeného binárního stromu Přidání vrcholu je sestaveno s pomocí procedury jedné ze tří metod průchodu stromem. Lze rozhodovat o směru strany kde se po vyhledání určující hodnoty vytvoří levý nebo pravý následovník. Do něj je pak vložena hodnota pomocného globálního počitadla Idx, které je při vytvoření a přidání vrcholu zvyšována. Jelikož jsou procedury shodné, závislé jsou jen od určení metod a směru je ukázkou jen sestavená procedura Pridej_Preorder_PClick (pro směr doprava): procedure TForm1.Pridej_Preorder_PClick(Ser: TObject); var kampridat,novy:tstrom; nalezeny := nil; Preorder_Hledej(St,StrToInt(Edit_kam.text)); {vyhledání vrcholu, kde se nový přidá} kampridat := nalezeny; if(kampridat <> nil) then {existuje vrchol kde se navazuje? } if(kampridat^.pravy = nil) then {pokud je pravý směrník volný, } { navazuj nový vrchol} new(novy); inc(idx); novy^.klic := Idx; novy^.levy := nil; novy^.pravy := nil; kampridat^.pravy := novy; 5.5 Vyhledání hodnoty ve vytvořeném binárním stromě K vyhledání vrcholu je využito globální procedury Preorder_Hledej (případně dalšími metodami). Nalezená hodnota je porovnávána s hledanou hodnotou a následně je indikován výsledek hledání. procedure TForm1.Hledej_PreorderClick(Ser: TObject); nalezeny := nil; Preorder_Hledej(St,StrToInt(Edit_hledej.Text)); If (nalezeny <> nil) then Label1.Caption := 'NALEZENO' else Label1.Caption := 'NENALEZENO'; 5.6 Rušení vrcholu (uzlu) vytvořeného binárního stromu Strana 13 (celkem 16)
14 Odstranění vrcholu (uzlu) ze stromu je poněkud složitější záležitost, zvláště pak jedná-li se o nijak neuspořádaný binární strom a nelze použít některých zjednodušujících operací s jasnými pravidly pro strukturu stromu. Složitost přináší fakt, že existují rozdílnosti vrcholu, listu a kořene, ale zejména nemá dojít k rozpadu struktury binárního stromu. Uváděné řešení rušení vrcholu (uzlu) probíhá ve třech fázích : - kontrolní hledání, odpojení od rodiče a samotné rušení vrcholu (uzlu). Tělo procedury Zrus_VrcholClick vykonává nejdříve hledání žádaného vrcholu (uzlu) pomocí definované globální procedury Preorder_Hledej. Když nenalezne žádanou hodnotu vrcholu, tak hledání končí s indikací stavu. Při nalezení hodnoty je zjišťováno zda jde o list. Následně pak odpojíme tento vrchol (uzel) od předchůdce (otce) ve stromu (pokud není kořenem). Pokud je žádaný vrchol kořenem, rušíme přímo známý kořen. Pokud není kořen, rušíme nalezený obecný nekořenový vrchol. Pokud se vůbec nejedná o list, použije se funkce prenesprvnilist. V ní hledaný uzel není fyzicky rušen, ale jeho hodnota je nahrazena některou (dle podmínek) z listových z jeho podstromu. Použitý list je odebrán ze struktury stromu. procedure TForm1.Zrus_VrcholClick(Ser: TObject); {funkce, která vybere hodnotu (klíč) přenášeného listu nahrazujícího rušený vrchol} function prenesprvnilist(var S:TStrom):Integer; var pom:integer; {pokud je levý směrník neprázdný pokračuj v hledání vhodného listu} if (S^.levy <> nil) then result := prenesprvnilist(s^.levy) else if(s^.pravy <> nil) then result := prenesprvnilist(s^.pravy) else {nalezen list jehož hodnota je předána rušenému uzlu} pom := S^.Klic; dispose(s); S := nil; result := pom; {vracíme hodnotu nalezeného listu} { je vybírán ukazatel na skutečného předchůdce mazaného vrcholu stromu a ten je následně} { ztotožněn (pomoci var delkarace) s globálním pomocným ukazatelem pojmenovaný nalezeny } procedure Preorder_Hledej_Vymaz(var S:TStrom; Hledany: Integer); if S <> nil then if (S^.Klic=Hledany) then nalezeny:=s; if(nalezeny = nil ) then Strana 14 (celkem 16)
15 Preorder_Hledej_Vymaz(S^.levy,Hledany); {pokud je nalezený hledaný vrchol mým levým potomkem pak jsem jeho předchůdcem} if( (nalezeny <> nil) and (S^.levy^.Klic = Hledany) ) then S^.levy := nil; if(nalezeny = nil ) then Preorder_Hledej_Vymaz(S^.pravy,Hledany); {pokud je nalezený hledaný vrchol mým pravým potomkem pak jsem jeho předchůdcem} if( (nalezeny <> nil) and (S^.pravy^.Klic = Hledany)) then S^.pravy := nil; nalezeny := nil; {klasické nalezení vrcholu} Preorder_Hledej(St,StrToInt(Edit_zrus.Text)); if(nalezeny = nil) then Label2.Caption := 'NENÍ HODNOTA' else {zjištění jestli je nalezený ukazatel na list stromu} if( (nalezeny^.levy = nil) and (nalezeny^.pravy = nil)) then nalezeny := nil; {předchůdci mazaného vrcholu odejmeme směrník na nalezený hledaný vrchol} {a zároveň znovu nalezneme hledaný vrchol} Preorder_Hledej_Vymaz(St,StrToInt(Edit_zrus.Text)); {pokud nemá klíč předchůdce, je kořenem a může byt zrušen } { (dealokován a směrník na kořen je nastaven na nil) } if(st^.klic = nalezeny^.klic) then dispose(st); St := nil; else dispose(nalezeny); nalezeny := nil; else {nalezený-rušený není listem, je nutné použít 'pouze' přenos hodnoty z listu} {do rušeného vrcholu, tedy tento vrchol není fyzicky odebrán ze stromu, } {pouze jeho hodnota je nahrazena hodnotou prvního nalezeného listu z jeho } { podstromu, který je také následně zrušen} Strana 15 (celkem 16)
16 if(nalezeny <> nil) then nalezeny^.klic := prenesprvnilist(nalezeny); Na závěr lze uvést případné zrušení celé struktury binárního stromu. Algoritmus by byl již několikrát opakovaný postup rekurzívního průchodu stromem s metodou postorder. Takto by došlo k vymazání a vynulování všech vrcholů (uzlů) ve stromu. Pro prázdný strom dojde k indikaci stavu. procedure TForm1.Zrus_BS_s_pruchodemClick(Ser: TObject); procedure Vymaz(var S: Strom) if S = nil then Label2.Caption := 'NENÍ UŽ STROM' else if S^.levy<>nil then Vymaz(S^.levy); if S = nil then Label2.Caption := 'NENÍ UŽ STROM' else if S^.pravy<>nil then Vymaz(S^.pravy); Dispose(S); S := nil Vymaz(St) Jistě by šlo i zvážit jednoduchou proceduru smazání a vynulování pouze kořene procedure TForm1.Zrus_BS_korenClick(Ser: TObject); Dispose(St); St := nil; Binární strom i se svou strukturou bude zdánlivě zrušen, je potřeba si uvědomit, že v paměti zůstaly alokovány původní vrcholy (adresy s hodnotami), což by mohlo vést u rozsáhlých stromů, respektive znovu vytvářených stromů, až k zablokování systému! K závěru uvádím, že v případně realizovaném příkladu dle uváděných programových struktur je nutno pro demonstraci zkoušené operace vždy znovu iniciovat kreslení, respektive tisk struktury binárního stromu. Toto není řešeno uváděnými programy. Strana 16 (celkem 16)
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í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í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ícePř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í 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í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í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í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í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í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í 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í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íceDynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
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íceSTROMOVE 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í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íceProgramování v C++ 1, 16. cvičení
Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené
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íceCí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íceADT STROM Lukáš Foldýna
ADT STROM Lukáš Foldýna 26. 05. 2006 Stromy mají široké uplatnění jako datové struktury pro různé algoritmy. Jsou to matematické abstrakce množin, kterou v běžném životě používáme velice často. Příkladem
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í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í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í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íceDynamické datové struktury IV.
Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra
VíceVyhledá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íceDynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
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í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í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í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íceBinární vyhledávací stromy II
Binární vyhledávací stromy II doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 19. března 2019 Jiří Dvorský (VŠB TUO) Binární vyhledávací
VíceProgramová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íceGrafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.
Grafy 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) Grafy 104 / 309 Osnova přednášky Grafy
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í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í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íceObsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest
Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem
VíceZá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í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 Datové struktury Daniela Szturcová
VíceSpojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
VíceÚvod do teorie grafů
Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí
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í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í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í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íceStromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.
Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
Více4 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í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í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í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í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í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íceAlgoritmy výpočetní geometrie
Algoritmy výpočetní geometrie 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)
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íceStromy. Jan Hnilica Počítačové modelování 14
Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A
VíceStromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý
VíceZdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.
1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste
VícePokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
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í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íceLineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
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íceMaturitní 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íceIB108 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íceAmortizovaná 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íceSemestrá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íceZáklady algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
VíceAlgoritmizace 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íceVolné 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í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 Datové struktury Daniela Szturcová
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íceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
VíceAlgoritmy II. Otázky k průběžnému testu znalostí
Algoritmy II Otázky k průběžnému testu znalostí Revize ze dne 19. února 2018 2 Lineární datové struktury 1 1. Vysvětlete co znamená, že zásobník představuje paměť typu LIFO. 2. Co je to vrchol zásobníku?
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íceDijkstrů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Ú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ícePokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
VíceNový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.
Průběžná klasifikace Nová verze modulu Klasifikace žáků přináší novinky především v práci s průběžnou klasifikací. Pro zadání průběžné klasifikace ve třídě doposud existovaly 3 funkce Průběžná klasifikace,
VíceSlepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p
Hanojská věž Stavový prostor 1. množina stavů S = {s} 2. množina přechodů mezi stavy (operátorů) Φ = {φ} s k = φ ki (s i ) zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah
VíceDynamické datové struktury II.
Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
VíceZáklady umělé inteligence
Základy umělé inteligence Automatické řešení úloh Základy umělé inteligence - prohledávání. Vlasta Radová, ZČU, katedra kybernetiky 1 Formalizace úlohy UI chápe řešení úloh jako proces hledání řešení v
VíceDefinice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:
B-Strom Definice B-stromu B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí: 1. Počet klíčů v každém vnitřním uzlu, je o jednu menší než je počet následníků (synů) 2.
VíceProgramování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
VíceObsah. 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í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íce2 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íceBinární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
VíceRekurze 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ícePole 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íceRadek Mařík
2012-03-20 Radek Mařík 1. Pravá rotace v uzlu U a) v podstromu s kořenem U přemístí pravého syna U.R uzlu U do kořene. Přitom se uzel U stane levým synem uzlu U.R a levý podstrom uzlu U.R se stane pravým
VícePointery II. Jan Hnilica Počítačové modelování 17
Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky
VícePODPROGRAMY PROCEDURY A FUNKCE
PODPROGRAMY PROCEDURY A FUNKCE Programy bez podprogramů Příklady: a) Napište program, který na obrazovku nakreslí čáru složenou ze znaků pomlčka. program Cara; b) Napište program, který na obrazovku nakreslí
VíceProfilová část maturitní zkoušky 2017/2018
Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2017/2018 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA
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í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 Algoritmus Daniela Szturcová Tento
VíceReliance 3 design OBSAH
Reliance 3 design Obsah OBSAH 1. První kroky... 3 1.1 Úvod... 3 1.2 Založení nového projektu... 4 1.3 Tvorba projektu... 6 1.3.1 Správce stanic definice stanic, proměnných, stavových hlášení a komunikačních
VíceSoftware602 Form Designer
Software602 Form Designer Javascriptový vyhodnocovací mechanismus výrazů Aktualizováno: 17. 3. 2017 Software602 a.s. Hornokrčská 15 140 00 Praha 4 tel: 222 011 602 web: www.602.cz e-mail: info@602.cz ID
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íce