Mercury13, ну так точно так же могут быть частичные решения для задачи останова. Это неконструктивное доказательство. Я не знаю, что за dosomething() в искомом алгоритме. Но я знаю, что оно существует. Потому что иначе бы задача останова решалась.
marlaaa, Есть. Во-первых, там где вы выводите перевод строки - там у вас отступ неправильно поставлен. Эта инструкция вне цикла. Во-вторых, чтобы поменять порядок вывода, вам надо переставить местами циклы, где вывод поисходит.
проходим по длине - 1, чтобы проверить максимально ли число
Пока ладно, но важно, что там внутри делается. Действительно ли в этом цикле вы находите максимальное число?
выводим i-тый и i-1 элементы
Ok.
сравниваем их
Да, сравниваем.
mx = numbers[i+1] # присваиваем к mx максимальное из i-тый и i-1 элементы
Нет. Вы не присваиваете максимум из двух чисел в mx. Вы присваиваете mx второе число, только если оно больше. Иначе ничего не происходит.
После вашего добавления else ваши комментарии действительно становятся верными, кроме одного к циклу. Почему из "присваиваем к mx максимальное из i-тый и i-1 элементы " следует, что цикл "чтобы проверить максимально ли число"?
Вы внутри не ищите максимум в массиве, а много раз присваиваете переменной максимальное из двух чисел. В переменной будет в итоге результат последней операции - а именно максимум из двух последних чисел. Если, как в примере в вопросе, максимум во всем массиве не в конце - вы его не найдете.
Подсказка: Результат работы прошлых итераций как-то должен учитыватся в следующих. Вы этот результат кладете в mx. Значит записанное в mx значение должно как-то влиять на вычисление mx дальше.
Adamos, Векторные умножения будут чуть-чуть медленнее в сравнении и сильно быстрее в преподготовке. Но главное их достоинство - если входные координаты целые, то все можно сделать в целых числах и не парить мозг насчет точности. Плюс не надо выделять память и хранить угол вместе с точками.
Удобнее сортировать относительно крайней точки (например - самой левой из самых нижних). Тогда все точки лежат в одной полуплоскости и тогда не надо городить тригонометрию, чтобы получать углы - точки можно сравнивать векторным произведением.
Ananasi0, очевидно, это задача на структуры данных и алгоритмы. У вас наивное медленное решение и его никак не ускорить. Дайте условие задачи хоть. Подозреваю, что тут может помочь дерево отрезков с отложенным изменением или алгоритм сканирующей прямой плюс какой-нибудь set.
Евгений Журов, Да, callback должен проверять только меньше. Меняя местами параметры вы можете проверять и больше. Если не меньше и не больше, то тогда оно равно.
Код приведенный Alexandroppolus с комментариями весьма понятен и читабелен. Если коллбак еще и назвать IsLessThan, тогда вообще все кристально ясно будет. А то, что ветки (равно, меньше, больше) местами переставлены нисколько не усложнаяет алгоритм бинпоиска.