매개 변수로 √n을 사용하여 되풀이 관계 해결


18

재발을 고려하십시오

T(n)=nT(n)+cn

대 어떤 양의 상수를 가진 및 .c T ( 2 ) = 1n>2cT(2)=1

나는 재발을 해결하기위한 마스터 정리를 알고 있지만 그것을 사용 하여이 관계를 어떻게 해결할 수 있는지 확실하지 않습니다. 제곱근 파라미터에 어떻게 접근합니까?


5
마스터 정리는 여기에 적용되지 않습니다. n 같이 쓸 수 없습니다nb . 다른 무엇을 시도 했습니까?
Raphael

@Raphael : 대체 방법을 시도했지만 대체 할 값을 고수하는 것처럼 보였습니다.
seeker

1
"재발을 몇 번 펼치고, 패턴을 관찰하고, 해결책을 추측하고 증명하는 것은 어떻습니까?"
Raphael

글쎄, 이것은이 유형을 처음 접한 것입니다. 어쩌면 여기에 약간의 도움이있어 자연의 미래 문제를 쉽게 해결할 수 있습니다.
seeker

Master Theorem을 언급 했으므로 점근 경계에 대해이 관계를 해결해야한다고 가정하고 실제로 닫힌 형식 표현이 필요하지 않습니다. 아래에 주어진 닫힌 형식 표현을 찾는 좋은 솔루션이 있으며 점근 적으로 복잡합니다. 그러나 점근 적 복잡성 만 필요한 경우 분석이 더 간단합니다. 봐 가지고 여기에 문제 인스턴스에 대한 좋은 직관적 인 솔루션으로, 점근 적 복잡성을 찾는 좋은 설명에 대한합니다.
Paresh

답변:


9

우리는 라파엘의 제안을 사용하고 재발을 전개 할 것입니다. 다음에서 모든 로그는 밑이 2입니다.

여기서β(n)n으로 시작하기 위해 제곱근을 취하고 2에 도달 해야하는 횟수입니다. 그것은β(n)=loglogn입니다. 어떻게 알 수 있습니까? 고려 : n

T(n)=n1/2T(n1/2)+cn=n3/4T(n1/4)+n1/2cn1/2+cn=n7/8T(n1/8)+n3/4cn1/4+2cn=n15/16T(n1/16)+n7/8cn1/8+3cn=n2T(2)+cnβ(n).
β(n)β(n)=loglogn 따라서 2에 도달하기 위해 제곱근을 취하는 횟수는1에 대한 해입니다.
n=2lognn1/2=212lognn1/4=214logn
이며,loglogn입니다. 따라서 재귀에 대한 해결책은cnloglogn+1입니다.12tlogn1loglogn. 이를 절대적으로 엄격하게하려면 대체 방법을 사용하고 반올림 방법에 매우주의해야합니다. 시간이 있으면이 계산을 내 대답에 추가하려고합니다.cnloglogn+12n

"제곱근 번 가져와야합니다"-초보자가 볼 수있는 것이 있습니까? 또한 결과가 Yuval의 결과와 맞지 않습니다. 무증상만을위한 것입니까? loglogn
Raphael

@Raphael : Yuval에서 오류가 발생하여 수정되었습니다. 내 대답에 제곱근을 설명하겠습니다.
피터 쇼어

3
또 다른 아이디어는 재귀가 소요 볼 수 다음과 같습니다의 제곱근을 취함으로써 N 당신의 이진 표현에 필요한 숫자 절반 N을 . 따라서 입력에는 w = log n 비트 가 필요 하며 모든 재귀 수준에 대해 단어 크기를 2로 나눕니다. 따라서 log w = log log n 단계 후에 중지 됩니다. O(loglogn)nnw=lognlogw=loglogn
A.Schulz

10

귀하의 의견에서 당신은 대체를 시도했지만 붙어 있다고 언급했습니다. 작동하는 파생물은 다음과 같습니다. 동기는 우리가 √를 제거하고 싶습니다오른쪽에 n 곱하기,U(n)=U(n. 이 경우 상황이 매우 훌륭하게 해결됩니다.U(n)=U(n)+something

이제 로그로 변경하여 더 단순화 해 봅시다 (lg부터)

T(n)=n T(n)+nso, dividing by n we getT(n)n=T(n)n+1and letting n=2m we haveT(2m)2m=T(2m/2)2m/2+1
). 하자 S ( m )lgn=(1/2)lgn 아하! 이것은 솔루션S(m)=Θ(lg로 잘 알려진 재발입니다.
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
로 되돌아 T (
S(m)=Θ(lgm)
, 우리는 n = 2 m (따라서 m = lg n ), TT()n=2mm=lgn 따라서 T ( n ) = Θ ( n
T(n)n=Θ(lglgn)
.T(n)=Θ(nlglgn)

6

을 쓰면m=logn  you have T(m)=m2T(m2)+c2m .

Now you know the recursion tree has hight of order O(logm), and again it's not hard to see it's O(2m)  in each level, so total running time is in: O((logm)2m) , which concludes O(nloglogn)  for n.

In all when you see n or nab,a<b , is good to check logarithm.

P.S: Sure proof should include more details by I skipped them.


2

Let's follow Raphael's suggestion, for n=22k:

T(n)=T(22k)=22k1T(22k1)+c22k=22k1+2k2T(22k2)+c(22k+22k)==22k1+2k2++20T(220)+c(22k+22k++22k)=22k1+ck22k=(cloglogn+1/2)n.

Edit: Thanks Peter Shor for the correction!


How did you come up with 22k? Note for OP: "" is not a proof, you'll have to provide that still (usually by induction).
Raphael

@Raphael: It's nearly a proof. You just need to show that it's also correct for numbers not of the form 22k.
Peter Shor

Actually, the recurrence is only well-defined for numbers of the form 22k, since otherwise, at some point n wouldn't be an integer, and you'll never reach the base case T(2).
Yuval Filmus

1
If this recurrence actually came from an algorithm, it would probably really be something more like T(n)=nT(n)+cn.
Peter Shor

1

Unravel the recurrence once as follows:

T(n)=n T(n)+n=n1/2(n1/4 T(n1/4)+n1/2)+n=n11/4 T(n1/4)+2n.

Continuing the unraveling for k steps, we have that:

T(n)=n11/2kT(n1/2k)+kn.

These steps will continue until the base case of n1/2k=2. Solving for k we have:

n1/2k=2logn=2kk=loglogn.

Substituting k=loglogn into the unraveled recurrence, we have

T(n)=n2T(2)+nloglogn.

2
Could you rewrite your picture to MathJax? We discourage images with text as the answers.
Evil

1
@PKG it seems like your edit is slightly different and also you explain steps, maybe you could answer on your own.
Evil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.