Graafikute tüübid andmestruktuuris koos näidetega

⚡ Nutikas kokkuvõte

Andmestruktuuri graafikud on mittelineaarsed tippude ja servade kogumid, mis on struktuuri põhjal liigitatud perekondadesse nagu suunatud, suunamata, kaalutud, tsüklilised, atsüklilised, täielikud, ühendatud, kaheosalised, Euleri ja Hamiltoni graafikud.

  • 📐 Määratlus: Graaf G = (V, E) on mittelineaarne struktuur, kus V on tippude hulk ja E on tippude paare ühendav servade hulk.
  • ➡️ suund: Suunatud graafid kasutavad nooltega servi fikseeritud allika ja sihtmärgiga, samas kui suunamata graafid võimaldavad kahesuunalist liikumist üle iga serva.
  • 🇧🇷 Kaal: Kaalutud graafikud omistavad igale servale numbrilise kulu, samas kui kaalumata graafikud käsitlevad kõiki servi võrdse hinnaga ühendustena.
  • 🔁 Tsüklid: Tsüklilised graafid sisaldavad ühte või mitut tsüklit; suunatud atsükliline graaf (DAG) keelab tsüklid ning võimaldab ajastamist ja topoloogilist sortimist.
  • 🔗 Täielikkus: Täielikud graafid ühendavad iga tippude paari, ühendatud graafid võimaldavad teed mis tahes kahe tipu vahel ja nullgraafidel on null servi.
  • 🧩 Eritüübid: Kaheosalised, Euleri, Hamiltoni, multi-, tsükli- ja triviaalgraafid kehtestavad igaüks tippude ja servade paigutusele spetsiifilise reegli.

Graafikute tüübid andmestruktuuris

Graaf on mittelineaarne andmestruktuur, mis koosneb tippudest ja servadest. Tippudes on teave või andmed ja servad toimivad ühenduslülina tippude paari vahel.

Graafikud võivad olla mitut tüüpi, olenevalt sõlmede ja servade asukohast. Siin on mõned olulised graafikute tüübid:

Suunatud graafik

Suunatud graafiku servad sisaldavad nooli, mis tähistavad suunda. Nool määrab, kuhu serv osutab või kus see lõpeb. Siin on näide suunatud graafikust.

Suunatud graafik

Suunatud graafik

  • Võime minna sõlmest A punkti D.
  • Siiski ei saa me minna sõlmest D sõlme A, kuna serv osutab punktist A punkti D.
  • Kuna graafikul pole kaalusid, maksab sõit tipust A punkti D sama palju kui sõitmine punktist D punkti F.

Suunamata graafik

Suunamata graaf sisaldab servi ilma pointeriteta. See tähendab, et me saame liikuda kahe tipu vahel vastupidi. Siin on lihtne näide suunamata graafist.

Suunamata graafik

Suunamata graafik

Ülaltoodud graafikul

  • Me saame liikuda punktist A punkti B.
  • Samuti saame liikuda punktist B punkti A.
  • Servad ei sisalda juhiseid.

See on näide suunamata graafist, millel on lõplik arv tippe ja servi ilma kaaludeta.

Kaalutud graafik

Graafi, mille servadel on kaalud või kulud, nimetatakse kaalutud graafiks. Numbriline väärtus esindab üldiselt ühest tipust teise liikumise kulu. Nii suunatud kui ka suunamata graafidel võivad olla servadel kaalud. Siin on näide kaalutud graafist (suunatud).

Suunatud graafik kaaluga

Suunatud graafik kaaluga

  • Punktist A punkti B liikudes on eelis ja kaal on 5, mis tähendab, et punktist A punkti B liikumine maksab meile 5.
  • A osutab B-le, aga selles graafikus pole B-l A suhtes otsest serva. Seega me ei saa reisida B-st A-sse.
  • Kui aga tahame liikuda punktist A punkti F, on selleks mitu teed. Teed on ADF ja ABF. ADF maksab (10+11) ehk 21.
  • Siin maksab tee ABF (5 + 15) ehk 20. Siin liidame iga tee serva kaalu.

Siin on näide suunamata graafist kaaludega:

Suunamata graafik kaaluga

Suunamata graafik kaaluga

Siin on serval kaal, kuid puudub suund. Niisiis, see tähendab, et reisimine tipust A punkti D maksab 10 ja vastupidi.

Kahesuunaline graafik

Kahesuunalistel ja suunamata graafikutel on üks ühine omadus. See on:

  • Üldiselt võib suunamata graafil olla üks serv kahe tipu vahel.

Näiteks:

Kahesuunaline graafik

  • Siin maksab A-st D-sse või D-sse A kolimine 10.
  • Kahesuunalises graafikus võib kahe tipu vahel olla kaks serva.

Siin on näide:

Kahesuunaline graafik

Kahesuunaline graafik

Punktist A punkti D reisimine maksab meile 17, aga punktist D punkti A reisimine maksab meile 12. Seega ei saa me määrata kahte erinevat kaalu, kui tegemist on suunamata graafiga.

Lõputu graafik

Graafik sisaldab lõpmatut arvu servi ja sõlmi. Kui graaf on lõpmatu ja samal ajal ka ühendatud graaf, siis sisaldab see samuti lõpmatut arvu servi. Siin tähendavad laiendatud servad seda, et nende sõlmedega võib servade kaudu olla ühendatud rohkem servi. Siin on näide lõpmatust graafist:

Lõputu graafik

Lõputu graafik

Nullgraafik

Nullgraaf sisaldab ainult sõlmi või tippe, kuid ilma servadeta. Kui on antud graaf G = (V, E), kus V on tipud ja E on servad, on see null, kui servade arv E on null. Siin on näide nullgraafist:

Nullgraafik

Nullgraafik

Triviaalne graafik

Graafi andmestruktuuri peetakse triviaalseks, kui sellel on ainult üks tipp või sõlm ja servad puuduvad. Siin on näide triviaalsest graafist:

Triviaalne graafik

Mitu graafikut

Graafi nimetatakse multigraafiks, kui kahe tipu vahel on mitu serva või kui tipus on tsükkel. Mõiste „tsükkel” graafi andmestruktuuris tähendab serva, mis osutab samale sõlmele või tipule. Multigraaf võib olla suunatud või suunamata. Siin on näide multigraafist:

Mitu graafikut

Punktist B punkti A viib kaks serva. Lisaks on tipul E isesilmus. Ülaltoodud graaf on suunatud graaf, mille servadel pole raskusi.

Täielik graafik

Graaf on täielik, kui igal tipul on kõigi teiste tippudega suunatud või suunamata servad. Oletame, et tippude arv on kokku V ja igal tipul on täpselt V-1 serva. Siis nimetatakse seda graafi täielikuks graafiks. Seda tüüpi graafis on iga tipp kõigi teiste tippudega servade kaudu ühendatud. Siin on näide täielikust graafist, millel on viis tippu:

Täielik graafik

Pildilt on näha, et sõlmede koguarv on viis ja kõigil sõlmedel on täpselt neli serva.

Ühendatud graafik

Graafi nimetatakse ühendatud graafiks, kui see alustab ühest sõlmest või tipust ja saab sellest sõlmest liikuda kõikidesse sõlmedesse. Selleks peaks iga sõlmede või tippude paari vahel olema vähemalt üks serv. Siin on näide ühendatud graafist:

Ühendatud graafik

Siin on ülaltoodud ühendatud graafiku selgitus:

  • Eeldades, et C ja F vahel pole serva, ei saa me liikuda punktist A punkti G. Serv C ja F vahel võimaldab meil aga reisida antud sõlmest mis tahes sõlme.
  • Täielik graafik on ühendatud graafik, kuna saame liikuda antud graafiku sõlmest mis tahes teise sõlme.

Tsükliline graafik

Graafi nimetatakse tsükliliseks, kui selles on üks või mitu tsüklit. Siin on näide tsüklilisest graafist:

Tsükliline graafik

Siin moodustavad tipud A, B ja C tsükli. Graafi sees võib olla mitu tsüklit.

Suunatud atsükliline graafik (DAG)

Graafi nimetatakse suunatud atsükliliseks graafiks ehk DAG-iks, kui graafi sees pole tsükleid. DAG on oluline järgmiste toimingute tegemisel: Topoloogiline sortimine või täitmisjärjekorra leidmiseks. DAG on oluline ka ajastamissüsteemide loomiseks või ressursside sõltuvuse skaneerimiseks jne. Ülaltoodud graafik ei sisalda aga ühtegi sees olevat tsüklit. Siin on lihtne näide suunatud atsüklilisest graafist (DAG):

Suunatud atsükliline graafik (DAG)

Tsükligraafik

Tsükligraaf ei ole sama mis tsükliline graaf. Tsükligraafis on igal sõlmel täpselt kaks ühendatud serva, mis tähendab, et igal sõlmel on täpselt kaks kraadi. Siin on näide tsükligraafist:

Tsükligraafik

Kahepoolne graafik

Sellised Graafikud on spetsiaalsed graafitüübid, kus tipud on määratud kahte hulka. Kaheosaline graaf peab järgima reeglit:

  • Kaks tippude komplekti peaksid olema erinevad, mis tähendab, et kõik tipud tuleb jagada kahte rühma või komplekti.
  • Samasse hulpi kuuluvad tipud ei tohiks moodustada servi.

Kahepoolne graafik

Euleri graafik

Graafi andmestruktuuri peetakse Euleri graafiks, kui kõigil tippudel on paarisarv aste. Termin "tippude aste" tähendab servade arvu, mis osutavad konkreetsele tipule või osutavad sellest välja. Siin on näide Euleri graafist:

Euleri graafik

Kõigil tippudel on paarisarv kraadi. Tippudel A, D, E ja H on kaks kraadi. Siin on sõlmel C neli kraadi, mis on paarisarv.

Hamiltoni graafik

Hamiltoni graaf on ühendatud graaf, kus saab külastada kõiki antud tipu tippe ilma sama sõlme uuesti külastamata või sama serva kasutamata. Sellist ühendatud graafi nimetatakse Hamiltoni graafiks. Tee, mida läbitakse, et kontrollida, kas antud graaf on Hamiltoni graaf või mitte, nimetatakse Hamiltoni teeks. Siin on lihtne näide Hamiltoni graafist:

Hamiltoni graafik

Sellel pildil saame külastada kõiki tippe ülaltoodud graafiku mis tahes sõlmest. Üks teedest võib olla ADCHBESamuti on võimalik leida Hamiltoni tsükkel. Hamiltoni tsükkel algab ja lõpeb samas tipus. Seega on Hamiltoni tsükkel ADCHBEA.

KKK

Graafik on mittelineaarne andmestruktuur, mis koosneb tippudest (sõlmedest) ja servadest (linkidest). Tippudes salvestatakse andmeid ja servad ühendavad tippude paare, moodustades võrgustikke, mida kasutatakse teede, sotsiaalsete sidemete, sõltuvuste ja muu modelleerimiseks.

Suunatud graafikud kasutavad allikast sihtmärgini osutavaid nooli, piirates liikumist selles suunas. Suunamata graafikud kasutavad noolteta servi, mis võimaldavad liikumist ühendatud tippude vahel mõlemas suunas.

Suunatud atsükliline graaf ehk DAG on suunatud graaf, mis ei sisalda tsükleid. DAG-e kasutatakse laialdaselt ülesannete ajastamiseks, ehitussüsteemide loomiseks, pakettide sõltuvuse lahendamiseks ja mis tahes töövoogudes, mis nõuavad kehtivat topoloogilist järjestust.

Kaalutud graaf omistab igale servale numbrilise kaalu, mis esindab kaugust, aega või kulu. Lühima tee algoritmid, näiteks Dijkstra algoritm ja võrgu marsruutimisprotokollid, kasutavad kaalutud graafe kõige tõhusama tee leidmiseks.

Täielikul graafil on iga tipppaari vahel serv. Ühendatud graaf vajab teed ainult iga paari vahel. Iga täielik graaf on ühendatud, kuid mitte iga ühendatud graaf pole täielik.

Kaheosalised graafid jagavad tipud kaheks eraldiseisvaks hulgaks, millel on servad ainult kahe hulga vahel. Need modelleerivad sobitamisprobleeme, näiteks töötajate määramine töökohtadele, õpilaste kursustele või sõidujagajate juhtide määramine sõitjatele.

Graafi närvivõrgud rakendavad masinõpet graafiliselt struktureeritud andmetele selliste ülesannete jaoks nagu pettuste avastamine, ravimite avastamine ja soovituste andmine. Teadmusgraafikud toetavad tehisintellekti küsimustele vastamist ja arvutusgraafikud kirjeldavad süvaõppe iga edasi- ja tagasiminekut.

Jah. AI Copiloti tööriistad, näiteks GitHub Copilot ja ChatGPT, genereerivad enamikus programmeerimiskeeltes BFS-i, DFS-i, Dijkstra ja topoloogilise sortimise malli. Arendajad peavad tootmiskoodi jaoks ikkagi kontrollima äärmusjuhte, tsüklite käsitlemist ja keerukust.

Võta see postitus kokku järgmiselt: