Изменения

Перейти к: навигация, поиск

Convex hull trick

173 байта добавлено, 19:55, 18 января 2017
Альтернативный подход
[[Файл:picture5convexhull.png]]
Доказательство :необходимо показатьДокажем то, что если описанный выше алгоритм корректен.{{Теорема|id=th12392. |statement=Если есть 3 вектора a, b, c, расположенные как на рисунке 5 (т.е. <tex>[a-b, b-c] < 0</tex>, где <tex>[u, v]</tex> - модуль векторного произведения векторов <tex>u</tex> и <tex>v</tex>), то либо (a, u[i]) < (b, u[i]), либо (c, u[i]) < (b, u[i]).|proof=Распишем условие того, что точка b не лежит на выпуклой оболочке векторов <tex>0, a, b, c </tex> : <tex>[a-b, b-c] < 0 \Leftrightarrow (a_{x} - b_{x})\cdot(b_{y} - c_{y}) < (a_{y} - b_{y}) \cdot (b_{x} - c_{x})</tex> (*). Предположим (от противного), что <tex>(b, u[i]) < (a, u[i]) \Leftrightarrow b_{x} + a[i] \cdot b_{y} < c_{x} + a[i] \cdot c_{y} \Leftrightarrow (b_{x} - c_{x}) < a[i] \cdot (c_{y} - b_{y})</tex> и <tex>(b, u[i]) < (c, u[i]) \Leftrightarrow b_{x} + a[i] \cdot b_{y} < a_{x} + a[i] \cdot a_{y} \Leftrightarrow (a_{x} - b_{x}) > a[i] \cdot (b_{y} - a_{y})</tex>.
Распишем условие того, что точка b не лежит на выпуклой оболочке векторов Подставим эти неравенства в (*). Получим цепочку неравенств : <tex>0, a, b, c </tex> : <tex>[a-b, b-ci] < 0 \Leftrightarrow cdot (a_{xy} - b_{xy})</tex><tex> \cdot(b_c_{y} - c_b_{y}) = a[i]</tex>< tex> \cdot (a_b_{y} - b_a_{y}) \cdot </tex><tex>(b_{xy} - c_{xy})</tex> (*). Предположим (от противного), что <tex>(b, u[i]) < (a, u[i]) \Leftrightarrow a_{x} - b_{x} + a[i] )</tex><tex> \cdot (b_{y} - c_{y})</tex><tex> < c_(a_{xy} + a[i] \cdot c_- b_{y} ) \Leftrightarrow cdot </tex><tex>(b_{x} - c_{x}) </tex> <tex>< a[i] \cdot (c_a_{y} - b_{y})</tex> и <tex>\cdot (b, u[i]c_{y} - b_{y}) < (c, u/tex>. Получили противоречие : <tex>a[i]) \Leftrightarrow cdot (a_{y} - b_{xy} + a[i] ) \cdot (c_{y} - b_{y} ) < a_{x} + a[i] \cdot (a_{y} \Leftrightarrow (a_{x} - b_{xy}) > a[i] \cdot (b_c_{y} - a_b_{y})</tex>. Значит предположение неверно, чтд.}} Из доказанной теоремы и следует корректность алгоритма.
Подставим эти неравенства в (*). Получим цепочку неравенств : <tex>a[i] \cdot (a_{y} - b_{y})</tex><tex> \cdot (c_{y} - b_{y}) = a[i]</tex><tex> \cdot (b_{y} - a_{y}) \cdot </tex><tex>(b_{y} - c_{y})</tex> <tex> < (a_{x} - b_{x})</tex><tex> \cdot (b_{y} - c_{y})</tex><tex> < (a_{y} - b_{y}) \cdot </tex><tex>(b_{x} - c_{x})</tex> <tex>< a[i] \cdot (a_{y} - b_{y})</tex><tex> \cdot (c_{y} - b_{y})</tex>. Получили противоречие : <tex>a[i] \cdot (a_{y} - b_{y}) \cdot (c_{y} - b_{y}) < a[i] \cdot (a_{y} - b_{y}) \cdot (c_{y} - b_{y})</tex>. Значит предположение неверно, чтд.
==См. также==
1) http://neerc.ifmo.ru/wiki/index.php?title=Статические_выпуклые_оболочки:_Джарвис,_Грэхем,_Эндрю,_Чен,_QuickHull
Анонимный участник

Навигация