Kirkpatrickův algoritmus

Konstrukce konvexního trupu metodou "rozděl a panuj"  - algoritmus pro konstrukci konvexního trupu .

Popis

Daný soubor bodů .

  1. 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.
  2. Původní množinu rozdělme libovolně na dvě podmnožiny přibližně stejné velikosti a (nechť obsahuje body a obsahuje body).
  3. Rekurzivně najděte konvexní obaly každé z podmnožin a .
  4. 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 .

  1. Najdeme nějaký vnitřní bod polygonu (například těžiště libovolných tří vrcholů ). Takový bod bude vnitřním bodem .
  2. Jsou možné dva případy:
    1. 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.
    2. 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 .
  3. 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