예 이론
시간 복잡도는 3 개 중첩 루프가 있더라도 O(n)
이어야한다.
,의 구별하자 n_i
사이, n_j
가 n
동일 모두 있는데도. 복잡성은 다음과 같습니다
O(1 * n_j * 10000 + n_i * 1) = O(10000 * n_j + n_i) = O(n_j + n_i) = O(n + n) = O(n)
출력은 10000 * n
번 인쇄해야합니다.
def function(n):
count = 0
for i in range(n):
if i == 0:
for j in range(n):
for k in range(10000):
count += 1
당신이 n
의 값이 증가함에 따라 IPython에 %timeit
를 호출 할 수 있습니다 :
%timeit function(10)
5.01 ms ± 36 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit function(100)
50.4 ms ± 334 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit function(1000)
497 ms ± 1.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit function(10000)
5.03 s ± 27.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
타임즈 %의 timeit와
점검
당신은 카운터 증가하여 print
전화를 교체하는 경우 O(n)
와 완벽하게 일치하는 것 같습니다! if
없는 복잡성 O(n**2)
것
변화
:
def function(n):
for i in range(n):
for j in range(n):
for k in range(10000):
print("output")
k
이
range(n)
에있는 경우
복잡성은 O(n**3)
다음과 같습니다
def function(n):
for i in range(n):
for j in range(n):
for k in range(n):
print("output")
n 개의 작은 알엇에 대한 몇 가지 실험을 확인 . 그럴 가능성이 가장 높습니다. – MrSmith42
[알고리즘의 시간 복잡성을 찾는 방법] (https://stackoverflow.com/q/11032015)의 복제본 일 것입니다. 각 라인이 몇 번 실행되었는지를 결정하기 위해 여기에서 수행되어야하는 분석은 (심지어 중첩 된 루프에 의해 오도되는 경우에도) 매우 간단합니다. – Dukeling