알고리즘 질문을 해결 중이며 분석은 O (2 ^ sqrt (n))에서 실행된다는 것입니다. 얼마나 큽니까? O (2 ^ n)와 동일합니까? 여전히 비 다항식 시간입니까?
알고리즘 질문을 해결 중이며 분석은 O (2 ^ sqrt (n))에서 실행된다는 것입니다. 얼마나 큽니까? O (2 ^ n)와 동일합니까? 여전히 비 다항식 시간입니까?
답변:
이것은 흥미로운 질문입니다. 다행히도 일단 해결 방법을 알고 나면 특별히 어렵지 않습니다.
함수의 F : N → R + 및 g : N → R + , 우리가 F ∈ O ( g )의 경우에만, LIM SUP N → ∞ F ( N ) / g ( N ) ∈ R을 .
함수 F : N → R +는 상수의 존재 가장 다항식 성장을 경우에만, 보유 K ∈ N 되도록 F ∈ O ( N ↦ N 케이 ). 임의이지만 고정 된 k ∈ N에 대해 이것을 해결해 봅시다 .
lim sup n → ∞ 2 ( n 1/2 ) / n k =
lim n → ∞ 2 ( n 1/2 ) / n k =
lim n → ∞ e log (2) n 1/2 / e log ( n ) k =
lim n → ∞ e log (2) n 1/2 − log ( n ) k = ∞ ∉ R
첫 번째 평등은 노미 네이터와 분모가 모두 단조롭게 꾸준히 증가하고 있기 때문에 사실입니다. 두 번째 등식은 항등식 x y = e log ( x ) y를 사용 합니다. 최종 표현식의 지수가 위에 묶이지 않기 때문에 한계는 유한하지 않습니다. 공식적인 증거를 제공하지 않으면, n 1/2 가 log ( n )을 무증상으로 지배 하는 것으로 알려져 있습니다 . 따라서 문제의 함수가 다항식 성장을 초과합니다.
그러나 성장률은 지수보다 작습니다. 여기서 지수는 (이 목적으로) c > 0에 대해 O ( n ↦ 2 c n )로 정의 됩니다. 이는 훨씬 더 직설적입니다.
lim sup n → ∞ 2 c n / 2 ( n 1/2 ) = lim n → ∞ 2 c n − n 1/2 = ∞ ∉ R
임의의 고정을 위해 C > 0 따라서, 함수의 복잡함 다항식, 지수 사이에 대체로 참이다.
얼마나 큽니까? 음, O (2 ^ sqrt (n))는 정확히 얼마나 큰지 :-(
그 의미를 이해하려면 알고리즘이 O (2 ^ sqrt (n))가 아니라 컴퓨터에서 실제로 2 ^ sqrt (n) 나노초가 걸린다고 상상해보십시오.
n = 100 : 2 ^ 10 = 1024 나노초. 전혀 시간이 없습니다. n = 1000 : 2 ^ 31.xxx = 20 억 나노초. 2 초, 눈에 띄 네요. n = 10,000 : 2 ^ 100 ≈ 10 ^ 30 나노초 = 10 ^ 21 초 = 30 조 년.
이것은 2 ^ n 나노초보다 훨씬 낫습니다. 여기서 n = 100은 30 조 년이 걸리지 만 여전히 해결할 수있는 문제의 크기는 상당히 제한적입니다. 컴퓨터가 일주일 안에 문제를 해결할 수 있다면 "해결 가능"문제를 고려하면 약 6 x 10 ^ 14 나노초, 즉 n = 2,400입니다. 한편, n = 400까지 밀리 초 단위로 해결할 수 있습니다.
(실제로, n = 10,000의 경우 O (2 ^ sqrt (n))와 O (2 ^ n) 모두 정확히 같은 시간이 걸립니다 : 너무 오래 기다립니다.)
다항식을 초과하지 않습니다. n ^ 1000 초가 걸리는 다른 알고리즘을 사용하십시오. n = 2의 경우 실제로는 해결할 수 없습니다.이 알고리즘은 n이 약 885 백만이 될 때까지 더 오래 걸립니다. 근데 누가 신경 쓰겠어요? 이 시점에서 두 알고리즘 모두 9,000 자리 숫자입니다.