การแก้ไขความสัมพันธ์ที่เกิดซ้ำกับ√nเป็นพารามิเตอร์


18

พิจารณาการเกิดซ้ำ

T(n)=nT(n)+cn

สำหรับn>2ที่มีอย่างต่อเนื่องในเชิงบวกบางcและT(2)=1 1

ฉันรู้ทฤษฎีต้นแบบสำหรับการแก้ไขการเกิดซ้ำ แต่ฉันไม่แน่ใจว่าเราจะแก้ปัญหาความสัมพันธ์นี้ได้อย่างไรโดยใช้ คุณเข้าใกล้พารามิเตอร์รากที่สองได้อย่างไร


5
ทฤษฎีบทหลักไม่สามารถใช้ได้ที่นี่; nไม่สามารถเขียนเป็นnb . คุณลองทำอะไรอีก
Raphael

@ ราฟาเอล: ฉันลองใช้วิธีการ substiution แต่ดูเหมือนจะติดอยู่กับค่าที่ฉันควรเลือกที่จะทดแทน
ผู้สมัครที่

1
วิธีการเกี่ยวกับ "แฉซ้ำการเกิดขึ้นอีกสองสามครั้งสังเกตรูปแบบการคาดเดาการแก้ปัญหาและพิสูจน์มัน "?
Raphael

ทีนี้นี่คือ ive ตัวแรกที่เจอกับประเภทนี้บางทีความช่วยเหลือบางอย่างที่นี่จะช่วยฉันจัดการกับปัญหาในอนาคตของธรรมชาติได้อย่างง่ายดาย
ผู้สมัครตั้งแต่

เมื่อคุณพูดถึงทฤษฎีบทของ Master ฉันคิดว่าคุณต้องแก้ปัญหาความสัมพันธ์นี้กับขอบเขตเชิงเส้นกำกับและไม่ต้องการนิพจน์แบบปิด รับด้านล่างมีวิธีแก้ปัญหาที่ดีในการค้นหาการแสดงออกของรูปแบบปิดซึ่งยังให้ความซับซ้อนของซีมโทติค อย่างไรก็ตามหากคุณต้องการเพียงความซับซ้อนเชิงซีโมติกการวิเคราะห์นั้นง่ายกว่า ดูที่นี่เพื่อดูคำอธิบายที่ดีเกี่ยวกับการค้นหาความซับซ้อนแบบซีมโทติคด้วยโซลูชั่นที่ใช้งานง่ายสำหรับตัวอย่างปัญหาของคุณ
Paresh

คำตอบ:


9

เราจะใช้ข้อเสนอแนะของราฟาเอลและเปิดเผยการเกิดซ้ำอีกครั้ง ในต่อไปนี้ลอการิทึมทั้งหมดเป็นฐาน 2 เราได้รับ

ที่β(n)เป็นวิธีการที่หลายต่อหลายครั้งที่คุณต้องใช้รากที่จะเริ่มต้นด้วย n และการเข้าถึง 2. ปรากฎว่าβ(n)=บันทึกบันทึกn คุณจะเห็นสิ่งนั้นได้อย่างไร พิจารณา: 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
n=2lognn1/2=212lognn1/4=214logn
So the number of times you need to take the square root in order to reach 2 is the solution to 12tlogn1, which is loglogn. So the solution to the recursion is cnloglogn+12n. To make this absolutely rigorous, we should use the substitution method and be very careful about how things get rounded off. When I have time, I will try to add this calculation to my answer.

"You have to take the square root loglogn times" -- is that something a beginner can be expected to see? Also, your result does not fit Yuval's; is it intended to by asymptotically only?
Raphael

@Raphael: Yuval made an error, which he's now corrected. I'll explain the square root in my answer.
Peter Shor

3
Another idea to see that the recursion takes O(loglogn) is the following: By taking the square root of n you halve the digits needed for the binary representation of n. So your input needs w=logn bits and you divide the word-size by 2 for every level of the recursion. Hence you stop after logw=loglogn steps.
A.Schulz

10

In your comment you mentioned that you tried substitution but got stuck. Here's a derivation that works. The motivation is that we'd like to get rid of the n multiplier on the right hand side, leaving us with something that looks like U(n)=U(n)+something. In this case, things work out very nicely:

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
Now let's simplify things even further, by changing to logs (since lgn=(1/2)lgn). Let
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
Aha! This is a well-known recurrence with solution
S(m)=Θ(lgm)
Returning to T(), we then have, with n=2m (and so m=lgn),
T(n)n=Θ(lglgn)
So T(n)=Θ(nlglgn).

6

If you write 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.