Kirkpatrickin algoritmi

Kuperan rungon rakentaminen "jakaa ja hallitse" -menetelmällä  - algoritmi kuperan rungon rakentamiseksi .

Kuvaus

Annettu joukko pisteitä .

  1. Jos (  on jokin pieni kokonaisluku), rakenna kupera runko jollakin tunnetuista menetelmistä ja lopeta, muussa tapauksessa siirry vaiheeseen 2.
  2. Jaetaan alkuperäinen joukko mielivaltaisesti kahteen suunnilleen samankokoiseen osajoukkoon ja ( sisältää pisteitä ja sisältää pisteitä).
  3. Etsi rekursiivisesti kunkin osajoukon kupera runko ja .
  4. Alkuperäisen joukon kupera runko rakennetaan kahden kuperan monikulmion ja yhdistelmän kuperaksi rungoksi .

Koska: , tämän algoritmin monimutkaisuus on ratkaisu rekursiiviselle suhteelle , jossa on kahden kuperan monikulmion, joilla kullakin on lähellä kärkipisteitä  , liiton kuperan rungon rakennusaika . Se näytetään seuraavaksi .

Määritelmät

Kuperaan monikulmion tukiviiva on viiva, joka kulkee polygonin jonkin kärjen kautta siten, että kaikki monikulmion sisäpisteet ovat samalla puolella suoraa .

Kuperaan monikulmioon voit rakentaa tukiviivoja pisteestä , joka ei kuulu siihen. Käytämme sitä tosiasiaa, että viiva , jossa  on jokin monikulmion kärki, on tukiviiva jos ja vain jos reunat ja sijaitsevat samassa puolitasossa, jonka rajaa tämä viiva. On helppo huomata, että pahimmassa tapauksessa monikulmion kärkien yksi läpikulku tarvitaan tukilinjojen rakentamiseen , eli niitä etsitään lineaarisessa ajassa.

Toteutus

Olkoon meillä jo rakennettu kupera runko ja .

  1. Etsitään jokin monikulmion sisäinen piste (esimerkiksi minkä tahansa kolmen kärjen painopiste ). Tällainen piste on sisäpiste .
  2. Kaksi tapausta on mahdollista:
    1. Piste ei ole polygonin sisäpiste . Piirretään kaksi vertailuviivaa pisteen läpi kulkevalle monikulmiolle . Nämä viiteviivat kulkevat kärkien ja monikulmion läpi . Kaikki kolmion sisällä olevat pisteet eivät kuulu kuperan rungon rajaan . Kaikki muut pisteet järjestetään napakulman mukaan suhteessa pisteeseen yhdistämällä kaksi järjestettyä kärkiluetteloa ajassa ja käyttämällä sitten Grahamin läpikulkumenetelmää tuloksena olevaan listaan ​​, joka vaatii vain lineaarista aikaa.
    2. Piste on polygonin sisäpiste . Järjestä molempien polygonien kärjet keskustan ympärillä yhdistämällä kaksi järjestettyä kärkiluetteloa ja sen jälkeen .
  3. Nyt Grahamin algoritmia voidaan soveltaa tuloksena olevaan kärkilistaan, paitsi vaihe, jossa pisteet lajitellaan napakoordinaatin mukaan, sitten se suoritetaan lineaarisessa ajassa.

Nyt saadaan kupera monikulmioiden liiton kupera runko .

Algoritmin monimutkaisuus

Kaiken kaikkiaan algoritmin kaikki kolme vaihetta valmistuvat ajallaan . Siten saadaan relaatio , jonka ratkaisu, kuten tiedetään , on , joka määrittää algoritmin monimutkaisuuden.

Linkit