diff --git a/tasks.json b/tasks.json index 8d3d7f9..7a41b13 100644 --- a/tasks.json +++ b/tasks.json @@ -2186,7 +2186,7 @@ "type": "text", "comment": "https://ksp.mff.cuni.cz/kucharky/zakladni-algoritmy/", "requires": [ - "kucharka-zakladni-knihovny" + "28-Z2-4" ], "title": "Grafy", "htmlContent": "

Grafy

S nějakými grafy jste se již možná potkali, ale tento pojem je bohužel docela přetěžovaný. Jedním jeho významem jsou „koláčové grafy“ a jiné další diagramy znázorňující nějaký poměr (ať už to jsou výsledky voleb, nebo poměr lidí, kteří sledovali v televizi Večerníček).

Další význam můžeme nalézt v analytické matematice, kde se potkáme s grafy průběhu nějakých funkcí. My však nemáme na mysli ani jedno z výše zmíněných, teď se budeme bavit o kombinatorických grafech.

Grafem tedy máme na mysli nějakou množinu objektů, říkejme jim vrcholy, a nějaké vztahy mezi nimi. Tyto vztahy nazýváme hranami a jsou vyjádřené dvojicemi vrcholů, mezi kterými vedou. Ukázku takového grafu vidíme třeba na následujícím obrázku.

\"Graf\"

Jako praktickou ukázku grafu si můžeme například představit silniční síť nějakého státu: vrcholy budou města a hrany budou silnice, které mezi nimi vedou.

Občas se můžete setkat s pojmem souvislý graf. Ten znamená jen to, že mezi každými dvěma vrcholy existuje nějaká cesta. Pokud tomu tak není, je graf nesouvislý a dá se rozložit na několik menších grafů, které již souvislé jsou a říká se jim komponenty souvislosti.

Samotný graf poté můžeme doplnit tím, že si v každém vrcholu nebo na každé hraně budeme pamatovat nějakou hodnotu (například cenu nejlevnějšího benzínu ve městech a délku v kilometrech na silnicích). Pamatování si hodnot ve vrcholech je docela obvyklá technika a nemá speciální název, ale pokud budeme mít graf, který si pamatuje hodnoty na hranách, budeme o něm mluvit jako o ohodnoceném grafu.

Další možnou úpravou je, že každá hrana povede jen jedním směrem (jednosměrné silnice), takovým grafům říkáme orientované (pokud pak v orientovaném grafu chceme silnici oběma směry, prostě do něj přidáme dvě hrany, jednu v každém směru).

Poslední, co nám schází k praktickému použití grafů, je naučit se, jak je reprezentovat v počítači. Existuje několik možností (v popisech bude n značit počet vrcholů, m počet hran):

Grafy jsou velmi široké téma. Můžeme hledat jejich minimální kostry, můžeme v nich hledat nejkratší cesty či skrze ně pouštět pod tlakem vodu. Více o nich si tedy můžete přečíst v některé z našich specializovaných grafových kuchařek, které odkazujeme z našeho kuchařkového rozcestníku.

", @@ -2213,15 +2213,14 @@ "id": "kucharka-zakladni-knihovny", "type": "text", "comment": "https://ksp.mff.cuni.cz/kucharky/zakladni-algoritmy/", - "requires": [ - "kucharka-zakladni-fronta-a-zasobnik" - ], + "requires": [], "title": "Knihovny", "htmlContent": "

Knihovny

Tyto základní struktury už jsou často předpřipravené jako součást určitých knihoven v daném jazyce. Knihovna je většinou sbírka nějakých navzájem souvisejících funkcí, které již někdo sepsal a které si můžeme do našeho programu načíst a používat. Ukázku načtení knihoven můžete vidět například ve výše zmíněném kódu v jazyce C.

Je ale velmi důležité rozumět tomu, jak knihovní funkce vnitřně fungují. Protože jedině když budeme vědět, co je jak rychlé a efektivní, budeme schopni psát rychlé programy.

Teď již víme, jak reprezentovat nejzákladnější datové struktury v počítači, ale mohlo by se nám hodit zastavit se ještě chvíli u dalších struktur. Tentokrát je už budeme studovat trochu teoretičtěji.

", "position": [ - -844.5801773071289, - 1164.7586097717285 - ] + -573.0954666137695, + -921.101863861084 + ], + "hidden": true }, { "id": "kucharka-zakladni-pole",