다항식 실행 시간에 대한 n * log n 및 n / log n


14

이 보다 빠르며 보다 느리다는 것을 이해합니다 . 이해하기 어려운 것은 실제로 및 을 와 입니다.Θ ( N 로그 N ) Θ는 ( N / 로그 N ) Θ를 ( N 로그 N ) Θ를 ( N / 로그 N ) Θ ( N F가 ) 0 < F < 1Θ(n)Θ(nlogn)Θ(n/logn)Θ(nlogn)Θ(n/logn)Θ(nf)0<f<1

예를 들어, 대 또는 어떻게 결정합니까?Θ ( N 2 / 3 ) Θ ( n은 1 / 3 )Θ(n/logn)Θ(n2/3)Θ(n1/3)

그런 경우에 진행할 방향을 알려 드리고자합니다. 감사합니다.

답변:


3

몇 개의 그래프 만 그리면 모양이 좋아집니다. Wolfram Alpha는 이러한 종류의 조사에 유용한 자료입니다.

방정식

그래프

이 링크에 의해 생성됩니다 . 그래프에서 log (x)는 자연 로그입니다. 그래서 하나의 그래프 방정식이 약간 재미있게 보입니다.



Raphael에 동의하는 것 외에도이 그림은 훨씬 더 나은 아이디어를 제공합니다. 더 큰 범위를 선택하면 두 번째 기능이 사라져 혼란 스러울 수 있습니다.
phant0m

9

2 n 의 역입니다. 유한 k의 크기에 관계없이다항식 n k 보다 2 n 이 빠르게 증가하는것처럼, log n 은0이 아닌 양수 k의 크기에 관계없이다항 함수 n k 보다 느리게 성장합니다.logn2n2nnkklognnkk

vs n k , k < 1의 경우 : n / log n vs n / n 1 kn/lognnkk<1n/lognn/n1k

큰 위해 N , N / 로그 N > N K 에 대한 K < 1N .n1k>lognnn/logn>nkk<1n


3

많은 알고리즘의 경우 상수가 다르므로 데이터 크기가 작을수록 속도가 느려지거나 알고리즘 복잡성에 따라 정렬이 잘되지 않는 경우가 있습니다.

우리가 초대형 데이터 크기 만 고려한다면 , 즉. 사람이 결국 승리하는 후 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)것을 선택 했다 . 또한 처음 에는 느리 도록 상수를 선택했습니다 . 그러나 결국 "승리"하고 시간보다 시간이 적게 걸립니다 .k0.9O(n^k)O(n/log n)


n / log n

그것은 약간의 오타였습니다. 그것이 처음에 의미했던 것입니다. 어쨌든, n^k상수를 선택하더라도 처음에는 느리더라도 결국 더 빨라지 는 더 적절한 그래프를 추가했습니다 .

3

nfnn1fn2/3=n/n1/3

nlognvs.nn1f.

lognnεε>0


1

실행 시간을 비교할 때는 항상 큰 값 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 인 경우 하나의 값만 사용했지만 여러 값을 사용하여 함수에 대한 직관을 구축 할 수 있습니다


1
글을 쓰지 말고 O(10^9)직관을 세우기 위해 숫자를 시도하는 것에 대한 요점은 옳습니다.

불합격. 이것은 정확하지 않습니다. 편향 될 수있는 단일 n 상수를 대체했습니다. 다른 상수를 선택하면 알고리즘을 더 잘 보이게 만들 수 있습니다. Big O 표기법은 장기적으로 더 빠른 추세를 설정하는 데 사용됩니다. 이렇게하려면 n이 작을 때 더 느리더라도 큰 n에 대해 더 빠름을 보여줄 수 있어야합니다.

감사. 여러 값을 추가하고 더 큰 숫자를 고려함

상수 a에 대한 f (a)> g (a) 때문에 반드시 O (f (x))> O (g (x))를 의미하지는 않습니다. 이것은 직관을 구축하는 데 유용하지만 엄격한 증거를 작성하기에는 충분하지 않습니다. 이 관계가 유지됨을 나타내려면 하나의 큰 n이 아니라 모든 큰 n에 대해이 사실을 나타내야합니다. 마찬가지로, 양의 차수가 1

1

fg

nα1(logn)α2(loglogn)α3nβ1(logn)β2(loglogn)β3(α1,α2,α3)<(β1,β2,β3)

(2,10)<(3,5)(2,10)>(2,5)

귀하의 예에 적용 :

O(n/logn)(1,1,0)

O(n2/3)(2/3,0,0)

O(n1/3)(1/3,0,0)

(1/3,0,0)<(2/3,0,0)<(1,1,0)O(n1/3)O(n2/3)O(n/logn)

n의 거듭 제곱은 로그의 거듭 제곱을 지배하며, 이는 로그 로그의 힘을 지배합니다.

출처 : 콘크리트 수학, p. 441

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.