답변:
몇 개의 그래프 만 그리면 모양이 좋아집니다. Wolfram Alpha는 이러한 종류의 조사에 유용한 자료입니다.
이 링크에 의해 생성됩니다 . 그래프에서 log (x)는 자연 로그입니다. 그래서 하나의 그래프 방정식이 약간 재미있게 보입니다.
많은 알고리즘의 경우 상수가 다르므로 데이터 크기가 작을수록 속도가 느려지거나 알고리즘 복잡성에 따라 정렬이 잘되지 않는 경우가 있습니다.
우리가 초대형 데이터 크기 만 고려한다면 , 즉. 사람이 결국 승리하는 후 O(n^f)
보다 빠른 것입니다 O(n/log n)
에 대한 0 < f < 1
.
알고리즘의 복잡성의 대부분은 따라서 그 알고, 결국 빠르게하는 알고리즘을 결정하는 것 O(n^f)
보다 더 빠릅니다 O(n/log n)
위해 0 < f < 1
종종 충분하다.
일반적인 규칙은 log n
로 곱하기 (또는 나누는) n^f
는 any 에 대한 곱하기 (또는 나누는)와 비교하여 무시할 수 있다는 것 f > 0
입니다.
이것을 더 명확하게 보여주기 위해 n이 증가함에 따라 어떤 일이 일어나는지 고려해 봅시다.
n n / log n n^(1/2)
2 n/ 1 ?
4 n/ 2 n/ 2
8 n/ 3 ?
16 n/ 4 n/ 4
64 n/ 6 n/ 8
256 n/ 8 n/16
1024 n/10 n/32
어느 것이 더 빨리 줄어드는가? 그것은이다 n^f
열입니다.
하더라도 f
가까운 1되었으며, n^f
열은 느리게 시작되지만 n 개의 더블로, 분모의 변화의 속도는의 분모 반면, 속도를 n/log n
일정 속도로 변화에 열이 나타납니다.
그래프에 특정 사례를 그려 봅시다
출처 : Wolfram Alpha
나는 1에 매우 가까운 O(n^k)
것을 선택 했다 . 또한 처음 에는 느리 도록 상수를 선택했습니다 . 그러나 결국 "승리"하고 시간보다 시간이 적게 걸립니다 .k
0.9
O(n^k)
O(n/log n)
실행 시간을 비교할 때는 항상 큰 값 n을 사용하여 비교하는 것이 좋습니다. 나에게 이것은 어떤 기능이 더 느린 지 직관을 구축하는 데 도움이됩니다.
귀하의 경우 n = 10 ^ 10 및 a = .5를 생각하십시오.
O(n/logn) = O(10^10/10) = O(10^9)
O(n^1/2) = O(10^10^.5) = O(10^5)
따라서 O (n ^ a)는 O (n / logn)보다 빠릅니다. 0 <a <1 인 경우 하나의 값만 사용했지만 여러 값을 사용하여 함수에 대한 직관을 구축 할 수 있습니다