Это может быть нелепым вопросом, но возможно ли иметь проблему, которая на самом деле становится легче по мере увеличения размера входных данных? Я сомневаюсь, что любые практические проблемы такие, но, может быть, мы можем изобрести вырожденную проблему, которая обладает этим свойством. Например, возможно, он начинает «решать себя» по мере того, как становится больше или ведет себя каким-то другим странным образом.
algorithms
asymptotics
dsaxton
источник
источник
Ответы:
Нет, это невозможно: по крайней мере, не в асимптотическом смысле, когда вам нужно, чтобы проблема становилась все проще и проще, навсегда, как .n → ∞
Пусть будет наилучшим временем выполнения для решения такой проблемы, где - размер входных данных. Обратите внимание, что время выполнения - это количество команд, выполняемых алгоритмом, поэтому оно должно быть неотрицательным целым числом. Другими словами, для всех . Теперь, если мы рассмотрим функцию , мы увидим, что нет такой функции, которая является строго монотонно убывающей. (Каким бы ни было , оно должно быть конечным, скажем, ; но так как монотонно строго убывает, иn T ( n ) ∈ N n T : N → N T ( 0 ) T ( 0 ) = c T T ( c ) ≤ 0 T ( c + 1 ) ≤ - 1 T ( n ) n 0 n ≥ n 0 T ( n )T( н ) N T( n ) ∈ N N T: N → N T( 0 ) T( 0 ) = с T T( с ) ≤ 0 T( с + 1 ) ≤ - 1 , что невозможно.) По аналогичным причинам не существует функции, которая асимптотически строго убывает: мы можем аналогичным образом доказать, что не существует функции времени выполнения где существует такое, что для всех , монотонно строго убывает (любая такая функция должна в конечном итоге стать отрицательной).T( н ) N0 n ≥ n0 T( н )
Таким образом, такая проблема не может существовать по той простой причине, что время выполнения должно быть неотрицательным целым числом.
Обратите внимание, что этот ответ охватывает только детерминированные алгоритмы (т. Е. Время выполнения в худшем случае). Это не исключает возможности рандомизированных алгоритмов, чье ожидаемое время работы строго монотонно уменьшается, навсегда. Я не знаю, возможно ли существование такого алгоритма. Я благодарю Бени Чернявского-Паскина за это наблюдение .
источник
Хотя это не совсем ответ на ваш вопрос, алгоритм поиска строк Бойера-Мура подходит близко. Как Роберт Мур говорит на своем веб-сайте об алгоритме,
Другими словами, в общем случае алгоритм ищет экземпляр целевой строки в исходной строке и для фиксированной исходной строки, чем длиннее целевая строка, тем быстрее работает алгоритм.
источник
Понятно, что с чисто математической, чисто CS-точки зрения это невозможно. Но на самом деле есть несколько реальных примеров того, как масштабирование вашего проекта облегчает его, многие из которых не являются интуитивно понятными для конечных пользователей.
Направления : чем дольше ваши направления, они иногда могут стать легче. Например, если я хочу, чтобы Карты Google указывали, как проехать 3000 миль на запад, я мог бы доехать до Западного побережья и получить инструкции по вождению по пересеченной местности. Но если бы я хотел проехать 6000 миль на запад, я бы получил гораздо более простые инструкции: сесть на самолет из Нью-Йорка и Хоккайдо. Предоставить мне маршрут по пересеченной местности, который включает в себя движение, дороги, погоду и т. Д., Довольно сложно алгоритмически, но сказать мне, чтобы сесть на самолет и поиск рейсов в базе данных, сравнительно значительно проще. График сложности ASCII в зависимости от расстояния:
Рендеринг : скажем, я хочу рендеринг одного лица и рендеринг 1000 лиц; это для рекламного щита, поэтому оба конечных изображения должны быть размером 10000 на 5000 пикселей. Реалистично воспроизвести одно лицо было бы трудно - при разрешении в несколько тысяч пикселей по ширине вы должны использовать действительно мощные машины - но для толпы из 1000 лиц каждое лицо должно иметь ширину всего в десять пикселей и его можно легко клонировать! Я мог бы, вероятно, отрисовать 1000 лиц на своем ноутбуке, но для рендеринга реалистичного лица в 10000 пикселей потребуется очень много времени и мощных машин. График сложности ASCII в сравнении с визуализированными объектами, показывающий, как сложность рендеринга n объектов в изображение заданного размера быстро уменьшается, а затем медленно возвращается:
Аппаратное управление : многое с аппаратным обеспечением становится намного проще. «Двигатель X 1 градус» сложен и / или невозможен, и вам придется иметь дело со всеми видами вещей, с которыми вам не придется сталкиваться при «Двигателе Х 322 градус».
Краткосрочные задачи: скажем, вы хотите, чтобы элемент X включался (очень небольшое количество времени) каждую секунду. Увеличивая время работы X, вам потребуется менее сложное программное и аппаратное обеспечение.
источник
Есть случаи. Это те случаи, когда критерии успеха являются функцией данных, а не попыткой найти единственный ответ. Например, статистические процессы, результаты которых сформулированы с доверительными интервалами, могут стать проще.
Один конкретный случай, о котором я думаю, - это проблемы, которые имеют переход от дискретного поведения к непрерывному, например, потоки жидкости. Решение небольшой проблемы с точностью до степени ошибки может включать моделирование всех дискретных взаимодействий, что может потребовать суперкомпьютер. Непрерывное поведение часто допускает упрощения без получения результатов за пределами связанной ошибки.
источник
Вопрос интересный и ПОЛЕЗНЫЙ, потому что наша философия в информатике заключается в том, чтобы решать проблемы: чем больше мы читаем, тем сложнее. Но, на самом деле, большинство проблем, которые представлены в типичном (сложном), могут быть легко представлены «простым» способом; даже зная реакцию DW (что неверно, учитывая, что «легкий» не означает «быстрее», означает «менее медленный»; поэтому вам не нужно находить отрицательные моменты, вы обнаруживаете асимптотическое время).
Хитрость в том, чтобы найти его - поместить часть решения, такую как подсказки, в качестве записи, а рассмотреть проблему как постоянный параметр.
Пример: Какой самый длинный путь в автомобиле между Лондоном и Парижем, когда нужно дважды посещать французский и британский город и не посещать другую страну? учитывая, вы должны поехать в Бирмингем до Эшфорда, Орлеан до Версаля, Ля-Рошель до Лиможа и т.д ...
Понятно, что эта проблема с длинными записями будет проще, чем с короткими.
Пример использования: Представьте себе игру, управляемую машиной, и ИА компьютера должен определить, должен ли он исследовать больше в игре, чтобы найти больше подсказок, или нет, если сейчас пришло время сделать вывод, какое решение лучше принять ,
источник
Рассмотрим программу, которая принимает в качестве входных данных то, что вы знаете о пароле, а затем пытается его взломать. Я думаю, что это делает то, что вы хотите. Например:
Я должен добавить, что это хитрость, так как заявленная проблема обратна величине ввода. Вы могли бы пропустить один слой абстракции и сказать, что размер ввода велик для отсутствия ввода (проверьте все символы и длины слов) и мал, если вы ввели правильный пароль в начале.
Так что все сводится к тому, сколько абстракции вы позволите.
источник
На самом деле, у меня есть проблема, которая уменьшается по мере увеличения данных. Одно из моих приложений записывает атрибуты определенного продукта, скажем, сыр. Атрибутами являются, например, CheeseType, Brand, Country, Area, MilkType и т. Д. Каждый месяц или около того я получаю список новых сыров, которые появились на рынке за это время, вместе с их атрибутами. Теперь эти атрибуты набираются вручную группой людей. Некоторые делают опечатки, или просто не знают значения для всех атрибутов.
Когда вы делаете поиск в моей базе данных, я пытаюсь предсказать из статистики, каков вкус сыра, основываясь на этих атрибутах. Что происходит, так это то, что для каждого атрибута я получаю диапазон значений; некоторые действительны, некоторые недействительны. Устранение или исправление этих недействительных возможно только при наличии достаточных данных. Речь идет о разнице между реальными значениями и шумом, без исключения редких, но действительных значений.
Как вы можете себе представить, при малой громкости шум слишком важен, чтобы все исправить. Если у вас есть 5 экземпляров чеддера, 1 бри, 1 бри и 1 чедар, как мне узнать, какой из них правильный, а какой опечатка? При большей громкости опечатки имеют тенденцию оставаться очень низкими, но редкие значения получают несколько критических приращений, заставляя их убегать от шума (подкрепленного опытом). В этом случае я мог бы представить, например, 50000 чеддеров, 3000 бри, 5 бри, 15 чедаров.
Так что да, некоторые проблемы решаются в конце концов, когда у вас достаточно данных.
источник
Рассмотрим NP-полную задачу 3-SAT. Если вы продолжаете увеличивать проблему, предоставляя входные данные в форме x_i = true / false, вы либо в конечном итоге преобразуете отдельные дизъюнкции в предложения с двумя переменными, создавая тем самым проблему 2-SAT, которая решительно равна P, либо вы просто получаете истинный / ложный ответ.
В случае, когда на входах x_i = true / false имеется избыточность (один и тот же вход предоставлен много раз или противоречивые входы), вы можете легко отсортировать входы и либо игнорировать избыточные значения, либо сообщить об ошибке, если значения противоречат.
В любом случае, я думаю, что это представляет собой «реалистичную» проблему, которую становится легче решать по мере роста количества вводимых ресурсов. «Более легкий» аспект заключается в преобразовании NP-полной задачи в P-задачу. Вы все еще можете играть в систему, предоставляя нелепые входные данные, так что простая сортировка займет больше времени, чем грубое форсирование проблемы.
Теперь, действительно крутой сценарий был бы, если мы готовы принять T (0) (используя обозначение DW в ответе выше), может быть бесконечным. Например, T (0) может быть эквивалентно решению проблемы остановки Тьюринга. Если бы мы могли придумать такую проблему, чтобы добавление дополнительных ресурсов превратило ее в решаемую проблему, мы бы получили золото. Обратите внимание, что недостаточно асимптотически преобразовать ее в решаемую задачу - потому что это так же плохо, как грубое форсирование проблемы.
источник
Вопрос спрашивает: «возможно ли иметь проблему, которая на самом деле становится легче, когда входные данные увеличиваются в размере?» Что делать, если входные данные являются ресурсами, которые будут использоваться алгоритмом для работы над заданием. Общеизвестно, что чем больше ресурсов, тем лучше. Ниже приведен пример, в котором чем больше сотрудников, тем лучше.
3) Вывод:
вывод - это пути между задачами, которые должны выполнять сотрудники. Каждый путь связан с количеством сотрудников, принимающих его. Например:
4) Возможное решение.
Одним из возможных решений является сначала вычисление кратчайшего пути к ближайшим узлам из A. Это будет прямой путь. Затем рекурсивно вычислите прямой путь для каждой посещенной задачи. Результатом является дерево. Например:
источник