Typy grafů v datové struktuře s příklady

⚡ Chytré shrnutí

Grafy v datových strukturách jsou nelineární soubory vrcholů a hran klasifikované do rodin, jako jsou orientované, neorientované, vážené, cyklické, acyklické, úplné, propojené, bipartitní, Eulerovy a Hamiltonovy grafy založené na struktuře.

  • 📐 Definice: Graf G = (V, E) je nelineární struktura, kde V je množina vrcholů a E je množina hran spojujících dvojice vrcholů.
  • ➡️ Režie: Orientované grafy používají hrany se šipkami s pevným zdrojem a cílem, zatímco neorientované grafy umožňují obousměrný pohyb přes každou hranu.
  • 🇧🇷 Hmotnost: Vážené grafy přiřazují každé hraně číselnou cenu, zatímco nevážené grafy považují všechny hrany za spojení se stejnou cenou.
  • 🔁 cykly: Cyklické grafy obsahují jeden nebo více cyklů; orientovaný acyklický graf (DAG) cykly zakazuje a umožňuje plánování a topologické třídění.
  • 🔗 Úplnost: Úplné grafy spojují každou dvojici vrcholů, propojené grafy umožňují cestu mezi libovolnými dvěma vrcholy a nulové grafy mají nulové hrany.
  • 🧩 Speciální typy: Bipartitní, Eulerovy, Hamiltonovy, multigrafy, cyklické a triviální grafy ukládají specifické pravidlo pro uspořádání vrcholů a hran.

Typy grafů v datové struktuře

Graf je nelineární datová struktura, která se skládá z vrcholů a hran. Vrcholy obsahují informace nebo data a hrany fungují jako spojnice mezi dvojicí vrcholů.

Grafy mohou být různých typů v závislosti na poloze uzlů a hran. Zde jsou některé důležité typy grafů:

Režírovaný graf

Hrany orientovaného grafu obsahují šipky, které označují směr. Šipka určuje, kam hrana směřuje nebo kde končí. Zde je příklad orientovaného grafu.

Režírovaný graf

Režírovaný graf

  • Můžeme přejít z uzlu A do D.
  • Nemůžeme však přejít z uzlu D do uzlu A, protože hrana směřuje z uzlu A do uzlu D.
  • Protože graf nemá váhy, cestování z vrcholu A do D bude stát stejně jako cestování z D do F.

Neorientovaný graf

Neorientovaný graf obsahuje hrany bez ukazatelů. To znamená, že se mezi dvěma vrcholy můžeme pohybovat naopak. Zde je jednoduchý příklad neorientovaného grafu.

Neorientovaný graf

Neorientovaný graf

Ve výše uvedeném grafu

  • Můžeme se přesunout z bodu A do bodu B.
  • Můžeme se také přesunout z B do A.
  • Hrany neobsahují žádné směry.

Je to příklad neorientovaného grafu s konečným počtem vrcholů a hran bez vah.

Vážený graf

Graf, který obsahuje váhy nebo náklady na hranách, se nazývá vážený graf. Číselná hodnota obecně představuje náklady na přesun z jednoho vrcholu do druhého. Váhy na hranách mohou mít jak orientované, tak neorientované grafy. Zde je příklad váženého grafu (orientovaného).

Orientovaný graf s váhou

Orientovaný graf s váhou

  • Z bodu A do bodu B je hrana a váha je 5, což znamená, že přesun z bodu A do bodu B nás bude stát 5.
  • Bod A ukazuje na bod B, ale v tomto grafu nemá bod B přímou výhodu nad bodem A. Nemůžeme se tedy dostat z bodu B do bodu A.
  • Pokud se ale chceme přesunout z bodu A do bodu F, existuje více cest. Těmito cestami jsou ADF a ABF. ADF bude stát (10+11) neboli 21.
  • Zde bude cesta ABF stát (5+15) neboli 20. Zde přidáváme váhu každé hrany v cestě.

Zde je příklad neorientovaného grafu s váhami:

Neorientovaný graf s váhou

Neorientovaný graf s váhou

Zde má hrana váhu, ale žádný směr. To znamená, že cestování z vrcholu A do D bude stát 10 a naopak.

Obousměrný graf

Obousměrné a neorientované grafy mají společnou vlastnost. A to:

  • Neorientovaný graf může mít obecně jednu hranu mezi dvěma vrcholy.

Například:

Obousměrný graf

  • Zde bude přesun z A do D nebo D do A stát 10.
  • V obousměrném grafu můžeme mít dvě hrany mezi dvěma vrcholy.

Zde je příklad:

Obousměrný graf

Obousměrný graf

Cesta z bodu A do bodu D nás bude stát 17, ale cesta z bodu D do bodu A nás bude stát 12. Takže nemůžeme přiřadit dvě různé váhy, pokud se jedná o neorientovaný graf.

Nekonečný graf

Graf bude obsahovat nekonečný počet hran a uzlů. Pokud je graf nekonečný a zároveň souvislý, bude obsahovat i nekonečný počet hran. Rozšířené hrany zde znamenají, že k těmto uzlům může být prostřednictvím hran připojeno více hran. Zde je příklad nekonečného grafu:

Nekonečný graf

Nekonečný graf

Null Graph

Nulový graf obsahuje pouze uzly nebo vrcholy, ale nemá žádné hrany. Pokud je dán graf G = (V, E), kde V jsou vrcholy a E jsou hrany, bude nulový, pokud je počet hran E nula. Zde je příklad nulového grafu:

Null Graph

Null Graph

Triviální graf

Datová struktura grafu je považována za triviální, pokud je přítomen pouze jeden vrchol nebo uzel bez hran. Zde je příklad triviálního grafu:

Triviální graf

Více grafů

Graf se nazývá multigraf, pokud se mezi dvěma vrcholy nachází více hran nebo pokud má vrchol smyčku. Termín „smyčka“ v datové struktuře grafu znamená hranu směřující ke stejnému uzlu nebo vrcholu. Multigraf může být orientovaný nebo neorientovaný. Zde je příklad multigrafu:

Více grafů

Z B do A vedou dvě hrany. Vrchol E má navíc smyčku po sobě. Výše ​​uvedený graf je orientovaný graf bez vah na hranách.

Kompletní graf

Graf je úplný, pokud má každý vrchol orientované nebo neorientované hrany se všemi ostatními vrcholy. Předpokládejme, že existuje celkem V vrcholů a každý vrchol má přesně V-1 hran. Pak se tento graf bude nazývat úplný graf. V tomto typu grafu je každý vrchol propojen se všemi ostatními vrcholy pomocí hran. Zde je příklad úplného grafu s pěti vrcholy:

Kompletní graf

Na obrázku vidíte, že celkový počet uzlů je pět a všechny uzly mají přesně čtyři hrany.

Připojený graf

Graf se nazývá propojený graf, pokud začínáme v uzlu nebo vrcholu a můžeme se z něj dostat ke všem uzlům. K tomu je nutné, aby mezi každou dvojicí uzlů nebo vrcholů byla alespoň jedna hrana. Zde je příklad propojeného grafu:

Připojený graf

Zde je vysvětlení výše uvedeného propojeného grafu:

  • Za předpokladu, že mezi C a F není hrana, nemůžeme se dostat z A do G. Hrana C do F nám však umožňuje dostat se z daného uzlu do libovolného uzlu.
  • Kompletní graf je spojený graf, protože se můžeme přesunout z uzlu do kteréhokoli jiného uzlu v daném grafu.

Cyklický graf

Graf se nazývá cyklický, pokud se v něm nachází jeden nebo více cyklů. Zde je příklad cyklického grafu:

Cyklický graf

Vrcholy A, B a C zde tvoří cyklus. Graf může mít uvnitř více cyklů.

Řízený acyklický graf (DAG)

Graf se nazývá orientovaný acyklický graf neboli DAG, pokud uvnitř grafu nejsou žádné cykly. DAG je důležitý při provádění Topologické řazení nebo nalezení pořadí provádění. DAG je také důležitý pro vytváření systémů plánování nebo skenování závislostí zdrojů atd. Výše ​​uvedený graf však neobsahuje žádný cyklus uvnitř. Zde je jednoduchý příklad orientovaného acyklického grafu (DAG):

Řízený acyklický graf (DAG)

Graf cyklu

Cyklický graf není totéž co cyklický graf. V cyklickém grafu bude mít každý uzel přesně dvě spojené hrany, což znamená, že každý uzel bude mít přesně dva stupně. Zde je příklad cyklického grafu:

Graf cyklu

Bipartitní graf

Tyto druhy Grafy jsou speciální druhy grafů, kde jsou vrcholy přiřazeny dvěma množinám. Dvoudílný graf musí splňovat pravidlo:

  • Dvě sady vrcholů by měly být odlišné, což znamená, že všechny vrcholy musí být rozděleny do dvou skupin nebo sad.
  • Vrcholy stejné množiny by neměly tvořit žádné hrany.

Bipartitní graf

Eulerův graf

Datová struktura Graf se považuje za Eulerův graf, pokud všechny vrcholy mají sudý stupeň. Pojem stupeň vrcholů znamená počet hran směřujících k danému vrcholu nebo z něj vycházejících. Zde je příklad Eulerova grafu:

Eulerův graf

Všechny vrcholy mají sudé stupně. Vrcholy A, D, E a H mají dva stupně. Zde má uzel C čtyři stupně, což je sudé.

Hamiltonův graf

Hamiltonův graf je propojený graf, kde můžete navštívit všechny vrcholy z daného vrcholu, aniž byste museli znovu navštívit stejný uzel nebo použít stejnou hranu. Tento typ propojeného grafu je známý jako „Hamiltonův graf“. Cesta, kterou navštívíte, abyste ověřili, zda je daný graf Hamiltonovým grafem, se nazývá Hamiltonova cesta. Zde je jednoduchý příklad grafu Hamiltonu:

Hamiltonův graf

Na tomto obrázku můžeme navštívit všechny vrcholy z libovolného uzlu ve výše uvedeném grafu. Jedna z cest může být ADCHBEJe také možné najít Hamiltonův cyklus. Hamiltonův cyklus začíná a končí ve stejném vrcholu. Hamiltonův cyklus tedy bude ADCHBEA.

Nejčastější dotazy

Graf je nelineární datová struktura složená z vrcholů (uzlů) a hran (vazeb). Vrcholy ukládají data a hrany spojují dvojice vrcholů a vytvářejí sítě používané k modelování silnic, sociálních vazeb, závislostí a dalších prvků.

Orientované grafy používají hrany se šipkami směřujícími od zdroje k cíli, čímž omezují pohyb v tomto směru. Neorientované grafy používají hrany bez šipek, což umožňuje pohyb mezi propojenými vrcholy v obou směrech.

Orientovaný acyklický graf (DAG) je orientovaný graf, který neobsahuje žádné cykly. DAGy se široce používají pro plánování úloh, sestavování systémů, řešení závislostí balíčků a jakýkoli pracovní postup, který vyžaduje platné topologické uspořádání.

Vážený graf přiřazuje každé hraně číselnou váhu, která představuje vzdálenost, čas nebo cenu. Algoritmy pro hledání nejkratší cesty, jako je Dijkstra a síťové směrovací protokoly, používají vážené grafy k nalezení nejefektivnější cesty.

Úplný graf má hranu mezi každou dvojicí vrcholů. Souvislý graf potřebuje pouze cestu mezi každou dvojicí vrcholů. Každý úplný graf je souvislý, ale ne každý souvislý graf je úplný.

Dvojdílné grafy rozdělují vrcholy na dvě disjunktní množiny s hranami pouze mezi těmito dvěma sadami. Modelují problémy s párováním, jako je přiřazování pracovníků k pracovním místům, studentů ke kurzům nebo řidičů zajišťujících spolujízdu k cestujícím.

Grafové neuronové sítě aplikují strojové učení na grafově strukturovaná data pro úkoly, jako je detekce podvodů, objevování léků a doporučování. Znalostní grafy posilují odpovídání na otázky s využitím umělé inteligence a výpočetní grafy popisují každý krok vpřed a zpět v hlubokém učení.

Ano. Nástroje AI Copilot, jako je GitHub Copilot a ChatGPT, generují ve většině jazyků standardizované šablony pro BFS, DFS, Dijkstrovo řazení a topologické řazení. Vývojáři stále potřebují ověřovat okrajové případy, zpracování cyklů a složitost produkčního kódu.

Shrňte tento příspěvek takto: