|
|
С понятием сложности алгоритма связываются затраты времени или памяти, соответствующие худшему случаю, либо затраты в среднем. Это понятие дает математическое уточнение довольно расплывчатого термина “трудоемкость”, с помощью которого иногда пытаются характеризовать алгоритмы. |
|
При рассмотрении со сложностной точки зрения некоторого
алгоритма |
|
|
|
Входы алгоритма могут варьироваться при фиксированном
значении размера входа, при этом затраты, вообще
говоря, меняются. Временно́й и пространственной сложностями
алгоритма
как аргумента функций и
является множество значений размера .
|
|
|
|
|
Сложность в худшем случае определяет точную верхнюю границу возможных затрат алгоритма для входов данного размера. Нельзя исключить того, что в некоторых случаях эта граница окажется достаточно высокой, а соответствующие худшему случаю входы будут встречаться редко среди всех таких входов. |
|
|
Вопрос:
Пусть алгоритм
состоит в последовательном (друг за
другом) выполнении алгоритмов
и , имеющих сложности
. Можно ли утверждать, что
?
|
|
Вопрос:
Пусть
и
— некоторые алгоритмы. Следует ли из выполнения для всех
неравенства , что
для всех возможных входов ?
|
|
Вопрос:
Верно ли, что пространственная сложность сортировки выбором
(в качестве размера входа берется длина
массива) ограничена сверху некоторой не зависящей
от величиной?
|
|
Вопрос:
Пусть некоторому алгоритму
сопоставлены две, скажем, временные сложности
и . Например,
и
могут быть сложностями по разным операциям. Определим сложность
, рассматривая совместно операции обоих видов.
Можно ли утверждать, что ?
|
|
Обсуждая сложность в среднем, мы ограничимся ситуацией,
когда при каждом фиксированном значении
|
|
|
|
Для любого алгоритма |
|
|
|
|
Если алгоритм применяется многократно к входам данного размера, то можно ожидать, что среднее арифметическое затрат будет близко к сложности в среднем нашего алгоритма. Но при этом предполагается, что входам данного размера адекватно сопоставлены некоторые вероятности, а для такого предположения должны быть достаточные основания (типичное допущение, что все входы каждого размера равновероятны, в конкретной ситуации может оказаться безосновательным). |
|
|
|
|
|
Вопрос:
Верно ли, что для рассмотрения сложности в среднем
некоторого алгоритма требуется задание распределения вероятностей:
|
|
Вопрос:
Пусть некоторому алгоритму
сопоставлены две временные сложности в среднем
и . Например,
и
могут быть сложностями по разным операциям. Определим
сложность ,
рассматривая совместно операции обоих видов.
Можно ли утверждать, что ?
|
|
Вопрос:
Рассмотрим множество всех перестановок чисел
,
приписав каждой из них вероятность . Для перестановки
определим число ее неподвижных точек как число индексов
таких, что
. (При сортировке неподвижные точки
не нуждаются в перемещениях на другие места, и это может
использоваться в некоторых видах сортировки.) Верно ли, что при
фиксированном
математическое ожидание числа неподвижных точек перестановки равно:
|
|
Итак, сложность алгоритма как в худшем случае, так и в среднем есть функция числового аргумента — размера входа. Для исследования роста сложности конкретного алгоритма при возрастании размера входа часто используются асимптотические оценки вида
есть величина порядка
”, или
“ и
имеют одинаковый порядок”.
|
|
|
|
Сравнение сложностей различных алгоритмов на основе их асимптотических
оценок возможно не для всех типов таких оценок.
Если, например, для сложностей |
|
|
|
|
|
|
|
Вопрос:
Пусть полином
имеет ненулевой старший коэффициент .
Какое из следующих утверждений верно:
|
|
Вопрос:
Какие из следующих утверждений неверны для сложности
алгоритма пробных делений (см. п. 1), предназначенного
для проверки простоты целого (имеется в виду сложность по числу делений):
|
|
Вопрос:
Будем считать затратностью любого построения на плоскости с
помощью циркуля и линейки количество линий (окружностей или
прямых), проводимых в ходе построения. Рассмотрим задачу
построения отрезка, длина которого равна
от длины исходного отрезка, считая
размером входа. Можно ли предложить для этой задачи такой алгоритм решения,
сложность которого допускает оценку ?
|
|
Можно рассматривать сложности разных видов в соответствии с учитываемыми затратами. Пусть функция временных затрат отражает число операций какого-то типа в предположении, что эти операции требуют одинакового времени выполнения, не зависящего от размера операндов, и что это время равно 1. Тогда получается алгебраическая сложность по числу операций рассматриваемого типа. |
|
|
|
Битовая временная сложность получается при рассмотрении числа битовых операций в качестве функции затрат. Аналогично могут быть определены пространственные алгебраическая и соответственно битовая сложности по числу величин рассматриваемого типа. |
|
|
|
|
Вопрос:
Хорошо известно, что мультипликативная сложность метода Гаусса решения системы
линейных уравнений с
неизвестными допускает оценки
|
|
Вопрос:
Допустим, что для умножения двух целых положительных чисел
мы используем сложения:
Максимальную из битовых длин чисел
и
(обозначим ее через ) будем считать размером входа.
Какая из следующих оценок верна для сложности этого “сверхнаивного” умножения:
|
|
Вопрос:
К числу, первоначально равному нулю, прибавляется шаг за
шагом по единице до получения значения
,
. Все
сложения производятся “столбиком” в двоичной системе. Верно ли,
что при этих сложениях потребуется
переносов единицы в старший разряд?
|
|
Понятие сложности рассматривается и в связи с рандомизированными алгоритмами, т.е. алгоритмами, содержащими обращения к генератору случайных чисел с известным распределением. |
|
|
|
Затраты рандомизированного алгоритма, вообще говоря, не определяются однозначно входом алгоритма, они зависят и от полученных случайных чисел. Но усредненные затраты для каждого конкретного входа дают числовую функцию на множестве входов, что позволяет рассматривать сложность алгоритма, следуя общему определению сложности. |
|
|
|
|
Мы уже говорили о том, что сложность в среднем “обычного” (детерминированного) алгоритма представляет интерес только в том случае, если правильны предположения о вероятности появления того или иного входа. Рассматриваемая нами сложность рандомизированных алгоритмов — это сложность в худшем случае, но она определяется на основе усредненных затрат. Эта усредненность заслуживает полного доверия, так как рандомизированные алгоритмы используют генераторы случайных чисел, в которых распределение вероятностей фиксировано и не зависит от входов. |
|
|
|
|
|
Вопрос:
Верно ли, что определение усредненных затрат некоторого
рандомизированного алгоритма требует задания распределения
вероятностей:
|
|
Вопрос:
Массив
назовем массивом, содержащим большинство, если больше половины его элементов имеют равные
значения. Пусть над элементами массивов разрешена операция
проверки равенства двух элементов, будем называть эту операцию
сравнением. Пусть для данного массива, содержащего большинство,
требуется найти какое-то одно ,
, такое, что значение
принадлежит большинству значений элементов .
Один из возможных рандомизированных алгоритмов решения этой
задачи состоит в том, что
выбирается случайно (распределение вероятностей равномерно),
а затем проверяется, удовлетворяет ли
поставленному условию, — число сравнений на эту проверку
равно . Если
не подходит, то все повторяется. Верно ли,
что сложность этого рандомизированного алгоритма по числу
сравнений при рассмотрении
в качестве размера входа меньше, чем ?
|
|
Вопрос:
Предположим, что у нас нет другого генератора случайных
чисел, кроме генератора, в результате обращения к которому
появляется 0 с вероятностью
или 1 с вероятностью ,
причем о мы ничего не знаем,
кроме того, что
и . С
помощью этого генератора можно сконструировать генератор, в
результате обращения к которому появляется 0 или 1 с одинаковой
вероятностью :
порождая подряд две цифры с помощью имеющегося генератора,
мы получаем комбинации 0, 1 и 1, 0 с одинаковой ненулевой вероятностью
(комбинации 0, 0 и 1, 1 игнорируем). Рассмотрим математическое ожидание
числа обращений к изначально
имеющемуся генератору случайных чисел при построении последовательности
пар до появления
или . Какое из следующих утверждений
верно:
|
|
|
В теории сложности исходят из некоторой гипотетической модели вычислительного устройства (“модели вычислений”). |
|
Иногда в качестве такой модели выбирается машина с равнодоступными ячейками памяти (“равнодоступная адресная машина” — РАМ). В других случаях — машина Тьюринга. |
|
|
|
|
Первая из этих моделей ближе к реальным устройствам, вторая является более формализованной, что часто оказывается полезным при исследовании существования алгоритма с теми или иными сложностными свойствами. |
|
|
Мы будем ориентироваться на модель РАМ. Предположение, что на объем ячейки нет ограничений, приводит к алгебраической сложности, а предположение, что в ячейке хранится один бит, — к временной или пространственной битовой сложности. |
|
Для рассматриваемого нами понятия сложности иногда используется термин вычислительная сложность (возможными частными случаями которой служат алгебраическая и битовая сложности). Это делается для того, чтобы избежать путаницы с описательной сложностью, которая тем или иным способом определяется исходя из самой записи, т.е. текста, алгоритма. |
|
|
|
|
Мы обсуждаем только вычислительную сложность, и будем продолжать называть ее просто сложностью. |
|
Рассматривая класс алгоритмов решения некоторой задачи, мы получаем семейство функций, являющихся сложностями (например, временными) алгоритмов этого класса. Могут обсуждаться вопросы о нижней границе этого семейства, о существовании в нем минимальной функции. |
|
|
|
Если минимальная функция в этом семействе существует, то соответствующий ей алгоритм — оптимальный в рассматриваемом классе алгоритмов. |
|
|
|
|
Вопрос:
Является ли
асимптотической нижней границей сложности алгоритмов деления отрезка на
равных частей с
помощью циркуля и линейки при рассмотрении числа
в качестве размера входа (считаем затратностью любого построения на
плоскости с помощью циркуля и линейки количество линий —
окружностей или прямых, проводимых в ходе построения)?
|
|
Вопрос:
Обратимся к задаче вычисления
в некотором множестве с ассоциативным умножением (т.е. в полугруппе), где
— заданное натуральное число, рассматриваемое как размер входа. Является ли
асимптотической нижней границей сложности алгоритмов вычисления
с помощью умножений?
|
|
Вопрос:
Путник столкнулся со стеной, простирающейся бесконечно в
обе стороны. Имеется дверь в этой стене, но путник не знает ни
расстояния до двери, ни направления к ней. Пусть
— число
шагов (неизвестное путнику), изначально отделяющее путника от
двери. Будем рассматривать это число как размер входа. Очевидно,
что
является нижней и асимптотической нижней границей
алгоритмов достижения двери (путнику во всех случаях придется
сделать
шагов). Можно ли предложить алгоритм, позволяющий
добраться до двери, сложность которого допускает оценку
?
|
|
Вопрос:
Верно ли, что функция
является нижней границей сложности алгоритмов одновременного выбора наибольшего и
наименьшего элементов массива длины
c помощью сравнений?
|
|
Вопрос:
Пусть
- некоторый алгоритм сортировки массивов с помощью сравнений, и
обозначает число элементов входного массива. Пусть
, -
сложности алгоритма как число
сравнений в худшем случае и в среднем. Какое из равенств невозможно ни при каком
:
|
|
Оптимальные в заданном классе алгоритмы известны не всегда. Возможно также, что в классе просто нет оптимального алгоритма, т.е. алгоритма, сложность которого является нижней границей для сложностей алгоритмов данного класса. |
|
|
|
Нередко бывает очень трудно ответить на вопрос о существовании в конкретном классе алгоритма такого, сложность которого растет с увеличением размера входа не слишком быстро. |
|
|
|
Относительно некоторых классов алгоритмов трудным является вопрос о том, имеется ли в этом классе алгоритм, сложность которого ограничена сверху некоторым полиномом, вид которого не оговаривается (такой алгоритм принято называть полиномиальным). |
|
|
|
В частности, остается много неясного относительно полиномиальных алгоритмов для задач распознавания, где ответ — это одно из слов “да”, “нет” или же одно из чисел 1, 0 и т.д. Здесь упомянем получившую известность проблему P≟NP. |
|
|
|
|
Вопрос:
Будем считать затратностью любого построения на плоскости с
помощью циркуля и линейки количество линий (окружностей или
прямых), проводимых в ходе построения. Рассмотрим задачу
построения отрезка, длина которого равна
от длины исходного
отрезка, считая
размером входа. Можно ли предложить для этой
задачи такой алгоритм решения, сложность которого растет
медленнее, чем ?
|
|
Вопрос:
Вопрос о существовании полиномиального алгоритма
разложения целого числа
битовой длины на простые
множители остается без ответа до сих пор при том, что алгоритмы
разложения имеют огромную важность для криптографии. В этой
связи обратимся к следующей задаче: для заданных ,
, выяснить, имеется ли у числа
делитель такой, что
. Полиномиальный (по битовой длине
числа )
алгоритм решения этой задачи тоже неизвестен. Верно ли, что
открытие такого алгоритма, назовем его
, автоматически дало бы
полиномиальный алгоритм факторизации?
|
|
Вопрос:
Можно ли вычислить произведение двух данных комплексных
чисел
с помощью нескольких сложений и вычитаний и лишь трех умножений вещественных
чисел? (Допустим, уже вычислены значения ,
; как, затратив еще одно
умножение, найти дополнительно величину и затем
закончить вычисления нужных величин с помощью только сложений и вычитаний?)
|
|
Вопрос:
Верно ли, что для доказательства того, что P
NP
достаточно показать, что хотя бы одна задача из NP принадлежит P?
|
|
|
При исследовании существования алгоритма решения задачи, имеющего “не очень высокую” сложность, важную роль играет сводимость какой-то одной задачи к другой. Из возможности быстро решить некоторую задачу может следовать такая же возможность для ряда других, и наоборот, невозможность быстрого решения какой-то одной задачи может автоматически повлечь такую же невозможность для ряда других задач. |
|
Рассмотрение линейной сводимости позволяет придать точный смысл словам, что одна вычислительная задача не сложнее другой. |
|
|
|
Полиномиальная сводимость позволяет заключить, что если одна вычислительная задача решается полиномиальным алгоритмом, то и какая-то другая решается полиномиальным алгоритмом. |
|
|
|
|
Вопрос:
Сводится ли линейно (см. выше в этом пункте) задача умножения
произвольных квадратных матриц к задаче умножения верхних
треугольных матриц в предположении, что для умножения верхних
треугольных матриц рассматриваются только такие алгоритмы, для
которых
(как для всех разумных алгоритмов решения этой задачи)?
|
|
Вопрос:
Существуют ли в NP задачи, не являющиеся NP-полными?
|
|
Вопрос:
Если бы оказалось, что полиномиального алгоритма
распознавания простоты натурального числа не существует
(забудем на короткое время об алгоритме Агравала, Кайала
и Саксены, см. п. 9),
то следовало ли бы из этого, что P
NP?
|
|
Наряду с разнообразными вопросами о пределах возможного для алгоритмов того или иного класса, всегда актуальными остаются вопросы, связанные с оценками сложности конкретных алгоритмов. Часто тривиальные верхние и нижние оценки выводятся легко, но получение оценок, в полной мере отражающих возможности алгоритма, требует немалых усилий и изобретательности. |
|
|
|
|
Вопрос:
Бинарный алгоритм поиска места элемента в упорядоченном
массиве длины
имеет сложность , откуда
выводится, что сложность
сортировки бинарными вставками равна сумме
. Последнее
слагаемое в этой сумме наибольшее, отсюда легко получаем
.
Верно ли, что ?
|
|
Вопрос:
Сложность
по числу сравнений сортировки бинарными вставками равна
.
Для некоторых значений
возможна сортировка
элементов с меньшим числом сравнений.
Каково наименьшее значение
такого рода:
|
|
Вопрос:
Верно ли, что
для сложности
по числу сравнений сортировки массива из
элементов бинарными вставками? (Напомним, что эта сложность равна
.)
|
|
Вопрос:
Пусть
— среднее число присваиваний
при выполнении алгоритма поиска наименьшего элемента массива
for
if od в предположении, что все возможные взаимные порядки элементов в исходном массиве длины
равновероятны. Какое из утверждений верно:
|
предполагается, что на его возможных входах
определена неотрицательная целочисленная функция
,
называемая размером входа,
и целочисленные неотрицательные функции
,
временны́х и пространственных затрат
(пространственные затраты называют также затратами памяти).
в худшем случае
называются функции числового аргумента
как аргумента функций
и
является множество значений размера
.
размера входа
сами соответствующие входы образуют конечное множество
.
Будем предполагать, что каждому
приписана некоторая вероятность
:
и
. Таким образом, временные
и пространственные затраты
и
алгоритма
для входов
размера
являются случайными величинами на
.
Временной и пространственной сложностью в среднем
называется математическое ожидание соответствующей случайной величины:
при любом распределении вероятностей на множестве
, сложность в среднем
не превосходит сложности в худшем случае:
,
.
есть величина порядка
”, или
“
и
имеют одинаковый порядок”.
алгоритмов
и
доказано, что
,
, то из этого еще
нельзя сделать вывод, что
для всех достаточно больших
.