Я не уверен, если я понимаю вычисления временной сложности. Мне даны эти петли, и это мои расчеты. Тем не менее, я не уверен, что сказать о больших O здесь.Сложность времени с циклами
Цикл 1:
lst = []
i=1
while i<n:
lst = list(range(i))
i *= 2
Я полагаю, что каждая операция занимает O (1) времени. В этом цикле 1-я строка и вторая строка выполняются 1 раз каждый. Первая строка цикла while содержит 3 операции - диапазон, список и присвоение этого значения lst. Поскольку мы имеем дело с диапазоном, я предполагаю, что он работает n + 1 раз.
Последняя строка цикла имеет 2 операции: умножение на 2 и присвоение этого значения i, и выполняется n раз.
Из этого, я думаю, что общее количество будет: 1 + 1 + 3 (n + 1) + 2n = 5n + 5.
Поскольку это линейная функция, то большой O будет O (n)?
===============
Цикл 2:
lst = []
i=1
while i<n:
lst = lst + [i]
i *= 2
Здесь мы имеем подобный случай, однако первая строка из цикла в то время как имеется 2 операции. Затем
1 + 1 + 2n + 2n = 4n + 2.
Поскольку это линейная функция, это также O (n)?
========================== Loop 3:
lst = []
i=1
while i<n:
lst += [i]
i *= 2
Я думаю, что LST + = [я] будет выполняться 2 операции в 2 раза, так как это расчет на месте? Я не уверен в этом. Если это правильно, то общая сумма будет 6n + 2
Вопросы: я исчисляю эти права или я совершенно не прав? Как написать большие O для каждого из этих циклов?
Второй был опубликован ранее сегодня [здесь] (http://stackoverflow.com/q/20164008/645270). Вероятно, это поможет вам понять их все. – keyser
Возможно, это было бы более уместно на [Computer Science Stack Exchange] (http://cs.stackexchange.com/). – KobeJohn
Вам нужно подумать о том, сколько раз выполняется цикл while. – rlms