Graafin tietorakenne ja Algorithms (Esimerkki)

โšก ร„lykรคs yhteenveto

Graafitietorakenne on epรคlineaarinen kokoelma solmuja ja kaaria, joissa jokainen kaari yhdistรครค kaksi solmua. Graafit mallintavat reaalimaailman verkostoja, kuten karttoja, sosiaalisia yhteyksiรค ja verkkosivuja, ja tukevat monia tehokkaita algoritmeja.

  • ๐Ÿ“ Rakenne: Graafi G = (V, E) yhdistรครค joukon solmuja (verteksejรค) niiden vรคliin jรครคviin kaariin (linkkeihin).
  • ๐Ÿ”ค Terminologia: Keskeisiรค termejรค ovat huippu, reuna, aste, sisรครคnpรคin suuntautuva aste, ulospรคin suuntautuva aste, itsesilmukka ja vierekkรคisyys.
  • ๐Ÿ—‚๏ธ Edustus: Graafit tallennetaan kรคyttรคmรคllรค vierekkรคisyysmatriisia tai vierekkรคisyyslistaa, joilla kullakin on erilaiset tilakompromisseja.
  • ๐Ÿงญ tyypit: Suunnatut, suuntaamattomat, painotetut, sykliset, asykliset, tรคydelliset, kaksijakoiset ja muut luokittelevat graafit rakenteen mukaan.
  • ๐ŸŒ Sovellukset: Google Karttojen reititys, sosiaaliset verkostot, verkkosivustojen sijoitukset ja resurssiriippuvuus perustuvat kaikki graafeihin.

Graafin tietorakenne ja Algorithms

Mikรค on graafi tietorakenteessa?

Graafi on epรคlineaarinen tietorakenne, joka koostuu solmuista ja kaarista, joissa solmut sisรคltรคvรคt informaation tai datan ja kaaret toimivat linkkinรค solmujen parin vรคlillรค.

Sitรค kรคytetรครคn ratkaisemaan reaalimaailman ongelmia, kuten parhaan reitin lรถytรคmistรค mรครคrรคnpรครคhรคn sekรค reittiรค televiestinnรคlle ja sosiaalisille verkostoille. Kรคyttรคjiรค pidetรครคn graafissa solmuina, ja langat ovat kรคyttรคjiรค yhdistรคviรค reunoja.

Jos reunat esitetรครคn muodossa E ja kรคrjet V, niin graafi G voidaan kirjoittaa kรคrkien ja reunojen joukoksi, kuten esim. G (V, E).

Esimerkki graafista tietorakenteessa

Tรคssรค on yksinkertainen esimerkki graafin tietorakenteesta:

Esimerkki graafista tietorakenteessa

Se on yksinkertainen suuntaamaton graafi (erรครคnlainen graafi). Tรคssรค solmujen joukko on: {A, B, C, D, E, F}. Kaksi solmua muodostaa kaaren. Esimerkiksi A ja B on yhdistetty kaarella. A ja F eivรคt kuitenkaan ole yhdistetty millรครคn kaarilla.

Kuvaajan terminologiat tietorakenteessa

Seuraavassa on joitakin tรคrkeitรค termejรค, joita kรคytetรครคn graafin tietorakenteessa:

TermiTuotetiedot
KรคrkiJokaista dataelementtiรค kutsutaan solmuksi tai kรคrkipisteeksi. Yllรค olevassa kuvassa A, B, C, D ja E ovat solmut.
Reuna (kaari)Kahden solmun tai kรคrkipisteen vรคlisiรค yhdistรคviรค linkkejรค kutsutaan kaareksi (Arc). Sillรค on kaksi pรครคtรค ja se esitetรครคn muodossa (alkuPiste, loppuPiste).
Ohjaamaton reunaSe on kaksisuuntainen reuna.
Ohjannut EdgeSe on yksisuuntainen reuna.
Painotettu reunaReuna, jolla on arvo.
AsteGraafissa yhteen kรคrkeen yhdistettyjen kaarien lukumรครคrรครค kutsutaan asteeksi.
IndegreeHuippupisteeseen yhdistettyjen saapuvien reunojen kokonaismรครคrรค.
YlimielinenHuippupisteeseen yhdistettyjen lรคhtevien reunojen kokonaismรครคrรค.
ItsesilmukkaReunaa kutsutaan itsesilmukaksi, jos sen kaksi pรครคtepistettรค ovat samat.
ViereisyysKรคrkien sanotaan olevan vierekkรคisiรค, jos niiden vรคlillรค on yhdistetty kaari.

Kuvaajien tyypit tietorakenteessa

Tรคssรค on luettelo yleisimmistรค kaaviotyypit tietorakenteessa:

  • Ohjattu graafi
  • Ohjaamaton kaavio
  • Painotettu kaavio
  • Kaksisuuntainen kaavio
  • ร„รคretรถn kaavio
  • Nollakuvaaja
  • Triviaali kaavio
  • Monikuvaaja
  • Tรคydellinen kaavio
  • Yhdistetty kaavio
  • Syklinen kaavio
  • Suunnattu asyklinen kaavio (DAG)
  • Kiertokaavio
  • Kahdenvรคlinen kaavio
  • Euler-kaavio
  • Hamiltonin kaavio

Kuinka esittรครค graafi tietorakenteessa?

Graafi tallennetaan yleensรค muistiin kรคyttรคmรคllรค yhtรค kahdesta esitystavasta. Valinta vaikuttaa siihen, kuinka paljon muistia graafi kรคyttรครค ja kuinka nopeasti yleiset toiminnot suoritetaan.

  • Vierekkรคisyysmatriisi: Kaksiulotteinen V ร— V -taulukko, jossa solu [i][j] on 1 (tai kaaren paino), jos pisteiden i ja j vรคlillรค on kaari, ja 0 muuten. Se sallii O(1)-kaarenhaun, mutta kรคyttรครค O(Vยฒ)-avaruutta, mikรค tekee siitรค parhaan tiheille graafeille.
  • Vierekkรคisyysluettelo: Listojen taulukko, jossa jokainen solmu tallentaa listan naapurisolmuistaan. Se kรคyttรครค O(V + E)-avaruutta ja on tehokas harvoille graafeille, minkรค vuoksi useimmat reaalimaailman graafit kรคyttรคvรคt sitรค.

Voit lukea lisรครค nรคistรค osiosta vierekkรคisyyslista ja graafin matriisiesitys opetusohjelma.

Graafisen tietorakenteen sovellukset

Graafilla on monia kรคyttรถtapauksia. On olemassa paljon algoritmeja, jotka kรคyttรคvรคt graafeja. Tรคssรค on joitakin graafin sovelluksia:

  • Google Kartat kรคyttรคvรคt kuvaajia kahden tien risteyksen lรถytรคmiseen ja kahden sijainnin vรคlisen etรคisyyden laskemiseen. Esimerkiksi Dijkstra, lyhimmรคn etรคisyyden lรถytรคmiseksi lรคhtรถ- ja mรครคrรคnpรครคn vรคlillรค.
  • Facebook kรคyttรครค graafeja lรถytรครคkseen kรคyttรคjien yhteiset ystรคvรคt. Sen algoritmi pitรครค jokaista kรคyttรคjรครค graafin solmuna.
  • Resurssien allokointiin kรคytetรครคn DAG:ia (Directed Acyclic Graph). Se tarkistaa resurssien riippuvuuden.
  • Google Hakukoneet kรคyttรคvรคt graafisia kaavioita verkkosivustojen sijoituksen luomiseen.
  • Karttaping laite kรคyttรครค graafitietorakennetta.
  • A reititin ja sen protokolla kรคyttรครค Graafia oppiakseen polun mรครคrรคnpรครคhรคn.

UKK

Graafineuraaliverkot oppivat graafirakenteisesta datasta petosten havaitsemista, suositusten antamista ja lรครคkekehitystรค varten. Tietograafit tukevat tekoรคlyn kysymysvastauksia, ja syvรคoppimiskehykset mallintavat jokaisen laskennan operaatiograafina.

Kyllรค. Tekoรคlyavustajat, kuten GitHub Copilot, voivat luoda BFS-, DFS-, Dijkstra- ja topologisen lajittelun toteutuksia pelkรคstรค kuvauksesta. Reunatapaukset, kuten irralliset solmut, syklit ja tyhjรคt graafit, tulisi silti testata ennen koodin kรคyttรถรค.

Puu on erityinen yhtenรคinen graafityyppi, jossa ei ole syklejรค ja jonka kahden solmun vรคlillรค on tรคsmรคlleen yksi polku. Graafi on yleisempi: se voi sisรคltรครค syklejรค, epรคyhtenรคisiรค osia ja suunnattuja tai painotettuja kaaria.

Kaksi pรครคasiallista lรคpikulkumenetelmรครค ovat leveyshaku (BFS), joka tutkii taso tasolta jonoa kรคyttรคen, ja syvyyshaku (DFS), joka tutkii mahdollisimman syvรคlle kรคyttรคmรคllรค pinoa tai rekursiota ennen takaisinpรคin suuntautuvaa lรคpikulkua.trackuningas.

Tiivistรค tรคmรค viesti seuraavasti: