Datové struktury a algoritmy

Výukový program pro grafovou datovou strukturu

Výukový program pro grafovou datovou strukturu
Ve výpočtech je graf množina uzlů spojených odkazy. Hlavní rozdíl mezi stromem a grafem spočívá v tom, že strom má jeden kořenový uzel, zatímco graf má více než jeden kořenový uzel. Před příchodem sem byste měli mít základní znalosti o datové struktuře stromu, protože zde použité pojmy budou použity s malým nebo žádným vysvětlením. Pokud tyto znalosti nemáte, přečtěte si tutoriál s názvem Výukový program stromové datové struktury pro začátečníky na odkazu https: // linuxhint.com / tree_data_structure_tutorial_začátečníci /.

Uzel v grafu se nazývá vrchol (množné číslo - vrcholy). Někdy se mu stále říká uzel; lze jej také nazvat bodem. Odkaz v grafu se nazývá hrana. Někdy se tomu říká odkaz; to může také být voláno linka.

Graf s mnoha funkcemi

Tento obrázek ukazuje graf s mnoha funkcemi:

Kruhy (disky) jsou vrcholy. Jakákoli přímka, zakřivená čára nebo smyčka je hrana.

Vlastnosti grafu

Vrchol

Vrchol je objekt. Může to být dům; může to být osoba; může to být abstraktní podstatné jméno; může to být jakýkoli objekt, na který si vzpomenete.

Okraj

Hrana je spojení (relace) mezi dvěma vrcholy; spojení může být abstraktní.

Smyčka

Smyčka je hrana, která k sobě spojuje vrchol.

Šipka Edge

Zvažte dva lidi: Jana a Petra. Pokud Jan půjčí Petrovi 100 $ a pokud jsou John a Peter vrcholy, pak bude půjčovací hrana směřovat k Petrovi. Pokud oba partneři zapomenou, že Peter dluží Johnovi, a Peter půjčí Johnovi 100 $, pak na druhém konci stejného okraje bude šipka ukazovat na Johna. Pokud by Peter půjčil Johnovi jen 75 $ a ne 100 $, pak by Petera s Johnem spojila jiná výhoda. Tato druhá hrana bude mít šipku směřující k Johnovi. V druhém případě existují dva okraje, každý s jednou šipkou, směřující opačným směrem.

Vrchol, na který hrana ukazuje, je vrcholový vrchol pro tuto hranu. Vrchol, ze kterého hrana odchází, je ocasní vrchol.

Incident

Hrana spojuje dva vrcholy. Okraj se říká, že dopadá na jeden vrchol. Okraj nemusí mít hrot šípu. Dva vrcholy jsou známé jako koncové body hrany. Je možné mít graf, kde vrchol nepatří k žádné hraně, ale to nebude v tomto tutoriálu uvažováno.

Neusměrněný graf

Okrajem může být šipka, nebo nemůže. Graf, kde žádná hrana není šipka, je neorientovaný graf. Okraj může být reprezentován přímkou ​​nebo křivkou nebo smyčkou.

Směrovaný graf

Graf, kde každá hrana je šipka (směr), je směrovaný graf. Okraj šipky může být reprezentován přímkou ​​s hrotem šipky nebo křivkou s hrotem šipky nebo smyčkou s hrotem šipky.

Absence směru na okraji neorientovaného grafu, znamená, že každá hrana neorientovaného grafu je obousměrná.

Stupeň vrcholu

Počet hran, které dopadají na vrchol, je stupeň vrcholu. Smyčka má dva výskyty na vrcholu, takže smyčka se počítá dvakrát.

Pořadí grafu

Pořadí grafu je počet vrcholů v grafu.

Multigraf

Multigraf je graf, kde pro některé páry vrcholů existuje více než jedna hrana. Neusměrněný multigraf je takový graf, ve kterém hrany nemají žádné směry (nejsou šipky). Směrovaný multigraf je ten, kde každá hrana je šipka, a pro páry vrcholů, které mají více než jednu šipku, je jeden vrchol ocasem těchto šipek a druhý vrchol je hlava stejných šipek. Následující diagram ukazuje neorientovaný multigraf:

Více než jeden okraj (tj.E. více hran) pro dvojici vrcholů se také nazývají rovnoběžné hrany.

Toulec

Toulec je multigraf, který umožňuje smyčky (jednu nebo více smyček). Některé multigrafy smyčky neumožňují.

Jednoduchý graf

Jednoduchý graf je graf, kde žádné dva páry vrcholů nemají více hran. V jednoduchém grafu nejsou smyčky povoleny.

Prázdný graf

Prázdný graf je graf bez vrcholů a tedy bez hran.

Smíšený graf

Smíšený graf je graf, kde některé hrany jsou šipky a jiné nikoli; jinými slovy: některé hrany mají směr a jiné nejsou směrovány.

Vážený graf

Je možné mít graf, ve kterém je každé hraně přiřazeno číslo známé jako váha. Některé hrany mají stejné číslo, ale čísla se obecně liší. Takový graf se nazývá vážený graf. Čísla pro konkrétní graf mohou představovat délky nebo náklady (ceny) nebo velikost nějakého druhu, v závislosti na problému.

Indegree a Outgree

Slovník, indegree a outgree jsou použitelné pouze pro směrovaný graf. Graf může, ale nemusí být multigraf. Graf může, ale nemusí mít smyčky.

Počet hrotů šipek připojených k vrcholu je indegree daného vrcholu. Šíp s jediným hrotem šípu má přední a zadní konec. Počet ocasů připojených k vrcholu je potomkem tohoto vrcholu.

Poznámka: Tento tutoriál se nezabývá grafem s více hranami pro dvojici vrcholů, kde jsou více hran v opačných směrech.

Softwarová reprezentace grafu

Graf lze v softwaru znázornit tak, jak je nakreslen na diagramu. Graf může být také v softwaru reprezentován matematickou maticí (dvourozměrné pole). Jedna z takových matic se nazývá matice sousedství.

Matice sousedství

Matice sousedství je čtvercová matice. Nadpisy řádků jsou všechny vrcholy zapsané vzestupně. Nadpisy sloupců jsou stále stejné vrcholy zapsané vzestupně. Počítání řádků nebo sloupců matice začíná od 1 a ne nula jako u polí. Při identifikaci prvku v matici se číslo řádku zapíše jako první před číslo sloupce.

U neorientovaného grafu je každá položka (prvek) v matici sousedství počet hran spojujících dva odpovídající vrcholy. Smyčka by měla být započítána dvakrát. U směrovaného grafu je každá položka v matici sousedství buď počet okrajů opouštějících vrchol řádku a vstupujících do odpovídajícího vrcholu sloupce, nebo je počet okrajů opouštějících vrchol sloupce a vstupujících do odpovídajících vrcholů řádků. Volba je na programátorovi. V této situaci (v obou případech) by smyčka měla být stále započítána jednou.

Poznámka: Graf je diagram je datová struktura sama o sobě. Matice sousedství je také datová struktura sama o sobě.

Neusměrněný graf a matice sousedství

Následující diagramy ukazují neorientovaný graf a odpovídající matici sousedství:

Úvodní úhlopříčka matice je úhlopříčka zleva shora dolů zprava dole. Neusměrněná matice je symetrická kolem přední úhlopříčky. Maticová položka pro řádek A a sloupec C je 1, což znamená, že existuje jedna hrana spojující vrchol A a vrchol C. Maticová položka pro řádek C a sloupec B je 3, což znamená, že jsou 3 hrany spojující vrchol C a vrchol B. Podobně jsou vysvětleny i další záznamy.

Součet položek pro řádek udává počet hran (stupňů) pro odpovídající vrchol. Součet položek pro řádek A je 2, což znamená, že 2 hrany jsou spojeny s vrcholem A. Součet položek pro řádek B je 6, což znamená, že 6 hran je spojeno s vrcholem B. Zbytek položek je vysvětlen obdobně.

Směrovaný graf a matice sousedství

Následující diagramy ukazují směrovaný graf a odpovídající matici sousedství:

Matice sousedství pro směrovaný graf nemusí být nutně symetrická s přední úhlopříčkou. Maticová položka pro řádek A a sloupec C je 1, což znamená, že jedna hrana opouští z vrcholu A do vrcholu C. Maticová položka pro řádek C a sloupec B je 3, což znamená, že od okraje C k vrcholu B zbývají 3 hrany. Podobně jsou vysvětleny i další záznamy.

Součet položek pro sloupec udává indegree pro (sloupcový) vrchol. Součet položek pro řádek udává výsledek pro vrchol (řádku). Součet položek pro sloupec A je 1, což znamená, že jedna hrana je nasměrována na vrchol A. Součet položek pro řádek B je 2, což znamená, že 2 hrany opouštějí vrchol B. Zbytek položek je vysvětlen obdobně.

Grafické operace

Datová struktura, například graf, se skládá ze sady datových hodnot nebo sady objektů, plus vztah mezi objekty, plus operace (funkce) mezi objekty. Vztahy v grafu jsou označeny hranami. K tomu by měl mít graf alespoň následující operace:

sousední (G, x, y)

G znamená graf. Tato operace ověří, zda hrana spojuje vrchol x a vrchol y. Hodnota a poloha záznamu v matici označují připojení hrany (a jejího typu).

sousedé (G, x)

Tato operace vrátí seznam všech vrcholů, které jsou přímo spojeny s vrcholem x. Hodnota a poloha záznamu v matici označují připojení hrany.

remove_vertex (G, x)

Tato operace odstraní vrchol, x z grafu. Pokud vrchol neměl hranu, není problém. Pokud však vrchol měl odkazy, měly by být také odstraněny odkazy (hrany). Hodnota a poloha záznamu v matici indikují přítomnost konkrétního vrcholu. Pokud je vrchol odstraněn, je nutné matici znovu upravit.

add_vertex (G, x)

Přidá vrchol, x bez přidání hran, nebo nahradí vrchol, který měl hrany, ale byl odstraněn. Hodnota a poloha záznamu v matici indikují přítomnost konkrétního vrcholu. Pokud je přidán vrchol, je nutné matici znovu upravit.

add_edge (G, x, y)

Tato operace přidá novou hranu mezi vrchol x a vrchol y, pokud tam hrana nebyla. Hodnota a poloha záznamu v matici indikují přítomnost určité hrany. Pokud je přidána hrana, musí být matice znovu nastavena.

remove_edge (G, x, y)

Tato operace by odstranila hranu mezi vrcholem x a vrcholem y, pokud by tam byla hrana. Hodnota a poloha záznamu v matici indikují přítomnost určité hrany. Pokud je hrana odstraněna, musí být matice znovu nastavena.

get_vertex_value (G, x)

Tato operace vrací hodnotu v spojenou s vrcholem x. Abyste toho dosáhli, potřebujete sadu mocnin podmnožin pro štítky vrcholů a jejich hodnoty.

set_vertex_value (G, x, v)

Tato operace dává novou hodnotu, v pro hodnotu přidruženou k vrcholu, x. Abyste toho dosáhli, potřebujete sadu mocnin podmnožin pro štítky vrcholů a jejich hodnoty.

Některé grafy také spojují hodnoty s jejich hranami. Takové grafy vyžadují následující další operace:

get_edge_value (G, x, y)

Tato operace vrací hodnotu v spojenou s hranou (x, y). Abyste toho dosáhli, potřebujete výkonovou sadu podmnožin pro hrany a jejich hodnoty.

set_edge_value (G, x, y, v)

Tato operace dává novou hodnotu, v pro hodnotu spojenou s hranou, (x, y). Abyste toho dosáhli, potřebujete sadu mocnin podmnožin pro hrany a jejich hodnoty.

Závěr

Graf je sada vrcholů spojených s hranami. Graf může být neorientovaný nebo směrovaný. Okraje mohou být nesměrové nebo směrové. Smyčky mohou být v grafu přítomné nebo chybějící. Co byste se měli naučit dále, je set, power set a multiset související s grafy. Poté byste se měli naučit různé typy grafů, například orientovaný graf, běžný graf, úplný graf, bipartitní graf, turnajový graf, graf síťové sítě atd.

Chrys

O autorovi

Chrysanthus Forcha

Objevitel integrace matematiky z Prvních principů a souvisejících sérií. Magisterský titul v oboru technického vzdělávání se specializací na elektroniku a počítačový software. BSc Electronics. Mám také znalosti a zkušenosti na magisterské úrovni v oboru výpočetní techniky a telekomunikací. Z 20 000 autorů jsem byl 37. nejlepším autorem devarticles.com. V těchto oborech pracuji více než 10 let.

Zobrazit všechny příspěvky
Hry Nejlepší hry Oculus App Lab
Nejlepší hry Oculus App Lab
Pokud jste vlastníkem náhlavní soupravy Oculus, musíte mít informace o bočním nakládání. Sideloading je proces instalace neukládaného obsahu do náhlav...
Hry Top 10 her k hraní na Ubuntu
Top 10 her k hraní na Ubuntu
Platforma Windows byla jednou z dominujících platforem pro hraní her kvůli velkému procentu her, které se dnes vyvíjejí, aby nativně podporovaly Windo...
Hry 5 nejlepších arkádových her pro Linux
5 nejlepších arkádových her pro Linux
V dnešní době jsou počítače vážné stroje používané k hraní her. Pokud nemůžete získat nové vysoké skóre, budete vědět, co tím myslím. V tomto příspěvk...