Проблема определения того, имеет ли программа «производительность оптимальности» A или «производительность оптимальности» B практически для любого определения «производительности оптимальности», вообще неразрешима (доказательство ниже). Это подразумевает, что не существует единственного метода, который всегда может сказать вам, насколько оптимален алгоритм.
Однако существуют методы, которые часто применяются при анализе алгоритмов аппроксимации. Часто аппроксимационные алгоритмы оцениваются по их гарантиям того, насколько далеко их решение от оптимального решения. Я приведу пример задачи и аппроксимации, которую я докажу, используя метод «нижней границы», который очень часто используется для доказательства отношений.
Рассматриваемая проблема - это проблема «Загрузка грузовика»: у нас много идентичных грузовиков (столько, сколько нам нужно), каждый из которых способен выдерживать нагрузку весом не более T. У нас есть n объектов, которые мы хотим загрузить в эти грузовики для транспорт. Каждый объект i имеет вес w_i, где w_i <= T (поэтому нет предметов, которые не могут поместиться в грузовик даже сами по себе). Предметы не могут быть разделены на части. Мы хотели бы заполнить грузовики так, чтобы нам было нужно как можно меньше грузовиков. Эта проблема является NP-полной.
Существует очень простой алгоритм приближения для этой задачи. Мы просто начинаем загружать грузовик предметами, пока грузовик не будет настолько заполнен, что следующий предмет не поместится. Затем мы берем другой грузовик и загружаем этот грузовик этим предметом, который не помещался в предыдущий грузовик. Мы больше не грузим предметы на этот грузовик: вместо этого мы берем новый грузовик, снова наполняем его большим количеством предметов, пока он больше не помещается, кладем последний предмет на свой грузовик и так далее.
Этот алгоритм представляет собой так называемое 2-приближение для задачи: он использует не более чем вдвое больше грузовиков, чем требуется для оптимального решения. «Максимум» имеет решающее значение: нам может повезти и мы найдем оптимальное решение, но, по крайней мере, мы не будем делать слишком плохо.
Чтобы доказать это, мы сначала определим нижнюю границу для оптимального количества грузовиков, которое нам нужно. Для этого представьте, что нам разрешено разрезать предметы на части: тогда мы могли бы легко заполнить каждый грузовик, но последний полностью. Количество грузовиков, которое нам понадобилось бы, если бы мы это сделали, является нижней границей количества грузовиков, которое нам нужно для первоначального вопроса: в «лучшем» случае оптимальное решение всегда полностью заполняет каждый грузовик, и в этом случае количество грузовиков равно, но если оптимальные решения оставляют грузовики незаполненными, то может потребоваться только больше грузовиков.
Теперь посмотрим на наш алгоритм приближения. Обратите внимание, что на каждом этапе мы (частично) заполняем два грузовика. Также обратите внимание, что из-за того, как работает алгоритм, предметы в первом грузовике и предмет во втором грузовике не могут поместиться в первом грузовике, поэтому их сумма не менее T. Это означает, что на каждом шаге мы загружаем по крайней мере полный грузовик стоимостью предметов на двух грузовиках. Теперь сравните это с нашей нижней границей: в этом случае мы загружаем полный грузовик на один грузовик. Другими словами, наш алгоритм приближения вычисляет (в линейное время) решение, которое очень похоже на нашу нижнюю границу «решение», но использует два грузовика вместо одного. Следовательно, мы используем не более чем вдвое больше грузовиков, чем оптимальный алгоритм, потому что мы используем в два раза больше грузовиков, чем наша нижняя граница оптимального алгоритма.
Этот алгоритм дает приближение с постоянным множителем: он не более чем в 2 раза хуже, чем оптимальное решение. Некоторые примеры других мер: самое большее C больше, чем оптимальное решение (аддитивная ошибка, довольно редко), самое большее c log n раз хуже, чем оптимальное решение, самое большее cn раз хуже, чем оптимальное решение, самое большее c 2 ^ (dn) в разы хуже, чем оптимальное решение (очень плохо; например, общий TSP допускает только алгоритмы с такого рода гарантиями).
Конечно, если вы хотите быть уверены, что фактор, который вы доказываете, является лучшим фактором, который вы можете доказать, вы должны попытаться найти примеры, в которых решение, которое дает ваш алгоритм, действительно настолько плохое, насколько это возможно.
Также обратите внимание, что мы иногда используем алгоритмы аппроксимации для задач, которые не являются NP-сложными.
Я узнал это (и многое другое) в курсе алгоритмов аппроксимации в моем университете.
Доказательство неразрешимости: пусть P - проблема, а A и B - алгоритмы аппроксимации для P, где A и B не имеют одинаковую «оптимальность» для некоторого разумного определения «оптимальности», и где время работы A и B равно omega (1) (строго медленнее, чем постоянное время, т. Е. Они становятся медленнее для больших экземпляров) и где A и B всегда останавливаются.
Пусть D - программа, которая утверждает, что она может вычислить следующее: учитывая, что какая-то программа C вычисляет приближение для P, решите, хорош ли он как A или как B для достаточно больших входных данных (поэтому вы можете использовать это для классификации программ согласно их оптимальности).
Затем мы можем использовать D для решения проблемы остановки. Пусть E - программа, а F - вход для этой программы. Мы будем использовать D, чтобы решить, остановится ли E на входе F.
Мы разрабатываем программу G, которая выполняет следующие действия: учитывая вход S для задачи P, она запускает E на F и A на S параллельно: она выполняет E некоторое время, затем A, затем E снова и так далее. Если E останавливается на F, он прекращает запуск A и вместо этого запускает B на S и возвращает результат B. Если A останавливается до E, он возвращает результат A.
Использование D на G теперь решает, останавливается ли E на F: если E останавливается на F, то для достаточно больших входов S, E останавливается на F до того, как A останавливается на S (потому что время, необходимое для остановки E, не зависит от размера вход, в отличие от А). Поэтому D сообщает, что G имеет характеристики оптимальности B. Если E не останавливается на F, D сообщит, что G имеет характеристики оптимальности A.