Spook
Эта "неприятность" свойственна алгоритму, предложенному тов.
ewert. В принципе, этот алгоритм считается стандартным, потому что очевиден, платить приходится огромной сложностью по сравнению с возможной -
.
Мне для практических нужд хватало этой сложности, тем более, что на самом деле там стоит
, где
- число точек в выпуклой оболочке множества.
Простой с виду и, видимо, с точки зрения реализации алгоритм со сложность
приведён в первой ссылке.
На самом деле, теоретические сложности - это, конечно, здорово и интересно, но на практике они нужны далеко не всегда и потому зачастую представляют собой просто интерес или даже спорт. Понятно, что
является оптимальной сложностью в нашей задаче (нужно же прочитать входные данные хотя бы), поэтому можно считать, что задача решена полностью. Однако константа в
большом наверняка кроется такая, что
при разумных значениях
будет не сильно хуже, а возможно и лучше.
Во всяком случае подобные вещи наблюдаются во многих алгоритмах, ближайшие, что приходит на ум, - умножение чисел метотом Карацубы (два
-битовых числа можно умножить "в столбик" за время
, а метод Карацубы позволяет это сделать за
; впрочем, используя быстрое преобразование Фурье эта задача решается за время что-то вроде
), поиск
-порядковой статистики за линейное время (то есть поиск
-го по величине элемента массива; тривиальное решение - отсортировать весь массив за время
и найти искомый элемент оказывается практически наилучшим), Фиббоначиевы кучи (отдельная тема, в двух словах не рассказать). Всё это познавательно, но не всегда практично.