문제

나는 작업을 통해 최근의 컴퓨터 과학 숙제를 포함하는 재귀 big-O notation.내가 믿고 이것을 이해하 꽤(확실히 완벽하게,하지만!) 그러나 한가지 질문에 특히게 가장 문제입니다.이상한 것을 보고 그것은,그것은 보인 가장 간단 중 하나에서 숙제를했다.

최고의 제공의 성장 속도를 사용하여 큰 오 표기에 대한 솔루션을 다음과 같은 재발?

T(1)=2

T(n)=2T(n-1)+1n>1

및 선택 사항은 다음과 같습니다:

  • O(n 로그 n)
  • O(n^2)
  • O(2^n)
  • O(n^n)

내가 이해하는 빅 오로 작동 상한선을 설명하는 대부분의 금액을 계산하거나 가장 높은 실행되는 프로그램 또는 프로세스에 걸릴 것입니다.나는 느낌이 다음과 같이 특정 재귀어야 O(n)기 때문에,대부분의,재귀만이 발생 한 번에 대한 각각의 가치 n.이후 n 사용할 수 없다,그것은 하나가 더 나은 것보다는,O(nlogn),또는 악화되고,다른 세 개의 옵션이 있습니다.

그래서 제 질문은:왜 이 O(n)?

도움이 되었습니까?

해결책

거기에 몇 가지 다른 방법으로 해결하는 재발:대체,재발 트리 마스터 정리했습니다.마스터 정리 작동하지 않을 경우에는,그렇지 않기 때문에 맞는 마스터 정리 형태입니다.

사용할 수 있습니다 다른 두 가지 방법이지만,가장 쉬운 방법이 이 문제에 대한 해결하는 반복적으로.

T(n)=2T(n-1)+1
T(n)=4T(n-2)+2+1
T(n)=8T(n-3)+ 4 + 2 + 1
T(n)=...

패턴을 참조하십시오?

T(n)=2n-1⋅T(1)+2n-2 + 2n-3 + ... + 1
T(n)=2n-1⋅2 + 2n-2 + 2n-3 + ... + 1
T(n)=2n + 2n-2 + 2n-3 + ... + 1

따라서,좁은 Θ(2n).

다른 팁

나는 당신이 오해한 질문에는 비트입니다.그것을 요구하지 않습니다 시간이 얼마나 걸릴 것인지를 해결합니다.그것이 무엇인지 묻는 big-O(the asymptotic 바인딩)의 솔루션입니다.

당신이해야 할 것은 오는 폐쇄형 솔루션,e.non-재귀적 수식을 위해 T(n),그리고 그 결정 big-O 의 표현입니다.

이 질문에 대한 오 표기에 대한 솔루션을 되풀이하지 않는 비용 계산이 되었습니다.

다른 방법을 넣어:재발을 생성합니다:

  1 -> 2
  2 -> 5
  3 -> 11
  4 -> 23
  5 -> 47

무엇이 큰 오 표기 최고의 순서에 대해 설명합니다 2, 5, 11, 23, 47, ...

올바른 해결하는 방법을 해결하고 재발 방정식이 있습니다.

내가 될 것이라고 생각하는 기하 급수적으로하고 있습니다.각각의 증가를 만드는 가치를 두 배로 크다.

T(2) = 2 * T(1) = 4
T(3) = 2 * T(2) = 2 * 4
...

T(x)이 될 것이 실행 시간의 다음 프로그램(예를 들어):

def fn(x):
 if (x == 1):
  return    # a constant time
 # do the calculation for n - 1 twice
 fn(x - 1)
 fn(x - 1)

내가 될 것이라고 생각하는 기하 급수적으로하고 있습니다.각 증가를 가져 두 배로 계산이 됩니다.

아니오,그렇지 않습니다.매우 반대로:

그것을 고려하십시오 n 반복,우리는 실행 시간 R.다음 n +1 을 반복 우리는 정확하게 얻을 것 R + 1.

따라서,성장율은 일정한 전반적인 런타임 참으로 O(n).

그러나 내가 생각하는 디마의 가정에 대한 질문에 맞지만 그의 솔루션에 지나치게 복잡:

당신이해야 할 것은 오는 폐쇄형 솔루션,e.non-재귀적 수식을 위해 T(n),그리고 그 결정 big-O 의 표현입니다.

그것은 충분을 검사하의 상대적 크기 T(n 고) T(n +1)반복하고 결정하는 상대의 성장 속도입니다.양은 분명히 두 배로 직접 제공 asymptotic 성장이다.

첫째로 떨어져,모든 답변을 보다 더 O(n)...O(n*로그 n)은 더 복잡한 보다 일반 old O(n).무엇이 더:8 8*3,16 16*4,등등....

에 실제적인 질문입니다.일반적인 솔루션을 수 있는 분명히 해결 될 일정 시간에 당신을 하지 않고 재귀

(T(n)=2^(n-1)+2^(n)-1),그래서는 그들이 요청하고 있습니다.

당신이 볼 수 있듯이,우리가 작성하는 경우 재귀 코드:

int T( int N )
{
    if (N == 1) return 2;
    return( 2*T(N-1) + 1);
}

그것은 분명히 O(n).

그래서,그것은 심하게 질문을 말로,그리고 그들은 아마도 당신은 성장의 기능 자체의 복잡성의 코드입니다.는 2^n.지금 이동의 나머지를 당신의 숙제...과 연구에 O(n*로그 n)

컴퓨팅는 폐쇄형 솔루션을 재귀는 것은 쉽습니다.검사로,당신이 생각하는 솔루션

T(n) = 3*2^(n-1) - 1

다음을 증명에 의해 유도된 이것은 참으로 솔루션입니다.기본 경우:

T(1) = 3*2^0 - 1 = 3 - 1 = 2. OK.

유도:

Suppose T(n) = 3*2^(n-1) - 1. Then
T(n+1) = 2*T(n) + 1 = 3*2^n - 2 + 1 = 3*2^((n+1)-1) - 1. OK.

첫 번째 평등에서 유래 되풀이 정의 에서 두 번째 유도적인 가설입니다.QED.

3*2^(n-1)-1 은 분명히 세타(2^n)따라서,오른쪽에 답니다.

는 사람에게는 대답 O(n):동의 할 수 없으로 더 많은 디마.문제는 물 좁은 상을 계산적 복잡하는 알고리즘을 컴퓨팅 T(n)(될 것이라고 지금 O(1)기 때문에 닫힌 형태로 제공되었습니다).문제 요청에 대한 소감 상 T(n)체, 과는 기하 급수적인 하나입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top