Memecahkan hubungan perulangan dengan √n sebagai parameter


18

Pertimbangkan pengulangannya

T(n)=nT(n)+cn

untuk dengan beberapa konstanta positif , dan .n>2cT(2)=1

Saya tahu teorema Master untuk menyelesaikan perulangan, tapi saya tidak yakin bagaimana kita bisa menyelesaikan hubungan ini dengan menggunakannya. Bagaimana Anda mendekati parameter root kuadrat?


5
Teorema Master tidak berlaku di sini; n tidak dapat ditulis sebagainb . Apa lagi yang sudah Anda coba?
Raphael

@ Raphael: Saya mencoba metode substitusi, tetapi sepertinya terjebak pada nilai apa yang harus saya pilih untuk diganti.
pencari

1
Bagaimana dengan "membuka kembali pengulangan beberapa kali, mengamati suatu pola, menebak solusinya dan membuktikannya "?
Raphael

Nah ini adalah ive pertama yang saya jumpai dari jenis ini, mungkin beberapa bantuan di sini akan membantu saya mengatasi masalah alam di masa depan dengan mudah.
seeker

Karena Anda menyebutkan Teorema Master, saya menganggap Anda perlu menyelesaikan hubungan ini untuk batas asimptotik, dan tidak benar-benar memerlukan ekspresi bentuk tertutup. Diberikan di bawah ini, ada beberapa solusi yang baik untuk menemukan ekspresi bentuk tertutup, yang juga memberikan kompleksitas asimptotik. Namun, jika Anda hanya membutuhkan kompleksitas asimptotik, analisisnya lebih sederhana. Lihat penjelasan di sini untuk menemukan kerumitan asimptotik, dengan solusi intuitif yang bagus untuk contoh masalah Anda.
Paresh

Jawaban:


9

Kami akan menggunakan saran Raphael dan membuka lipatannya. Berikut ini, semua logaritma adalah basis 2. Kita dapatkan

di manaβ(n)adalah berapa kali Anda harus mengambil akar kuadrat untuk memulai dengan n, dan mencapai 2. Ternyataβ(n)=loglogn. Bagaimana Anda bisa melihatnya? Pertimbangkan: 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)=catatancatatann Jadi berapa kali Anda perlu mengambil akar kuadrat untuk mencapai 2 adalah solusi untuk1
n=2catatannn1/2=212catatannn1/4=214catatann...
, yang merupakanloglogn. Jadi solusi untuk rekursi adalahcnloglogn+112tcatatann1catatancatatann. Untuk membuat ini benar-benar ketat, kita harus menggunakan metode substitusi dan sangat berhati-hati tentang bagaimana hal-hal dibulatkan. Ketika saya punya waktu, saya akan mencoba menambahkan perhitungan ini ke jawaban saya.cncatatancatatann+12n

"Anda harus mengambil akar kuadrat kali" - adalah bahwa sesuatu yang pemula dapat diharapkan untuk melihat? Juga, hasil Anda tidak sesuai dengan Yuval; Apakah ini dimaksudkan hanya secara asimptotik? loglogn
Raphael

@ Raphael: Yuval membuat kesalahan, yang sekarang sudah diperbaiki. Saya akan menjelaskan akar kuadrat dalam jawaban saya.
Peter Shor

3
Gagasan lain untuk melihat bahwa rekursi mengambil adalah sebagai berikut: Dengan mengambil akar kuadrat dari n Anda membagi dua digit yang diperlukan untuk representasi biner dari n . Jadi input Anda perlu w = log n bit dan Anda membagi ukuran kata dengan 2 untuk setiap tingkat rekursi. Karenanya Anda berhenti setelah log w = log log n langkah. HAI(catatancatatann)nnw=catatanncatatanw=catatancatatann
A.Schulz

10

Dalam komentar Anda, Anda menyebutkan bahwa Anda mencoba substitusi tetapi macet. Inilah derivasi yang berfungsi. Motivasinya adalah kami ingin menyingkirkan pengganda di sisi kanan, meninggalkan kita dengan sesuatu yang terlihat sepertiU(n)=U(n. Dalam hal ini, semuanya berjalan dengan sangat baik:U(n)=U(n)+something

Sekarang mari kita menyederhanakan hal-hal lebih jauh, dengan mengubah ke log (karenalg

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
). Biarkan S ( m )lgn=(1/2)lgn Aha! Ini adalah pengulangan yang terkenal dengan solusi S(m)=Θ(lgm) Kembali keT(
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
S(m)=Θ(lgm)
, kita kemudian memiliki, dengan n = 2 m (dan m = lg n ), T ( n )T()n=2mm=lgn Jadi T ( n ) = Θ ( n
T(n)n=Θ(lglgn)
.T(n)=Θ(nlglgn)

6

m=logn 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 sepertinya hasil edit Anda sedikit berbeda dan Anda juga menjelaskan langkah-langkahnya, mungkin Anda bisa menjawabnya sendiri.
Evil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.