При проектировании и анализе алгоритмов комбинаторной оптимизации параметрический поиск — это метод, изобретенный Нимродом Мегиддо (1983) для преобразования алгоритма принятия решения (имеет ли эта задача оптимизации решение с качеством лучше некоторого заданного порога?) в алгоритм оптимизации (найти наилучшее решение). Он часто используется для решения задач оптимизации в вычислительной геометрии .
Основная идея параметрического поиска заключается в имитации тестового алгоритма , который принимает в качестве входных данных числовой параметр , как если бы он запускался с (неизвестным) оптимальным значением решения в качестве входных данных. Предполагается, что этот тестовый алгоритм ведет себя прерывисто , когда , и работает со своим параметром только путем простых сравнений с другими вычисленными значениями или путем проверки знака полиномиальных функций низкой степени . Для имитации алгоритма необходимо смоделировать каждое из этих сравнений или тестов, даже если неизвестно смоделированного алгоритма. Для имитации каждого сравнения параметрический поиск применяет второй алгоритм, алгоритм принятия решений , который принимает в качестве входных данных другой числовой параметр , и который определяет, является ли значение выше, ниже или равно оптимальному значению решения .
Поскольку сам алгоритм принятия решения обязательно ведет себя прерывисто при , тот же алгоритм может также использоваться в качестве тестового алгоритма. Однако многие приложения используют другие тестовые алгоритмы (часто, алгоритмы сортировки сравнения ). Расширенные версии метода параметрического поиска используют параллельный алгоритм в качестве тестового алгоритма и группируют сравнения, которые должны быть смоделированы, в пакеты, чтобы значительно сократить количество экземпляров алгоритма принятия решения.
В самой базовой форме параметрического метода поиска как алгоритм проверки, так и алгоритмы принятия решений являются последовательными (непараллельными) алгоритмами, возможно, одним и тем же алгоритмом. Методика имитирует алгоритм проверки шаг за шагом, как он бы работал, если бы в качестве параметра было задано (неизвестное) оптимальное значение решения . Всякий раз, когда моделирование достигает шага, на котором алгоритм проверки сравнивает свой параметр с каким-то другим числом , он не может выполнить этот шаг, выполнив численное сравнение, поскольку он не знает, что это такое. Вместо этого он вызывает алгоритм решения с параметром и использует результат алгоритма решения для определения выходных данных сравнения. Таким образом, время для моделирования в конечном итоге становится равным произведению времен для алгоритмов проверки и принятия решений. Поскольку предполагается, что алгоритм проверки ведет себя прерывисто при оптимальном значении решения, его нельзя точно смоделировать, если одно из значений параметров, переданных алгоритму принятия решений, на самом деле не равно оптимальному значению решения. Когда это происходит, алгоритм принятия решений может обнаружить равенство и сохранить оптимальное значение решения для последующего вывода. Если алгоритму тестирования необходимо знать знак многочлена в , это можно снова смоделировать, передав корни многочлена алгоритму принятия решений, чтобы определить, является ли неизвестное значение решения одним из этих корней или, если нет, то между какими двумя корнями оно лежит.
Пример, рассмотренный как Мегиддо (1983), так и ван Острумом и Вельткампом (2002), касается системы из нечетного числа частиц, все из которых движутся вправо с разными постоянными скоростями вдоль одной и той же линии. Медиана частиц также будет иметь правостороннее движение, но кусочно-линейное, а не имеющее постоянной скорости, поскольку разные частицы будут медианой в разное время. Первоначально частицы и их медиана находятся слева от начала координат линии, а в конечном итоге они и их медиана будут все справа от начала координат. Задача состоит в том, чтобы вычислить время , в которое медиана будет точно лежать в начале координат. Алгоритм принятия решений по линейному времени легко определить: для любого времени можно вычислить положение каждой частицы в момент времени и подсчитать количество частиц по каждую сторону от начала координат. Если частиц слева больше, чем справа, то , а если частиц справа больше, чем слева, то . На каждом этапе этого алгоритма принятия решений входной параметр сравнивается со временем, за которое одна из частиц пересекает начало координат.
Использование этого алгоритма принятия решений как в качестве тестового алгоритма, так и в качестве алгоритма принятия решений параметрического поиска приводит к алгоритму нахождения оптимального времени в квадратичном общем времени. Чтобы смоделировать алгоритм принятия решений для параметра , моделирование должно определить для каждой частицы, находится ли ее время пересечения до или после , и, следовательно, находится ли она слева или справа от начала координат в момент времени . Ответ на этот вопрос для одной частицы — сравнение времени пересечения для частицы с неизвестным оптимальным временем пересечения — можно выполнить, запустив тот же алгоритм принятия решений со временем пересечения для частицы в качестве параметра. Таким образом, моделирование заканчивается запуском алгоритма принятия решений для каждого времени пересечения частиц, одно из которых должно быть оптимальным временем пересечения. Запуск алгоритма принятия решений один раз занимает линейное время, поэтому его запуск отдельно для каждого времени пересечения занимает квадратичное время.
Мегиддо замечает, что для этой конкретной проблемы существует простой алгоритм линейного времени, который не включает параметрический поиск: просто определить время, в которое каждая частица пересекает начало координат, и вернуть медиану этих времен. Однако он объясняет, что параметрический поиск часто соответствует лучшему известному времени выполнения или дает самый быстрый известный алгоритм для более сложных задач.
Как уже заметил Мегиддо (1983), метод параметрического поиска можно существенно ускорить, заменив имитируемый тестовый алгоритм эффективным параллельным алгоритмом , например, в модели параллельной машины с произвольным доступом (PRAM) параллельных вычислений, где набор процессоров работает синхронно в общей памяти , все выполняя одну и ту же последовательность операций по разным адресам памяти. Если тестовый алгоритм является алгоритмом PRAM, использует процессоры и занимает время (то есть шаги, на которых каждый процессор выполняет одну операцию), то каждый из его шагов может быть смоделирован с использованием алгоритма принятия решений для определения результатов не более чем числовых сравнений. Находя срединное или близкое к медианному значение в наборе сравнений, которые необходимо оценить, и передавая это единственное значение алгоритму принятия решений, можно исключить половину или почти половину сравнений всего одним вызовом алгоритма принятия решений. Многократно уменьшая вдвое набор сравнений, требуемых моделированием, таким образом, пока не останется ни одного, можно смоделировать результаты числовых сравнений, используя только вызовы алгоритма принятия решений. Таким образом, общее время параметрического поиска в этом случае становится (для самой симуляции) плюс время вызовов алгоритма принятия решения (для пакетов сравнений, принимая вызовы на пакет). Часто для задачи, которая может быть решена таким образом, произведение времени на процессор алгоритма PRAM сопоставимо со временем последовательного алгоритма принятия решения, а параллельное время является полилогарифмическим , что приводит к общему времени параметрического поиска, которое медленнее алгоритма принятия решения всего лишь на полилогарифмический множитель.
В случае примера задачи нахождения времени пересечения медианы движущихся частиц последовательный тестовый алгоритм может быть заменен параллельным алгоритмом сортировки , который сортирует позиции частиц в момент времени, заданный параметром алгоритма, а затем использует отсортированный порядок для определения медианной частицы и нахождения знака ее позиции. Лучшим выбором для этого алгоритма (согласно его теоретическому анализу, если не на практике) является сортировочная сеть Ajtai , Komlós и Szemerédi (1983). Это можно интерпретировать как алгоритм PRAM, в котором количество процессоров пропорционально длине входных данных , а количество параллельных шагов является логарифмическим. Таким образом, последовательное моделирование этого алгоритма требует времени для самого моделирования вместе с пакетами сравнений, каждое из которых может быть обработано вызовами алгоритма принятия решений с линейным временем. Объединение этих временных границ дает общее время для параметрического поиска. Это не оптимальное время для этой задачи — ту же задачу можно решить быстрее, заметив, что время пересечения медианы равно медиане времен пересечения частиц — но этот же метод можно применить к другим более сложным задачам оптимизации, и во многих случаях он обеспечивает самый быстрый из известных сильно полиномиальных алгоритмов для этих задач.
Из-за больших постоянных факторов, возникающих при анализе сортировочной сети AKS, параметрический поиск с использованием этой сети в качестве тестового алгоритма нецелесообразен. Вместо этого ван Оострум и Вельткамп (2002) предлагают использовать параллельную форму быстрой сортировки (алгоритм, который многократно разбивает входные данные на два подмножества, а затем рекурсивно сортирует каждое подмножество). В этом алгоритме шаг разбиения является массивно параллельным (каждый входной элемент должен сравниваться с выбранным опорным элементом), и два рекурсивных вызова могут выполняться параллельно друг с другом. Результирующий параметрический алгоритм в худшем случае медленнее , чем алгоритм, основанный на сортировочной сети AKS. Однако ван Оострум и Вельткамп утверждают, что если результаты прошлых алгоритмов принятия решений сохраняются (так что только сравнения, не разрешенные этими результатами, приведут к дополнительным вызовам алгоритма принятия решений), а значения сравнения, проверенные смоделированным тестовым алгоритмом, достаточно равномерно распределены, то по мере выполнения алгоритма количество не разрешенных сравнений, сгенерированных на каждом временном шаге, будет небольшим. На основании этого эвристического анализа и экспериментальных результатов реализации алгоритма они утверждают, что параметрический алгоритм поиска на основе быстрой сортировки будет более практичным, чем можно было бы предположить на основе анализа худшего случая.
Коул (1987) дополнительно оптимизировал метод параметрического поиска для случаев (таких как пример), в которых тестовый алгоритм является алгоритмом сортировки сравнения. Для сети сортировки AKS и некоторых других алгоритмов сортировки, которые могут использоваться вместо нее, Коул замечает, что нет необходимости поддерживать синхронизацию моделируемых процессоров друг с другом: вместо этого можно позволить некоторым из них продвигаться дальше по алгоритму сортировки, в то время как другие будут ждать определения результатов их сравнений. Основываясь на этом принципе, Коул модифицирует моделирование алгоритма сортировки так, чтобы он поддерживал набор неразрешенных моделируемых сравнений, которые не все могут исходить из одного и того же параллельного временного шага тестового алгоритма. Как и в синхронизированной параллельной версии параметрического поиска, можно разрешить половину этих сравнений, найдя медианное значение сравнения и вызвав алгоритм принятия решения на этом значении. Затем, вместо того, чтобы повторять эту процедуру деления пополам до тех пор, пока коллекция неразрешенных сравнений не станет пустой, Коул позволяет процессорам, ожидавшим разрешенных сравнений, продвигаться по моделированию, пока они не достигнут другого сравнения, которое должно быть решено. Используя этот метод, Коул показывает, что параметрический алгоритм поиска, в котором тестовый алгоритм сортирует, может быть завершен с использованием только логарифмического числа вызовов алгоритма принятия решений вместо вызовов, сделанных оригинальной версией параметрического поиска Мегиддо. Вместо использования сортировочной сети AKS, также можно объединить эту технику с параллельным алгоритмом сортировки слиянием Коула (1988), что приводит к временным ограничениям с меньшими постоянными множителями, которые, однако, все еще недостаточно малы, чтобы быть практичными. Аналогичное ускорение может быть получено для любой задачи, которая может быть вычислена на распределенной вычислительной сети ограниченной степени (как сортировочная сеть AKS), либо с помощью техники Коула, либо с помощью связанной техники моделирования нескольких путей вычисления (Fernández-Baca 2001).
Goodrich & Pszona (2013) объединяют теоретическое улучшение Коула с практическими ускорениями ван Оострума и Вельткампа (2002). Вместо использования параллельной быстрой сортировки, как это делали ван Оострум и Вельткамп, они используют сортировку по ящикам, вариант быстрой сортировки, разработанный Рейщуком (1985), в котором шаг разбиения случайным образом разбивает входные данные на более мелкие подзадачи вместо только двух подзадач. Как и в методе Коула, они используют десинхронизированный параметрический поиск, в котором каждый отдельный поток выполнения имитируемого параллельного алгоритма сортировки может продолжаться до тех пор, пока ему не потребуется определить результат другого сравнения, и в котором количество неразрешенных сравнений уменьшается вдвое путем нахождения медианного значения сравнения и вызова алгоритма принятия решения с этим значением. Как они показывают, полученный алгоритм рандомизированного параметрического поиска делает только логарифмическое количество вызовов алгоритма принятия решения с высокой вероятностью, что соответствует теоретическому анализу Коула. Расширенная версия их статьи включает экспериментальные результаты реализации алгоритма, которые показывают, что общее время выполнения этого метода на нескольких задачах естественной геометрической оптимизации аналогично времени выполнения наилучшей реализации синхронизированного параметрического поиска (метод быстрой сортировки Ван Оострума и Велткампа): немного быстрее на некоторых задачах и немного медленнее на некоторых других. Однако количество вызовов, которые он делает для алгоритма принятия решения, значительно меньше, поэтому этот метод получит больше преимуществ в приложениях параметрического поиска, где алгоритм принятия решения медленнее.
В примере задачи нахождения медианного времени пересечения точки и алгоритм Коула, и алгоритм Гудрича и Пшоны получают время выполнения . В случае Гудрича и Пшоны алгоритм рандомизирован и получает эту временную границу с высокой вероятностью.
Метод бисекции (бинарный поиск) также может использоваться для преобразования решения в оптимизацию. В этом методе поддерживается интервал чисел , известный как содержащий оптимальное значение решения, и многократно сокращается интервал путем вызова алгоритма принятия решения на его медианном значении и сохранения только половины интервала выше или ниже медианы в зависимости от результата вызова. Хотя этот метод может найти только численное приближение к оптимальному значению решения, он делает это за количество вызовов алгоритма принятия решения, пропорциональное количеству бит точности для этого приближения, что приводит к слабополиномиальным алгоритмам.
Вместо этого, когда это применимо, параметрический поиск находит сильно полиномиальные алгоритмы, время работы которых является функцией только размера входных данных и не зависит от числовой точности. Однако параметрический поиск приводит к увеличению временной сложности (по сравнению с алгоритмом принятия решений), которая может быть больше логарифмической. Поскольку они являются сильно, а не слабо полиномиальными, алгоритмы, основанные на параметрическом поиске, более удовлетворительны с теоретической точки зрения. На практике бинарный поиск быстр и часто гораздо проще в реализации, поэтому необходимы усилия по разработке алгоритмов , чтобы сделать параметрический поиск практичным. Тем не менее, ван Острум и Велткамп (2002) пишут, что «хотя простой подход бинарного поиска часто пропагандируется как практическая замена параметрическому поиску, он уступает нашему алгоритму [параметрического поиска]» в экспериментальных сравнениях, которые они провели.
Если речь идет только об ожидаемой производительности, вместо параметрического поиска можно использовать метод рандомизированной оптимизации (Chan 1998). Этот метод приводит только к постоянному увеличению временной сложности, при этом все еще давая сильно полиномиальный алгоритм.
Параметрический поиск применялся при разработке эффективных алгоритмов для задач оптимизации, в частности, в вычислительной геометрии (Agarwal, Sharir & Toledo 1994). Они включают в себя следующее: