알고리즘이론
1 <= x <= N에 대해 1이상 N이하의 모든 kx(k는 정수)를 순회하는 것 O(N^2)이 아니다.
배우겠습니다
2023. 8. 7. 13:45
망상을 하다 발견해서 까먹기전에 적어본다.
N = int(input())
for i in range(1,N+1):
j = 1
while i*j <= N:
j += 1
이 코드의 복잡도는 무엇일까.
순회한다면 O(N + (N/2) + (N/3) + ... + (N/N)) = O(N(1 + 1/2 + 1/3+...+ 1/N))의 복잡도일 것이다.
1/x꼴의 합을 조화급수라한다. 이는 정확한 값을 구할 수 없다. 하지만 근사가 가능하다.
1 + 1/2 + 1/3 + ... + 1/N은 lnN + γ 이다.
ln은 자연로그이고 그 밑은 e = 2.71828...이다. γ는 오일러 상수라 부르고 0.57721...이다.
따라서 복잡도는 O(N(lnN + γ))가 된다.
N(lnN + γ)는
N이 1만일때 약 9만8천
N이 5만일때 약 57만
N이 10만일때 약 121만
N이 20만일때 약 256만
N이 100만일때 약 1439만
이다.