Graafiku andmestruktuur ja Algorithms (Näide)

⚡ Nutikas kokkuvõte

Graafi andmestruktuur on mittelineaarne tippude ja servade kogum, kus iga serv ühendab tippude paari. Graafikud modelleerivad reaalse maailma võrgustikke, nagu kaardid, sotsiaalsed ühendused ja veebilehed, ning toetavad paljusid võimsaid algoritme.

  • 📐 Struktuur: Graaf G = (V, E) seob tippude (sõlmede) hulga nendevaheliste servade (lülide) hulgaga.
  • 🔤 Terminoloogia: Võtmeterminite hulka kuuluvad tipp, serv, aste, siseaste, välisaste, isesilmus ja külgnevus.
  • 🗂️ Esindus: Graafikuid salvestatakse külgnevusmaatriksi või külgnevusloendi abil, millel kõigil on erinevad ruumi kompromissid.
  • 🧭 tüübid: Suunatud, suunamata, kaalutud, tsüklilised, atsüklilised, täielikud, kaheosalised ja muud klassifitseerivad graafe struktuuri järgi.
  • 🌐 Rakendused: Google Kaartide marsruutimine, sotsiaalvõrgustikud, veebijärjestus ja ressursisõltuvus tuginevad kõik graafikutele.

Graafiku andmestruktuur ja Algorithms

Mis on andmestruktuuri graafik?

Graafik on mittelineaarne andmestruktuur, mis koosneb tippudest ja servadest, kus tipud sisaldavad teavet või andmeid ja servad toimivad lüliks tippude paari vahel.

Seda kasutatakse reaalsete probleemide lahendamiseks, näiteks parima marsruudi leidmiseks sihtkohta ning telekommunikatsiooni ja sotsiaalvõrgustike marsruudi leidmiseks. Kasutajaid käsitletakse graafikus sõlmena ja juhtmed on kasutajaid ühendavad servad.

Kui servad on E ja tipud V, siis saab graafi G kirjutada tippude ja servade hulgana, näiteks G (V, E).

Graafiku näide andmestruktuuris

Siin on lihtne näide graafi andmestruktuurist:

Graafiku näide andmestruktuuris

See on lihtne suunamata graaf (üks graafi liik). Siin on tippude hulk: {A, B, C, D, E, F}. Kaks tippu moodustavad serva. Näiteks A ja B on ühendatud servaga. A ja F ei ole aga ühegi servaga ühendatud.

Graafiterminoloogiad andmestruktuuris

Järgnevalt on toodud mõned graafi andmestruktuuris kasutatavad olulised terminid:

TerminKirjeldus
Kõrgeim tippIga andmeelementi nimetatakse tipuks või sõlmeks. Ülaltoodud pildil on tipud A, B, C, D ja E.
Serv (kaar)Kahe sõlme või tipu vahelisi ühenduslülisid nimetatakse servaks (Arc). Sellel on kaks otsa ja seda esitatakse kui (algusTipp, lõppTipp).
Suunamata servSee on kahesuunaline serv.
Režissöör EdgeSee on ühesuunaline serv.
Kaalutud servVäärtusega serv.
KraadGraafis nimetatakse tipuga ühendatud servade arvu astmeks.
IndegreeTipuga ühendatud sissetulevate servade koguarv.
Väljaspool kraadiTipuga ühendatud väljuvate servade koguarv.
Self-loopServa nimetatakse iseahelaks, kui selle kaks otspunkti langevad kokku.
LähedusTippusid nimetatakse külgnevateks, kui nende vahel on ühendatud serv.

Graafikute tüübid andmestruktuuris

Siin on nimekiri kõige tavalisematest graafikute tüübid andmestruktuuris:

  • Suunatud graafik
  • Suunamata graafik
  • Kaalutud graafik
  • Kahesuunaline graafik
  • Lõputu graafik
  • Nullgraafik
  • Triviaalne graafik
  • Mitu graafikut
  • Täielik graafik
  • Ühendatud graafik
  • Tsükliline graafik
  • Suunatud atsükliline graafik (DAG)
  • Tsükligraafik
  • Kahepoolne graafik
  • Euleri graafik
  • Hamiltoni graafik

Kuidas graafikut andmestruktuuris kujutada?

Graafi salvestatakse mällu tavaliselt ühel kahest esitusviisist. Valik mõjutab seda, kui palju mälu graaf kasutab ja kui kiiresti tavalised toimingud toimivad.

  • Kõrvaloleku maatriks: Kahemõõtmeline V × V massiiv, kus lahtri [i][j] väärtus on 1 (või serva kaal), kui tippude i ja j vahel on serv, ja muul juhul 0. See võimaldab O(1) servaotsingut, kuid kasutab O(V²) ruumi, mistõttu sobib see kõige paremini tihedate graafikute jaoks.
  • Naabruskondade loend: Loendite massiiv, kus iga tipp salvestab oma naabertippude loendi. See kasutab O(V + E) ruumi ja on efektiivne hõredate graafide puhul, mistõttu enamik reaalse maailma graafe seda kasutab.

Nende kohta saate lähemalt lugeda Graafi külgnevusloend ja maatriksi esitus juhendaja.

Graafilise andmestruktuuri rakendused

Graafil on palju kasutusjuhtumeid. On palju algoritme, mis graafe kasutavad. Siin on mõned graafi rakendused:

  • Google Kaardid kasutavad graafikuid kahe tee ristumiskoha leidmiseks ja kahe asukoha vahelise kauguse arvutamiseks. Näiteks dijkstra, lähte- ja sihtkoha vahelise lühima vahemaa leidmiseks.
  • Facebook kasutab kasutajate ühiste sõprade leidmiseks graafe. Selle algoritm käsitleb iga kasutajat graafi sõlmena.
  • Ressursside jaotamiseks kasutatakse DAG-i (Directed Acyclic Graph). See kontrollib ressursside sõltuvust.
  • . Google Otsingumootorid kasutavad veebisaitide edetabeli loomiseks graafikuid.
  • Kaartping Seade kasutab graafi andmestruktuuri.
  • A ruuter ja selle protokoll kasutab sihtkohta jõudmise tee õppimiseks graafikut.

KKK

Graafi abil loodud närvivõrgud õpivad graafiliselt struktureeritud andmetest pettuste avastamiseks, soovituste andmiseks ja ravimite avastamiseks. Teadmusgraafikud toetavad tehisintellektil põhinevaid küsimustele vastamisi ja süvaõppe raamistikud modelleerivad iga arvutust toimingute graafikuna.

Jah. Tehisintellekti assistendid, näiteks GitHub Copilot, saavad tavalise kirjelduse põhjal genereerida BFS-i, DFS-i, Dijkstra ja topoloogilise sortimise implementatsioone. Enne koodi kasutamist peaksite siiski testima äärmusjuhtumeid, näiteks lahtiühendatud sõlmi, tsükleid ja tühje graafe.

Puu on eriline graafi tüüp, mis on ühendatud ja millel pole tsükleid ning mille kahe sõlme vahel on täpselt üks tee. Graaf on üldisem: see võib sisaldada tsükleid, ühendamata osi ja suunatud või kaalutud servi.

Kaks peamist läbimismeetodit on laiuspõhine otsing (BFS), mis uurib taset tasemelt järjekorra abil, ja sügavuspõhine otsing (DFS), mis uurib võimalikult sügavalt, kasutades pinu või rekursiooni enne tagasipöördumist.trackuningas.

Võta see postitus kokku järgmiselt: