Из Википедия :
Описание функции в терминах большой буквы O обычно дает только верхнюю границу скорости роста функции.
Из этого описания, поскольку для выполнения пустого алгоритма требуется 0 раз, он имеет верхнюю границу производительности O (0). Это означает, что это также O (1), который оказывается большей верхней границей.
Редактировать
Более формально из CLR (1ed, стр. 26):
Для данной функции g ( n ) мы обозначаем O ( g ( n *) 1027 *)) набор функций
O ( g ( n )) = { f ( n ): существуют положительные константы c и n 0 такие, что 0 & le; f (n) & le; cg ( n ) для всех n & ge; n 0 }
Асимптотическое время выполнения пустого алгоритма, выполняемого за 0 раз независимо от входных данных, поэтому является членом O (0).
Редактировать 2 :
Мы все согласны с тем, что 0 - это O (1). Вопрос в том, 0 0 (0) также?
На основании определений я говорю да.
Кроме того, я думаю, что этот вопрос немного важнее, чем указывают многие ответы. Сам по себе пустой алгоритм, вероятно, не имеет смысла. Однако всякий раз, когда указывается нетривиальный алгоритм, пустой алгоритм можно рассматривать как лежащий между последовательными этапами заданного алгоритма, а также до и после шагов алгоритма. Приятно осознавать, что «ничто» не влияет на асимптотическое время алгоритма.
Редактировать 3 :
Адам Крум предъявляет претензию :
Для любой функции f ( x ), f ( x ) в O ( f ) ( х * * тысяча девяносто четыре)).
Доказательство: пусть S будет подмножеством R и T будет подмножеством R * (неотрицательные действительные числа) и пусть f ( x ): S -> T и c & ge; 1. Тогда 0 & le; f ( x ) & le; f ( x ), что приводит к 0 & le; f ( x ) & le; ср ( x ) для всех x∈ S . Поэтому f ( x ) ∈ O ( f ( x )).
В частности, если f ( x ) = 0, то f ( x ) ∈ O (0).