Kirkpatricks algoritm

Konstruktion av ett konvext skrov med "dela och erövra"-metoden  - en algoritm för att konstruera ett konvext skrov .

Beskrivning

Givet en uppsättning poäng .

  1. Om (  är något litet heltal), konstruera ett konvext skrov med någon av de kända metoderna och sluta, annars gå till steg 2.
  2. Låt oss dela upp den ursprungliga uppsättningen godtyckligt i två delmängder av ungefär lika stora och (låt den innehålla punkter och innehålla punkter).
  3. Hitta rekursivt de konvexa skroven för var och en av delmängderna och .
  4. Vi konstruerar det konvexa skrovet av originaluppsättningen som det konvexa skrovet av föreningen av två konvexa polygoner och .

Eftersom: , komplexiteten hos denna algoritm är lösningen av den rekursiva relationen , där  är konstruktionstiden för det konvexa skrovet av föreningen av två konvexa polygoner, som var och en har nära hörn. Det kommer att visas härnäst att .

Definitioner

Stödlinjen till en konvex polygon är en linje som passerar genom någon vertex av polygonen på ett sådant sätt att alla inre punkter i polygonen ligger på samma sida av linjen .

Till en konvex polygon kan du bygga stödlinjer från en punkt som inte hör till den. Vi använder det faktum att linjen , där  är någon vertex av polygonen , är en stödlinje till om och endast om kanterna och ligger i samma halvplan som avgränsas av denna linje. Det är lätt att se att det i värsta fall krävs en korsning av polygonens hörn för att konstruera stödlinjerna , det vill säga de söks efter i linjär tid.

Implementering

Låt oss redan ha konstruerade konvexa skrov och .

  1. Låt oss hitta någon inre punkt i polygonen (till exempel tyngdpunkten för tre hörn ). En sådan punkt kommer att vara en inre punkt .
  2. Två fall är möjliga:
    1. Punkten är inte en inre punkt i polygonen . Vi ritar två referenslinjer för polygonen som går genom punkten . Dessa referenslinjer passerar genom hörnen och polygonen . Alla punkter inuti triangeln tillhör inte gränsen för det konvexa skrovet . Alla andra punkter är ordnade efter polär vinkel i förhållande till punkten , genom att slå samman de två ordnade listorna med hörn i tid , och sedan tillämpa Graham -traversalmetoden på den resulterande listan , som endast kräver linjär tid.
    2. Punkten är polygonens inre punkt . Ordna hörn av båda polygonerna runt mitten genom att slå samman de två ordnade listorna med hörn och bortom .
  3. Nu kan Grahams algoritm appliceras på den resulterande listan med hörn, förutom fasen för sortering av punkter efter polära koordinater, då kommer den att exekveras i linjär tid.

Det konvexa skrovet för föreningen av konvexa polygoner erhålls nu .

Algoritmens komplexitet

Totalt slutförs alla tre faserna av algoritmen i tid . Således får vi relationen , vars lösning, som bekant , är , som bestämmer komplexiteten hos algoritmen.

Länkar