Изменения

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

Convex hull trick

178 байт добавлено, 00:16, 18 января 2017
Альтернативный подход
[[Файл:picture5convexhull.png]]
Доказательство : необходимо показать, что если есть 3 вектора a, b, c, расположенные как на рисунке 5 (т.е. <tex>[a-b, b-c] < \leqslant 0</tex>, где <tex>[u, v]</tex> - модуль векторного произведения векторов <tex>u</tex> и <tex>v</tex>), то либо (a, u[i]) < \leqslant (b, u[i]), либо (c, u[i]) < \leqslant (b, u[i]).
Распишем условие того, что точка b не лежит на выпуклой оболочке векторов<tex> 0, a, b, c </tex> : <tex>[a-b, b-c] < \leqslant 0 <=> \Leftrightarrow (a_{x} - b_{x})*(b_{y} - c_{y}) < \leqslant (a_{y} - b_{y}) * (b_{x} - c_{x})</tex> (*). Предположим (от противного), что <tex>(b, u[i]) < \leqslant (a, u[i]) <=> \Leftrightarrow b_{x} + a[i]*b_{y} < \leqslant c_{x} + a[i] * c_{y} <=> \Leftrightarrow (b_{x} - c_{x}) < \leqslant a[i] * (c_{y} - b_{y})</tex> и <tex>(b, u[i]) < \leqslant (c, u[i]) <=> \Leftrightarrow b_{x} + a[i] * b_{y} < \leqslant a_{x} + a[i] * a_{y} <=> \Leftrightarrow (a_{x} - b_{x}) > \geqslant a[i] * (b_{y} - a_{y})</tex>. Подставим эти неравенства в (*). Получим цепочку неравенств : <tex>a[i] * (a_{y} - b_{y}) * (c_{y} - b_{y}) = a[i] * (b_{y} - a_{y}) * (b_{y} - c_{y}) < \leqslant (a_{x} - b_{x}) * (b_{y} - c_{y}) < \leqslant (a_{y} - b_{y}) * (b_{x} - c_{x}) < \leqslant a[i] * (a_{y} - b_{y}) * (c_{y} - b_{y})</tex>. Получили противоречие : <tex>a[i] * (a_{y} - b_{y}) * (c_{y} - b_{y}) < \leqslant a[i] * (a_{y} - b_{y}) * (c_{y} - b_{y})</tex>. Значит предположение неверно, чтд.
Анонимный участник

Навигация