Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
2.6. РАЗДЕЛЯЙ И ВЛАСТВУЙДля решения той или иной задачи ее часто разбивают на части, находят их решения и затем из них получают решение всей задачи. Этот прием, особенно если его применять рекурсивно, часто приводит к эффективному решению задачи, подзадачи которой представляют собой ее меньшие версии. Проиллюстрируем эту технику на двух примерах, сопровождаемых анализом получающихся рекуррентных уравнений. Рассмотрим задачу о нахождении наибольшего и наименьшего элементов множества элементов:
Аналогично можно найти наименьший из остальных Применяя прием "разделяй и властвуй", мы разбили бы множество Алгоритм 2.3. Нахождение наибольшего и наименьшего элементов множества Вход. Множество Выход. Наибольший и наименьший элементы множества Метод. К множеству Заметим, что сравнения элементов множества
Рис. 2.12. Процедура для нахождения строке 7. Таким образом,
Решением рекуррентных уравнений (2.2) служит функция
т. е. она удовлетворяет (2.2) при Можно показать, что для одновременного нахождения наибольшего и наименьшего элементов В предыдущем примере прием "разделяй и властвуй" позволил уменьшить количество сравнений лишь в фиксированное число раз. В следующем примере мы с помощью этого приема уменьшим даже порядок роста сложности алгоритма. Рассмотрим умножение двух
Рис. 2.13. Разбиение цепочек, представленных в виде двоичных чисел. изложенном ниже, достаточно уже порядка Пусть х и у — два
Равенство (2.3) дает способ вычисления произведения х и у с помощью четырех умножений
На время забудем, что из-за переноса
где
На самом деле можно показать, что в (2.5)
Доказательство проведем индукцией по
так что она удовлетворяет (2.5) и при Для завершения описания алгоритма умножения мы должны учесть, что числа
Слагаемое Ьгйг вычисляется с помощью рекурсивного применения нашего алгоритма умножения к задаче размера Пример 2.6. Этот асимптотически быстрый алгоритм умножения целых чисел можно применять не только к двоичным, но и к десятичным числам. Проиллюстрируем это на примере:
Заметим, что алгоритм, основанный на (2.4), заменял одно умножение тремя сложениями и вычитанием (ср. с (2.3)). Почему такая замена приводит к асимптотической эффективности, можно интуитивно объяснить тем, что умножение выполнить труднее, чем сложение, и для достаточно больших Временная сложность процедуры определяется числом и размером подзадач и в меньшей степени работой, необходимой для разбиения данной задачи на подзадачи. Так как рекуррентные уравнения вида (2.2) и (2.5) часто возникают при анализе рекурсивных алгоритмов типа "разделяй и властвуй", рассмотрим решение таких уравнений в общем виде. Теорема 2.1. Пусть
где
Доказательство. Если
Если Если
что составляет Из теоремы 2.1 вытекает, что разбиение задачи размера С другой стороны, разбиение задачи на 4 подзадачи размера Если
|
1 |
Оглавление
|