10.6 Triangulace konvexního mnohoúhelníku
Definice 10.1 (Triangulace)
Nechť \(U\) je konvexní \(n\)-úhelník, \(n \gt 3\), zadaný kartézskými souřadnicemi vrcholů \(a_1, a_2,\dots, a_n\) v rovině číslovanými proti směru hodinových ručiček. Pak
- Diagonála \(a_ia_j\) = úsečka spojující 2 nesousední vrcholy \(a_i, a_j\).
- Triangulace \(U\) = taková podmnožina jeho diagonál, která rozděluje plochu \(U\) na trojúhelníky a ve které se žádné dvě diagonály neprotínají (až na své koncové vrcholy).
Pozorování
Každá triangulace \(n\)-úhelníku sestává z \(n − 3\) diagonál a dělí \(U\) na \(n − 2\) trojúhelníků.
Definice 10.2 (Vlastnosti triangulace)
- Délku diagonály \(a_ia_j\) značíme \(\Vert a_ia_j \Vert\).
- Velikost triangulace je součet délek jejích diagonál.
- Minimální triangulace mnohoúhelníku (MTM) \(U\) je ta z triangulací \(U\), která má minimální velikost.
Problém minimální triangulace mnohoúhelníku
- Na vstupu je konvexní \(n\)-úhelník \(U\) zadaný kartézskými souřadnicemi vrcholů \(a_1, a_2,\dots, a_n\) v rovině.
- Úkolem je určit velikost jeho minimální triangulace, případně takovou triangulaci vypsat.
Velikost MTM - myšlenka
- Ke každé hraně mnohoúhelníku v každém řešení „přiléhá“ jeden trojúhelník.
- Speciálně je to pravda pro hranu \(a_1a_n\) na kterou se zaměříme.
- Zvolíme-li libovolný takový trojúhelník \(T\), rozdělíme mnohoúhelník \(U\) na dva menší
(z nichž některý může být prázdný).
- Každá triangulace se skládá z diagonál obsažených v nějakém trojúhelníku \(T\) a z triangulace menšího mnohoúhelníka nebo obou menších mnohoúhelníků
- Minimální triangulace se tedy skládá z diagonál obsažených v nějakém trojúhelníku \(T\) a z minimálních triangulací menších mnohoúhelníků. Tyto triangulace najdeme rekurzivně.
- Protože dopředu nevíme, který trojúhelník patří do minimální triangulace, musíme vyzkoušet všechny.
Algoritmus 10.12 (MtmRec)
Fakt o počtu různých triangulací
Počet různých triangulací konvexního \(n\)-úhelníku je dán \((n − 2)\)-tým
Catalanovým číslem \(C(n - 2) = \frac{1}{n-1} \binom{2n-4}{n-2} = 2^{\Theta(n)}\)
Důsledek faktu o počtu triangulací
MtmRec
má exponenciální časovou složitost.
Velikost MTM - memoizace
- Definujeme nyní hodnoty \(M[i, j]\) jako
- velikost minimální triangulace mnohoúhelníku \(a_i ,\dots, a_j\).
- Číslo \(M[i, j]\) má smysl pro \(j \gt i + 2\) (mnohoúhelník je tvořen aspoň třemi vrcholy).
- Zjevně \(M[i, i + 2] = 0\).
- Hodnota \(M[1, n]\) představuje velikost minimální triangulace celého \(a_1,\dots, a_n\), tedy řešení úlohy Velikost MTM.
- Hodnoty \(M[i, j]\) budeme počítat postupně podle velikosti mnohoúhelníka, tedy podle rozdílu \(j − i\).
- Obecně, při výpočtu \(M[i, j]\) je třeba zkusit všechny trojúhelníky \(T\), které přiléhají stranou k úsečce \(a_ia_j\).
- Jejich třetí vrchol \(a_k\) je některý z \(a_{i+1}, a_{i+2},\dots, a_{j−1}\), čili \(k \in \{i + 1,\dots, j − 1\}\).
- Pokud třetí vrchol \(a_k\) je některý z \(a_{i+2},\dots, a_{j−2}\), pak trojúhelník \(T\) rozdělí zkoumaný mnohoúhelník na dva menší mnohoúhelníky, jejichž optimální triangulace jsme již spočítali dříve.
- Takže hledáme \(k\), které vede na minimum výrazu
Algoritmus MtmIter
Pozorování o časové složitosti MtmIter
Časová složitost algoritmu MtmIter
je \(O(n^3)\) a paměťová \(O(n^2)\).