점근 표기법 사용 오류


10

다음과 같은 재발의 다음 증거로 무엇이 잘못되었는지 이해하려고합니다.

T(n)=2T(n2)+n
T(n)2(cn2)+ncn+n=n(c+1)=O(n)

설명서에 유도 귀무 가설 때문에 잘못 되었다고 나와 있습니다.

T(n)cn

2
마스터 정리를 사용하여이 형식의 반복을 해결할 수도 있습니다 .
Juho

2
@ Ran : 나는 마스터 정리 가이 질문에 적절한 태그라고 생각하지 않습니다. 문제는 그것을 해결하는 방법에 관한 것이 아니라 특정 논쟁에서 오류를 지적하는 것입니다. 게다가, 마스터 정리는 아마도 너무 구체적이며 아마도 자신의 태그를 가질 자격이 없습니다. 일반적으로 가능한 답변이 아닌 질문에 따라 태그를 지정해야합니다. 예를 들어이 akra-bazzi에 태그를 지정 하시겠습니까?
Aryabhata

"다음 증거의 문제점"-증거가 보이지 않습니다. 실수를 발견하기 위해 완전한 증거를 작성하는 것이 도움이됩니다 (즉, 유도를 명시 적으로 만드는 것).
Raphael

답변:


12

최종 목표는 을 증명하는 것 입니다. 귀납 가설로 시작합니다.T(n)=O(n)

모든 i < n에 대해 T ( i ) c i .T(i)cii<n

그리고 증거를 완료하기 위해, 당신은 보여 주어야 뿐만 아니라입니다.T(n)cn

그러나 추론 할 수있는 것은 이며 증명을 완료하는 데 도움이되지 않습니다. (거의) 모든 n에 대해 하나의 상수 c 가 필요합니다 . 따라서 우리는 아무것도 결론을 내릴 수 없으며 T ( n ) = O ( n ) 은 증명되지 않습니다.T(n)(c+1)ncnT(n)=O(n)

결과와 증명 프로세스가 혼동됩니다. 그리고이 경우 은 실제로 Θ ( n log n ) 이므로이를 증명할 수있는 적절한 유도 가설을 고려할 수 있습니다.T(n)Θ(nlogn)


c '= c + 1을 바꾸면 어떤 변화가 있습니까?
Erb

@erb : 아뇨. 선택한 상수를 증명해야합니다. 대체 하면 결국 T ( n ) ( c ' + 1 ) n (또는 T ( n ) ( c + 2 ) n )이면 결과는 같습니다. c=c+1T(n)(c+1)nT(n)(c+2)n
pad

8

몇 단계를 생략했습니다. 임을 유도하여 증명하려고 시도하는 것처럼 보이고 증거는 다음과 같습니다.T(n)=O(n)

k < n에 대해 라고 가정하십시오 . 이것은 T ( k ) c를 의미합니다.T(k)=O(k)k<n일부 c의 경우 k . 그런 다음 T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckc 이므로 T ( n ) = O ( n ) 입니다.T(n)=2T(n/2)+n2cn/2+n(c+1)nT(n)=O(n)

이 증명은 처음부터 잘못되었습니다.“ k < n ”에 대한 는 의미가 없습니다. 큰 오 점근선 개념이다 : T ( K ) = O ( K ) 일부의 일정이 있음을 의미 C 및 문턱 N 되도록 K N , T ( K ) CT(k)=O(k)k<nT(k)=O(k)c . 그리고 마지막으로,“ T ( n ) = O ( n ) ”이라고 결론 지을 수 없습니다. 왜냐하면 함수 T 에 대한 내용이 전체적으로 나타나고 특정 값 T ( n ) 에 대해서만 무언가를 증명했기 때문입니다..kN,T(k)ckT(n)=O(n)TT(n)

의미 에 대해 명시해야합니다 . 아마도 당신의 증거는 다음과 같습니다.O

T ( k ) c 라고 가정하자 모든 K < N . 그런 다음 T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckk<n .T(n)=2T(n/2)+n2cn/2+n(c+1)n

이것은 유도 단계를 증명하지 못합니다 : 이고 k = n의 경우 T ( k ) ( c + 1 )T(k)ckk=n . 이것은 약한 경계입니다. 이것이 무엇을 의미하는지보십시오 : T ( k ) cT(k)(c+1)k c T 의 성장 속도에 대한 경계임을 의미한다. 그러나 k가 커지면 c 가증가합니다. 그것은 선형적인 성장이 아닙니다!T(k)ckcTck

자세히 보면 k가 두 배가 될 때마다 비율 1 씩 증가 한다는 것을 알 수 있습니다. 따라서 비공식적으로 m = 2 p k 이면 c m = c k + p ; 즉, c k = c 0 log 2 k 입니다.c1km=2pkcm=ck+pck=c0log2k

이것은 정확하게 할 수 있습니다. , T ( k ) c log 2 ( k )의 유도로 증명합니다 .k1T(k)clog2(k)

재귀 관계는 데이터를 선형 시간에 두 개의 동일한 부분으로 분할하는 분할 및 정복 알고리즘에 일반적입니다. 이러한 알고리즘은 시간 ( O ( n ) 아님).Θ(nlog(n))O(n)

예상 결과가 무엇인지 보려면 마스터 정리 에 대한 반복 관계를 확인할 수 있습니다 . 나눗셈은 이고 추가 작업은 n입니다 . log 2 ( 2 ) = 1 이므로 성장이 Θ ( n 인 두 번째 경우 입니다.2T(n/2)nlog2(2)=1 .Θ(nlog(n))


7

나는 이미 내 의견을 더 자세히 설명함으로써 이미 주어진 대답을 확장하고 있습니다.

추측하기가 어렵고 지루할 수 있으므로 때로는 더 나은 방법이 존재합니다. 그러한 방법 중 하나는 마스터 정리 입니다. 우리의 되풀이는 이제 . 여기서 a 1b > 1 은 상수이고 f ( n ) 는 함수입니다. 우리의 경우 n / 2 n / 2 를 의미하는 것으로 해석 될 수 있습니다.T(n)=aT(n/b)+f(n)a1b>1f(n)n/2n/2. 기술적으로 정확히 말하면, 가 정수가 아니기 때문에 재귀가 잘 정의되어 있지 않을 수 있습니다. 그러나 이것은 재발의 점근 적 행동에 영향을 미치지 않기 때문에 허용됩니다. 따라서 바닥과 천장을 떨어 뜨리는 것이 편리한 경우가 많습니다. 이것의 공식적인 증거는 약간 지루하지만 관심있는 독자는 예를 들어 Cormen et al. .n/2

우리의 경우에는 , b = 2 , f ( n ) = Θ ( n ) 입니다. 이것은 우리가 n log b a = n log 2 2 = n 임을 의미합니다 . 마스터 정리 의 두 번째 경우f ( n ) = Θ ( n ) 이후에 적용되며 , 해는 T ( n ) = Θ ( n log입니다.a=2b=2f(n)=Θ(n)nlogba=nlog22=nf(n)=Θ(n) .T(n)=Θ(nlogn)


감사! "바닥과 천장을 떨어 뜨리는" 은 일반적으로 행해지는 라고 가정하는 것에 대응할 수있다 . 기본 감소는 비 감소 기능의 경우 서브 시퀀스의 점근 적 성장이 전체 서열의 점근 적 성장과 동일하다는 것입니다. n=2k
라파엘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.