while 루프가 n/2
번 반복되었다고 올바르게 설정했습니다. 내부에 포함 된 외부 for
루프는 j = 1, 2, ... i
에 대해 실행되며 i
은 반복에서 len(lst)
, len(lst) - 2
, ..., 1
으로 설정됩니다. 따라서 j = 1, 2, ..., len(lst)
, j = 1, 2, ..., len(lst) - 2
, ..., j = 1
에 대해 바깥 쪽 for
루프가 실행됩니다. 합계로, 그것은 O(n^2)
루프의 바깥 쪽 for
반복입니다. 내부 for
루프는 일정한 횟수만큼 실행되지 않지만 최대 10**5
번 반복되며, 은입니다. 따라서 O(n^2)
은이 함수의 런타임에 대한 올바른 상한값입니다.
다음은 약간 다른 설명입니다. 나는 다음과 같은 코드가 계산 시간의 측면에서 코드에 해당 동의 희망 :
def f3_simple(n):
i = n
condition = i>0
while condition:
r1 = range(i)
for j in r1:
r2 = range(j, 10**5)
for k in r2:
print(i)
i -= 2
condition = i>0
여기 주석과 같은 코드입니다 :
def f3_simple(n):
i = n # "length": O(1)
condition = i>0 # comparison: O(1)
while condition: # executed O(n) times per function call
r1 = range(i) # range(i): O(i)
for j in r1: # executed O(n) times per WHILE iteration
r2 = range(j, 10**5) # range(j, 10**5): O(10**5 - j) = O(1)
for k in r2: # executed O(1) times per OUTER FOR iteration
print(i) # print: O(1)
i -= 2 # decrement: O(1)
condition = i>0 # comparison: O(1)
따라서, 총 런타임은 참으로 O(n^2)
입니다.
두 번째 for 루프는 상수가 아니며 'j -> 10 ** 5'에서 실행되며 'j'는 각 반복이 커집니다. – SethMMorton
나는 그것이 여전히 입력의 크기에 의존하지 않는 시간의 한정된 횟수를 실행한다고 생각하기 때문에 여전히 내 의견으로는 일정하다 ... (?) –
그러나 'i'는 입력리스트의 길이에 의해 결정되며, ''나는''큰''이 얼마나되는지를 지시 할 것이다. – SethMMorton