시간 복잡성에서 찾은 리소스는 시간 복잡성 방정식의 용어, 특히 비 다항식 예제를 무시해도 괜찮은지 확실하지 않습니다.
n 2 + n + 1 형식의 무언가가 주어지면 마지막 두 용어는 중요하지 않다는 것이 분명합니다 .
구체적으로, 2 n 과 n * (2 n )의 두 가지 분류가 주어지면 두 번째는 첫 번째와 같은 순서입니까? 추가 n 곱셈이 중요합니까? 일반적으로 자원은 단지 x n 이 기하 급수적이며 훨씬 빠르게 성장 한다고 말합니다 .
2 n 이 n 을 크게 앞지르지 않는 이유를 이해할 수 있지만, 함께 합산되지 않기 때문에 두 방정식을 비교할 때 크게 중요합니다. 실제로 이들의 차이는 항상 n의 요소가됩니다. 가장 적게 말하는 것이 중요해 보입니다.
답변
O
이 질문에 대답하려면 빅 O ( ) 의 정식 정의로 이동해야합니다 .
정의는 한계 가 존재하는 경우에만 f(x)
속합니다 . 즉 무한대가 아닙니다. 요컨대 이것은 상수 값 이 존재하여 그 값 이 절대로 크지 않다는 것을 의미합니다 .O(g(x))
limsupx → ∞ (f(x)/g(x))
M
f(x)/g(x)
M
당신의 질문의 경우 하자 . 그 다음 입니다 여전히 무한하게 성장할 것이다. 따라서에 속하지 않습니다 .f(n) = n ⋅ 2n
g(n) = 2n
f(n)/g(n)
n
f(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 > 0
와 n₀ ≥ 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)입니다.
답변
