Komponentti (graafiteoria)

Graafin komponentit on suoraviivaista laskea lineaarisessa ajassa (graafin kärkipisteiden ja särmien lukumäärän suhteen) joko leveys- tai syvyyshakua käyttäen. Kummassakin tapauksessa haku, joka alkaa jostain tietystä pisteestä v, löytää koko komponentin, joka sisältää v:n (eikä enempää), ennen kuin palaa takaisin. Jos haluat löytää kaikki graafin komponentit, tee silmukka sen kärkipisteiden läpi ja aloita uusi leveys- tai syvyyshaku aina, kun silmukka saavuttaa kärkipisteen, jota ei ole jo sisällytetty aiemmin löydettyyn komponenttiin. Hopcroft & Tarjan (1973) kuvailee olennaisesti tätä algoritmia ja toteaa, että siinä vaiheessa se oli ”hyvin tunnettu”.

On olemassa myös tehokkaita algoritmeja, joilla voidaan dynaamisesti seurata graafin komponentteja, kun kärkipisteitä ja särmiä lisätään, suoraviivaisena disjoint-joukkojen tietorakenteiden sovelluksena. Nämä algoritmit vaativat amortisoitua O(α(n))-aikaa operaatiota kohti, missä kärkien ja reunojen lisääminen ja sen komponentin määrittäminen, johon huippu kuuluu, ovat molemmat operaatioita, ja α(n) on hyvin hitaasti kasvava käänteisluku hyvin nopeasti kasvavasta Ackermann-funktiosta. Tähän liittyvä ongelma on komponenttien seuranta, kun kaikki reunat poistetaan graafista yksi kerrallaan; on olemassa algoritmi, jolla tämä ratkaistaan vakioajalla kyselyä kohti ja O(|V||E|)-ajalla tietorakenteen ylläpitoa varten; tämä on O(|V|):n kuoletettu kustannus reunan poistoa kohti. Metsiä varten kustannus voidaan pienentää O(q + |V| log |V|) eli O(log |V|) amortisoituneeksi kustannukseksi per reunan poisto (Shiloach & Even 1981).

Tutkijat ovat tutkineet myös algoritmeja komponenttien etsimiseen rajoitetummissa laskentamalleissa, kuten ohjelmissa, joissa työmuisti on rajoitettu logaritmiseen määrään bittejä (määritelty kompleksisuusluokalla L). Lewis & Papadimitriou (1982) kysyi, onko logavaruudessa mahdollista testata, kuuluvatko kaksi kärkeä suuntaamattoman graafin samaan komponenttiin, ja määritteli monimutkaisuusluokan SL ongelmille, jotka vastaavat logavaruudessa konnektiivisuutta. Lopulta Reingold (2008) onnistui löytämään algoritmin tämän konnektiivisuusongelman ratkaisemiseksi logaritmisessa avaruudessa ja osoitti, että L = SL.

Vastaa

Sähköpostiosoitettasi ei julkaista.