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


178

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

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

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

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


8
내 의견으로는 NLogN은 N보다 느리게 간주되지만 대부분의 사람들은 실제로 얼마나 신경 쓰지 않더라도 N2 ^ N은 2 ^ N보다 느리지 만 사람들에게는 "충분히 느리지 않다"고 말하는 것이 안전합니다. 진료 ..

@ tobias_k, 나는이 점을 이해하지만 O (n!)의 예를 고려하십시오. 여분의 n 항이 실제로 다릅니 까? O (n!)이 O ((n + 1)!) 일 때 O (n!)는 O (n * n!)입니다. 성장은 같지만 ...이 경우에는 하나가 엄청나게 커도 성장이 다른가? 복잡성이 걱정되는 시간이 아닙니까?
matty-d

3
@JackWu 그러나 대부분의 사람들 은 n 대신 nlogn을 사용하여 수억 개의 레코드를 정렬해야 할 때까지 실제로 많은 것을 신경 쓰지 않습니다.
CB

4
실제로, n! = o((n+1)!)그것은 무증상으로 엄격하게 느리게 자랍니다.
chepner

16
이것은 복잡성 이론과는 아무런 관련이 없으며, 그것은 단지 증상에 관한 것입니다. 또한 이런 종류의 질문은 아마도 컴퓨터 과학 에서 더 나을 것입니다 .
Raphael

답변:


231

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))


5
약간 더 읽기 쉬운 정의를 보려면 여기를
Alden

3
공식적으로 말하자면, 당신은 한계를 취할 수 없습니다 O(f(x)/g(x)); big-O 알림은 값을 제한 할 수있는 단일 함수가 아니라 함수 세트의 약어입니다. 그러나 존재 하는 경우이를 보여줄 수있는 것이 사실 이라고 생각 합니다. f(x) = O(g(x))lim(x->infinity) f(x)/g(x)
chepner

44
한계가 존재할 필요는 없습니다. 비율은 충분히 큰 x에 대한 상수에 의해서만 상쇄되어야한다. 예를 들어, 2 + sin (x)는 O (1)에 있지만 (2 + sin (x)) / 1은 x-> 무한 도로 한계에 접근하지 않습니다.
user2357112는 Monica

2
정의는 lim sup대신에 정확합니다 lim.
David Eisenstat

11
@IvayloStrandjev 간단한 설명이 잘못되었습니다. 이것은 x모든 값이 아닌 충분히 큰 경우에 해당 x합니다.
K.Steff

85

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


3
감사합니다! 이것은 내 의견으로는 가장 좋은 대답입니다. 공식적인 정의를 기반으로 한 증거는 정확하지만 극복해야 할 일종의 걸림돌이 있다면 매우 편안하고 친숙한 비유가 가장 훌륭하고 빠르게 일을 수행합니다.
존 피

1
바보 같은 질문은 무엇 lg입니까? 밑이 2 인 로그?
Pierre Arlaud

3
게으른 약어입니다. 컴퓨터 과학에서, 그것은 기본 2를 의미하는 경향이 있습니다. 그것은 주로 분할 및 정복 전략의 결과이기 때문입니다. big-O 표기법에서는 x와 y에 관계없이 숫자의 base-x 로그가 상수 y만큼만 base-y 로그와 다르기 때문에 무엇이든 나타낼 수 있습니다.
chepner

3
나는 lg점근선 실행 시간을 논의 할 때 가장 일반적으로 사용되는 기본 불가지론 적 사용이 아니라, 기본 10 로그에 대한 ISO 표기법 이라는 점을 되돌아보아야합니다 . 참조 en.wikipedia.org/wiki/Logarithm#Particular_bases
chepner

알았어.하지만 m log m이 m보다 빠르게 자라는 이유가 n 2 ^ n이 2 ^ n보다 빠르게 자라는 것보다 더 분명한 이유는 모르겠다.
djechlin

10

나는 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ⁿ.


f(n) = 2*2^n내 생각 엔 n*2^n?
tobias_k 2013

4

나는 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 * 2 ^ n은 2.000001 ^ n보다 크고 n = 34,726,000입니다. 이 시점에서 2 ^ n은 천만 자릿수가 넘는 숫자이므로 실제로는 중요하지 않습니다.
gnasher729

1
@ gnasher729 f (n)과 c * f (n)이 big-O의 관점에서 동일한 복잡성이므로 생략 할 수있는 상수입니다. 예를 들어 40'000'000 * 2.000001 ^ n은 즉시 n * 2 ^ n보다 큽니다. 그러나 당신이 옳습니다, 그것은 중요하지 않습니다. 우리가 지수가 커지면 (n의 작은 값만 얻지 않는 한) 실제로 중요하지 않다고 말할 것입니다.
Andrey

2

"두 번째가 첫 번째와 같은 순서입니까? 추가 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)입니다.

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