[algorithm] 2 ^ n과 n * 2 ^ n이 동시에 복잡합니까?

시간 복잡성에서 찾은 리소스는 시간 복잡성 방정식의 용어, 특히 비 다항식 예제를 무시해도 괜찮은지 확실하지 않습니다.

n 2 + n + 1 형식의 무언가가 주어지면 마지막 두 용어는 중요하지 않다는 것이 분명합니다 .

구체적으로, 2 n 과 n * (2 n )의 두 가지 분류가 주어지면 두 번째는 첫 번째와 같은 순서입니까? 추가 n 곱셈이 중요합니까? 일반적으로 자원은 단지 x n 이 기하 급수적이며 훨씬 빠르게 성장 한다고 말합니다 .

2 nn 을 크게 앞지르지 않는 이유를 이해할 수 있지만, 함께 합산되지 않기 때문에 두 방정식을 비교할 때 크게 중요합니다. 실제로 이들의 차이는 항상 n의 요소가됩니다. 가장 적게 말하는 것이 중요해 보입니다.



답변

O이 질문에 대답하려면 빅 O ( ) 의 정식 정의로 이동해야합니다 .

정의는 한계 가 존재하는 경우에만 f(x)속합니다 . 즉 무한대가 아닙니다. 요컨대 이것은 상수 값 이 존재하여 그 값 이 절대로 크지 않다는 것을 의미합니다 .O(g(x))limsupx → ∞ (f(x)/g(x))Mf(x)/g(x)M

당신의 질문의 경우 하자 . 그 다음 입니다 여전히 무한하게 성장할 것이다. 따라서에 속하지 않습니다 .f(n) = n ⋅ 2ng(n) = 2nf(n)/g(n)nf(n)O(g(n))


답변

n⋅2ⁿ더 큰 것을 보는 빠른 방법 은 변수를 변경하는 것입니다. 하자 m = 2ⁿ. 그런 다음 n⋅2ⁿ = ( log₂m )⋅m(양쪽에 기본 2 인 로그를 복용 m = 2ⁿ제공 n = log₂m), 당신은 쉽게 그 보여줄 수있는 m log₂m것보다 더 빨리 성장 m.


답변

나는 n⋅2ⁿ에 있지 않다는 데 동의 O(2ⁿ)하지만, 우수한 사용 제한이 항상 유지되는 것은 아니기 때문에 더 명확해야한다고 생각했습니다.

: 빅 O의 공식적인 정의에 f(n)있는 O(g(n))상수가 존재하는 경우 c > 0n₀ ≥ 0모든 있도록 n ≥ n₀우리가 f(n) ≤ c⋅g(n). f(n) = n⋅2ⁿ및에 대해 그러한 상수가 존재하지 않음을 쉽게 알 수 있습니다 g(n) = 2ⁿ. 그러나, 그 표시 할 수 있습니다 g(n)입니다 O(f(n)).

즉, n⋅2ⁿ는 하한 2ⁿ입니다. 이것은 직관적입니다. 그것들은 기하 급수적이므로 대부분의 실제 상황에서 똑같이 사용되지는 않지만 2ⁿ반드시보다 느리게 성장 하기 때문에 같은 순서라고 말할 수는 없습니다 n⋅2ⁿ.


답변

나는 n⋅2ⁿ보다 빨리 자라는 다른 답변들과 논쟁하지 않는다 2ⁿ. 그러나 n⋅2ⁿ성장은 여전히 ​​기하 급수적입니다.

알고리즘에 관해 이야기 할 때, 시간 복잡성이 증가한다는 것은 종종 지수라고 말합니다. 그래서, 우리는로 간주 2ⁿ, 3ⁿ, eⁿ, 2.000001ⁿ, 또는 우리의 n⋅2ⁿ지수가 증가 복잡성의 같은 그룹이 될 수 있습니다.

약간의 수학적 의미를 부여하기 위해, 우리는 f(x)그러한 상수가 존재한다면 기하 급수적으로 증가 하는 함수 를 고려 c > 1합니다 .f(x) = O(cx)

들어 n⋅2ⁿ상수 c보다 숫자 클 수 있습니다 2하자 걸릴 3. 그때:

n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ그리고 이것은 1어느 것보다 적습니다.n .

따라서 2ⁿ보다 느리게 성장 n⋅2ⁿ하고 마지막으로보다 느리게 성장 2.000001ⁿ합니다. 그러나이 세 가지 모두 기하 급수적으로 증가합니다.


답변

“두 번째가 첫 번째와 같은 순서입니까? 추가 n 곱셈이 문제가됩니까?” 이들은 두 개의 다른 답변을 가진 두 개의 다른 질문입니다.

n 2 ^ n은 2 ^ n보다 점증 적으로 빠르게 증가합니다. 그 질문에 대답했습니다.

그러나 당신은 “알고리즘 A가 2 ^ n 나노초를 필요로하고 알고리즘 B가 2 ^ n 나노초를 취한다면, 초 / 분 / 시간 / 일 / 월 / 년 안에 솔루션을 찾을 수있는 가장 큰 n은 무엇입니까?” 답은 n = 29/35/41/46/51/54 대 25/30/36/40/45/49입니다.

시간 T에서 해결 될 수있는 가장 큰 문제의 크기는 두 경우 모두 O (ln T)입니다.


답변