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 .


- 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.


- 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).







- Hitta rekursivt de konvexa skroven för var och en av delmängderna och .


- 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 .


- 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 .





- Två fall är möjliga:
- 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.











- 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 .






- 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