Разница между сложностью времени и вычислительной сложностью

14

Для измерения сложности алгоритма это сложность времени или вычислительная сложность? В чем разница между ними?

Я использовал для расчета максимального (наихудшего) количества основных (наиболее затратных) операций в алгоритме.

Медиана Хилал
источник
2
Не ответ на ваш вопрос, но, учитывая ваш интерес к такого рода вещам
DW
1
«сложность алгоритма» при обращении к асимптотическому runime является (часто используемым) неправильным выражением. Вы хотите сказать «асимптотическое время выполнения».
Рафаэль

Ответы:

9

Вычислительная сложность - это просто более общий термин, поскольку время - не единственный ресурс, который мы могли бы рассмотреть. Следующим наиболее очевидным является пространство, которое использует алгоритм, и, следовательно, мы можем говорить о сложности пространства , также как о части вычислительной сложности. Действительно, мы можем сделать это для любой меры, которую вы используете, конечно, некоторые меры более полезны, чем другие.

Таким образом, подсчет количества шагов, которые алгоритм выполняет в наихудшем случае, дает оценку сложности времени для решаемой проблемы, подсчет того, сколько памяти / сколько ленточных элементов он использует, дает оценку сложности пространства и т. Д. И т. Д.

Помните также, что если вы хотите быть строгим, сложность относится к проблеме, а не к алгоритму, поэтому у проблемы есть границы сложности, у алгоритма есть границы ресурсов (время выполнения, использование пространства ...). Это просто вопрос формальности определения, теория сложности решает проблемы. Да, алгоритмы являются ключевым инструментом для анализа проблем и сложности, а алгоритмы тесно связаны друг с другом, но формально мы бы не сказали, что Merge-Sort (алгоритм) находится в , это проблема S o r t i n g, которая находится в P . Merge-Sort использует определенные ресурсы ( O ( n log n )PSortingпО(NжурналN)шаги например). Оценка ресурса и правильность алгоритма подразумевают сложность (верхнюю) оценку проблемы, но это разные вещи. также Т С 0 -полным под С 0 -reductions, эта сложность связана только действительно может быть указано для задачи (но имеет алгоритмические последствия).SорTяNграммTС0AС0

Люк Мэтисон
источник
@shekharsuman Под проблемой я подразумеваю формальное понятие вычислительной задачи (например, k-Vertex Cover), а не общее значение. Вычислительная сложность - это классификация вычислительных задач, поэтому в формальном смысле сложность относится к тому, что мы можем сказать о проблеме. Результаты об алгоритмах говорят нам о сложности проблем, но сами по себе не являются результатами сложности (но неофициально мы говорим о сложности алгоритма).
Люк Мэтисон
1
@shekharsuman первый абзац страницы в Википедии - довольно хорошее резюме.
Люк Мэтисон
@ Luke Спасибо, это проясняет ситуацию. Однако, если я могу использовать идиому «наиболее часто используемый тип сложности для формальной оценки алгоритмов» (хотя я знаю, что это не точно). Что бы это было время против вычислительной? Что я думаю, так это то, что в целом самое важное - это время, поскольку ресурсы в некотором смысле более расширяемы!
Медиана Хилал
1
@MedianHilal время - действительно наиболее часто рассматриваемая мера сложности проблемы. Пространство не слишком сильно отстает (по крайней мере, теоретики сложности и люди, имеющие дело с очень большими наборами данных, реже - изо дня в день).
Люк Мэтисон
-2

Цикломатическая сложность часто используется в качестве меры вычислительной сложности. Полезный пример приведен в /programming/9097987/calculation-of-cyclomatic-complexity.

В алгоритме может быть много разных (возможно, вложенных) путей, что придает ему высокую цикломатическую сложность, но не может быть циклов, дающих ему низкую временную сложность. Программа с одним циклом будет иметь низкую цикломатическую сложность, но, возможно, высокую временную сложность.

Цикломатическая сложность часто используется как мера обслуживания, необходимого для кода. Более подробное обсуждение приведено в http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Это отличается от сложности времени, которая является измерением времени выполнения кода и может использоваться для оценки восприятия пользователями эффективности системы.

velvetytoast
источник
Вопрос в вычислительной сложности, а не в цикломатической сложности!
Am_I_Helpful
Возможно, вы захотите прочитать ОП - он спрашивает о сложности алгоритма. - Цикломатическая сложность дает статическую меру вычислительной сложности алгоритмов - попробуйте добавить положительный отзыв в следующий раз
velvetytoast
2
Цикломатическая сложность не измеряет вычислительную сложность. Сложность вычислений относится ко времени выполнения, а не к тому, насколько сложна структура исходного кода.
DW
@DW Точнее, сложность вычислений относится к ресурсам, необходимым для решения проблемы (которые могут включать пространство, чередование, вызовы оракула и т. Д., А также время).
Дэвид Ричерби
@DavidRicherby Я не эксперт в этом, поэтому, пожалуйста, исправьте, если не так. Меры статической сложности, такие как размер программы, играют определенную роль в некоторых ситуациях. Я прав, что это больше связано с колмогоровской сложностью. Это также относится к цикломатической сложности? Один вид сложности для написания программ или проблем, а другой для их решения или запуска ... возможно, краткое приближение ситуации. Я не уверен, что написал бы разумный вопрос по этому вопросу.
Бабу