Мы можем начать с рассмотрения простого случая, случая 2. Ясно, каждый раз, когда мы пройти через петлю в случае 2, один из либо 2 вещей происходит:
- счетчика увеличивается (который занимает O (1) [за исключением not really, но мы просто сказать, что это делает для компьютеров, работающих на номера фиксированной длины (т. е. 32-битные ints)])
- count установлен в 0 (что принимает O (1) [снова, дискуссивно]) и вычисляется f (count) (что определенно занимает постоянное время)
мы проходим через петлю n раз, каждый раз занимает практически время O (1), bada-bing, bada-boom, требуется O (n) (или O (n * lg (n)), если вы педантичны и используете целые числа переменной длины).
Дело 1, с другой стороны, требует немного математического мышления.
Битовые строки, которые занимают кратчайший промежуток времени в случае 1, являются, очевидно, 11111....11111
, 000....000
, 000...0111...111
или аналогичными. Все они занимают время θ (n) для завершения, устанавливая нижнюю границу для случая 1. Теперь нам нужно установить наихудший сценарий.
Не вдаваясь в строгости надлежащего доказательства, это довольно просто утверждать, что битовые строки наихудшие выглядеть следующим образом:
111....1110
Немного нитка выше формы с длиной 100 будет иметь 99 1, и для этого потребуется 99 + 99
единиц времени. Строка длины n явно требует 2(n - 1)
единиц времени.
Это, очевидно, все еще линейно по n, поэтому случай 1, даже в худшем случае, равен θ (n).
Потому что оба случая 1 и случай 2 являются θ (n), проблема θ (n).
Если вам все еще нужно, чтобы убедиться в том, что 11.....110
наихудшей битовой строке, подумайте:
A bit string of the form
|--------------n bits------------|
1....101....101....10......1....10
|-L1-| |-L2-| |-L3-| |-Lm-|
11110
Where L1 - Lm are arbitrary integers will require time
t = (L1) + (L2) + (L3) + ... + (Lm) + (n - m)
= sum(L1 to Lm) - m + n
the more "runs" of ones there are, the larger the - m factor is. If we
just have one big "run" of ones, we have
t = n - 1 + n - 1 = 2(n - 1)
Как matter of principle, я не отвечаю плохо задаваемые вопросы домашнего задания на переполнение стека.
После разговора с coder101 в чате, однако, он/она показала мне, что это НЕ проблемы домашних заданий, но вместо того, чтобы проблема, которая была извлечена из онлайновой базы данных here, которая призвана обеспечить «фиктивные тесты для вундеркиндов ". Это похоже на вызов, который кодер101 наделил собой, и хотя это может быть лучший вопрос, я не думаю, что это так плохо.
Ummm .... нормально? У вас возникли вопросы? –
Вопрос в том, как я знаю, что когда используется оператор statement или else и когда функция f (m) называется – coder101
Вам было предоставлено это задание, чтобы помочь вам чему-то научиться. Получение ответа здесь на этот вопрос не поможет. –