Kirkpatrickův algoritmus
Konstrukce konvexního trupu metodou "rozděl a panuj" - algoritmus pro konstrukci konvexního trupu .
Popis
Daný soubor bodů .
- Pokud ( je nějaké malé celé číslo), pak vytvořte konvexní obal pomocí jedné ze známých metod a zastavte se, jinak přejděte ke kroku 2.
- Původní množinu rozdělme libovolně na dvě podmnožiny přibližně stejné velikosti a (nechť obsahuje body a obsahuje body).
- Rekurzivně najděte konvexní obaly každé z podmnožin a .
- Konvexní obal původní sady sestrojíme jako konvexní obal spojení dvou konvexních polygonů a .
Protože: , složitost tohoto algoritmu je řešením rekurzivního vztahu , kde je doba výstavby konvexního obalu spojení dvou konvexních polygonů, z nichž každý má blízké vrcholy. Dále se ukáže, že .
Definice
Podpůrná čára konvexního mnohoúhelníku je čára procházející některým vrcholem mnohoúhelníku tak, že všechny vnitřní body mnohoúhelníku leží na stejné straně úsečky .
Ke konvexnímu mnohoúhelníku můžete vytvořit podpůrné čáry z bodu , který do něj nepatří. Využijeme toho, že úsečka , kde je nějaký vrchol polygonu , je podpěrnou úsečkou právě tehdy, když hrany a leží ve stejné polorovině ohraničené touto úsečkou. Je snadné vidět, že v nejhorším případě je k sestrojení podpěrných čar zapotřebí jeden průchod vrcholy polygonu , to znamená, že se hledají v lineárním čase.
Implementace
Už máme zkonstruované konvexní trupy a .
- Najdeme nějaký vnitřní bod polygonu (například těžiště libovolných tří vrcholů ). Takový bod bude vnitřním bodem .
- Jsou možné dva případy:
- Bod není vnitřním bodem mnohoúhelníku . Nakreslíme dvě referenční čáry pro mnohoúhelník procházející bodem . Tyto referenční čáry procházejí vrcholy a polygonem . Všechny body uvnitř trojúhelníku nepatří k hranici konvexního trupu . Všechny ostatní body jsou seřazeny podle polárního úhlu vzhledem k bodu , sloučením dvou uspořádaných seznamů vrcholů v čase a následným použitím Grahamovy traversální metody na výsledný seznam , vyžadující pouze lineární čas.
- Bod je vnitřní bod mnohoúhelníku . Uspořádejte vrcholy obou polygonů kolem středu sloučením dvou uspořádaných seznamů vrcholů a dále .
- Nyní lze Grahamův algoritmus aplikovat na výsledný seznam vrcholů, kromě fáze řazení bodů podle polárních souřadnic, pak bude proveden v lineárním čase.
Nyní je získán konvexní obal spojení konvexních polygonů .
Složitost algoritmu
Celkově jsou všechny tři fáze algoritmu dokončeny včas . Získáme tak vztah , jehož řešením, jak známo , je , který určuje složitost algoritmu.
Odkazy