Время сложности линейное время выражается в O(n)
. Это означает, что время работы увеличивается линейно по отношению к размеру ввода. Пример этого суммирования всех элементов массива, пропорционального длине массива.
Специально для вашего примера, посмотрите на эту петлю в Sort()
:
int zeros = 0;
for (int i = 0; i < n; i++)
if (A[i] == 0)
zeros++;
Этот цикл проходит линейно через A[]
и суммирует количество нулей. Линейное время также применяется в этих циклах:
int k = 0;
while (zeros--)
A[k++] = 0;
// fill all remaining elements by 1
while (k < n)
A[k++] = 1;
Как вы просто обход A[]
один раз.
Эти операции объединены в O(2n)
, так как массив проходит дважды. Поэтому функция Sort()
является операцией O(2 * n)
, что эквивалентно O(n)
.
Вот еще один пример. Если вам приходилось сортировать 100 двоичных чисел по сравнению с 10 двоичными числами, для чего потребуется больше времени? В этом случае сортировка 100 двоичных чисел будет в 10 раз длиннее, чем сортировка 10 двоичных чисел. Это связано с тем, что линейное время увеличивается линейно относительно размера ввода n
.
O (2n) => О (п), это линейно. – Stargateur
Пожалуйста, объясните, что мое понимание линейной вещи может быть неясным. @Stargateur –