Memecahkan hubungan perulangan dengan dua panggilan rekursif


10

Saya sedang mempelajari runtime quicksort kasus terburuk dengan syarat bahwa ia tidak akan pernah melakukan partisi yang sangat tidak seimbang untuk berbagai definisi sangat .

Untuk melakukan ini, saya bertanya pada diri sendiri pertanyaan apa runtime T(n,p) akan terjadi dalam kasus quicksort selalu terjadi pada partisi di sebagian kecil 0<p12 sehinggap(n1)berada di partisi kiri dan(1p)(n1)berada di partisi kanan (menyisakan1elemen, pivot, di tengah).

Seharusnya tidak sulit untuk melihat bahwa T(n,p) memberikan batas atas untuk kasus terburuk di mana p adalah partisi yang dibiarkan tidak seimbang secara maksimal, karena setiap partisi dengan fraksi >p akan lebih seimbang dan memiliki runtime yang lebih kecil, dan fraksi apa pun <p tidak diizinkan.

Sudah jelas bahwa T(n,12)adalah kasus terbaik danT(n,0)adalah kasus terburuk quicksort. Keduanya memiliki hubungan rekurensi yang mudah ditemukan dalam sumber daya pendidikan apa pun. Tapi saya tidak tahu bagaimana mempelajariT(n,p)secara umum. Hubungan yang jelas adalah:

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

Di sini saya macet. Saya sudah mencoba mencari di sekitar, tetapi semua literatur yang saya bisa mengerti tentang algoritma divide and conquer mengambil "divide" secara harfiah dan "menipu" analisis menggunakan fakta bahwa partisi selalu dalam ukuran yang sama, menggabungkan istilah menjadi satu kali konstan.

Saya tidak tahu bagaimana menangani dua panggilan rekursif, dan saya tidak tahu apakah aman untuk menghapus pembulatan. Apakah ini mungkin diselesaikan secara analitis, dan jika ya, bagaimana?

PS: Saya tidak tertarik pada asimptotik (yang mudah ditunjukkan untuk p konstan ). Saya tertarik pada seberapa cepat quicksort menjadi ketika p semakin kecil, misalnya saya tertarik pada rasio T ( n , 0,25 )Θ(nlogn)pp .T(n,0.25)T(n,0.5)

PPS: Sebagai seorang mahasiswa sarjana, saya minta maaf jika saya telah membuat hal-hal yang nontrivialities terlalu panjang atau tidak jelas. Dan sementara saya tidak tahu apakah ini dipandang rendah seperti situs SE lainnya, saya akan perhatikan bahwa ini adalah kepentingan pribadi, bukan pekerjaan rumah.

Jawaban:


9

Seperti yang Anda sebutkan, teorema Akra-Bazzi menunjukkan bahwa solusi untuk pengulangan T(n,p) adalah untuk semua p ( 0 , 1 ) . Namun, ini tidak mengungkapkan sifat ketergantungan pada hal . Untuk menentukan yang terakhir, kita bisa menggunakan pendekatan pohon rekursi.O(nlogn)p(0,1)p

Pada akar pohon rekursi adalah interval . Dua anaknya adalah interval { 1 , ... , p n }{1,n}{1,,pn} dan , yang panjang totalnya lagi n . Masing-masing node memiliki dua anak (dengan asumsi n cukup besar), dan seterusnya. Untuk kesederhanaan kita mengabaikan kesalahan pembulatan, yaitu, kita menganggap bahwa p n{pn+1,,n}nnpnadalah bilangan bulat; ini hanya masalah teknis, dan saya tidak akan mengkhawatirkannya. Kami menghentikan proses setiap kali satu simpul memiliki panjang paling banyak . Kompleksitas algoritma sebanding dengan total panjang interval di pohon. Ketika p 1 / 2 , yang daun (node di mana kita menghentikan proses) memiliki kedalaman yang berbeda, dan yang membuat lebih sulit untuk menentukan kompleksitas keseluruhan.1p1/2

Kita dapat memperoleh batas atas sederhana dengan mencatat bahwa pohon memiliki paling banyak tingkat : setiap node setidaknya merupakan faktor 1 - p lebih kecil dari induknya. Sama seperti dalam analisis untuk p = 1 / 2 , total panjang interval di tingkat manapun adalah paling n , dan kami memperoleh batas ataslog1p(1/n)1pp=1/2n pada waktu berjalan. Sejak log 1 -O(nlog1p(1/n)) danlog(1-p ) - 1 =-log(1-p)=p±O( p 2 )untukpkecil, kita dapat menulis ini sebagaiO(nlogn / p).log1p(1/n)=logn/log(1p)1log(1p)1=log(1p)=p±O(p2)pO(nlogn/p)

Berikut ini perhitungan yang lebih akurat. Pertimbangkan level . Misalkan kita tidak menghentikan proses setelah mencapai interval kecil. Kita dapat menghasilkan simpul acak dengan mengambil langkah t , di mana masing-masing kita ke kiri (katakanlah) dengan probabilitas p dan kanan (katakanlah) dengan probabilitas 1 - p . Setiap kali kita mengambil langkah ke kiri log dari panjang interval berkurang dengan - log p , dan setiap kali kita mengambil langkah yang tepat ia mengurangi by - log ( 1 - p ) . Sebuah vertex berada di pohon aktual dari log yang panjangnya berkurang paling banyak log nttp1plogplog(1p)logn. Berat total interval pada level dari pohon adalah probabilitas tepat bahwa suatu simpul yang dihasilkan menurut proses ini sesuai dengan penurunan paling banyak log n . Yaitu, jika D adalah distribusi yang sama dengan - log p dengan probabilitas p dan to - log ( 1 - p ) dengan probabilitas 1 - p , dan X 1 , ... , X tD independen, maka total bobot dari level t adalahtlognDlogpplog(1p)1pX1,,XtDt . Untuk t super-konstan, variabel acak X 1 + + X t kira-kira terdistribusi normal dengan rata-rata [ - p log p - ( 1 - p )Pr[X1++Xtlogn]tX1++Xt dan varians linier dalam t , jadi untuk tmemuaskan[plogp(1p)log(1p)]ttt , katakanlah, probabilitas akan sangat dekat dengan 1 , sedangkan untuk t memuaskan [ - p log p - ( 1 - p ) log ( 1 - p ) ] t 2 log n , katakanlah, itu akan sangat mendekati nol. Mendefinisikan[plogp(1p)log(1p)]t(logn)/21t[plogp(1p)log(1p)]t2logn (dikenal sebagai fungsi entropi biner), kami menyimpulkan bahwa waktu berjalan adalah Θ ( n log n / h ( p ) ) (seragam dalam p , seperti n ). Sebagai p 0 kita memiliki h ( p ) - p log ph(p)=plogp(1p)log(1p)Θ(nlogn/h(p))pnp0h(p)plogp, dan perkiraan kami sebelumnya tidak ketat.

Cara lain untuk melihat pada analisis yang sama adalah dengan memiliki urutan yang tak terbatas dari variabel acak independen seperti sebelumnya, dan mendefinisikan menghentikan waktu T untuk menjadi pertama kalinya t sehingga X 1 + + X tlog n . Waktu berjalan kemudian sebanding dengan n E [ T ] . Teorema pembaruan dasar kemudian menyatakan bahwa lim n E [ T ] /X1,X2,TtX1++XtlognnE[T] , menyiratkan bahwa ukuran total interval sama denganlimnE[T]/logn=1/E[D]=1/h(p) . Lebih akurat, untuk setiap p konstan, ukuran total interval adalah ( 1 + α p ( n ) ) n log n / h ) , di mana α(1+o(1))nlogn/h(p)p(1+αp(n))nlogn/h(p) . Konvergensi dalam teorema pembaruan elementer adalah eksponensial dalam parameter waktu - log n dalam kasus kami - jadi harus polinomial dalam n , yaitu, α p ( n ) = O ( n - C p ) . Konvergensi juga mungkin seragam untuk p ( δ , 1 - δ ) untuk δ > 0 .αp(n)=o(n)lognnαp(n)=O(nCp)p(δ,1δ)δ>0


Ringkasnya, panjang total interval dalam pohon rekursi, yang sebanding dengan waktu berjalan, adalah dari bentuk berikut untuk setiap : T ( n , p ) = ( 1 + o ( 1 ) ) n log npmanalogndanh(p)=-plogp-(1-p)log(1-p)dibawa ke basis yang sama, dano(1)adalah fungsi tergantung padapdan cenderung0dengann.

T(n,p)=(1+o(1))nlognh(p),
lognh(p)=plogp(1p)log(1p)o(1)p0n

Selain itu, mungkin benar bahwa untuk dan p ( δ , 1 - δ ) memang benar bahwa total panjang interval adalah dalam bentuk T ( n , p ) = ( 1 + O ( n - C δ ) ) n log nδ>0p(δ,1δ)manaCδ>0dan konstanta O besar tersembunyi hanya bergantung padaδ. Secara khusus, harus demikian halnya untuk semua konstantap1,p2, limnT(n,p1)

T(n,p)=(1+O(nCδ))nlognh(p),
Cδ>0δp1,p2 dan konvergensi cepat secara polinomi.
limnT(n,p1)T(n,p2)=h(p2)h(p1),

Θh(p)Θn=100000000000000T(n,0.1)/T(n,0.5)

Θpc,CpNpnNpcncatatann/h(hal)T(n,hal)Cncatatann/h(hal). Anda mungkin bisa mendapatkan pernyataan formulir yang lebih kuatT(n,p)=(1+o(1))Cnlogn/h(p) for each fixed p, where the little o is with respect to n (but could depend on p); C should not depend on p.
Yuval Filmus

Convergence to the limit depends on logn, so you might need logn to be large in order to get a really good approximation. On the other hand, a relative error of 0.03 doesn't sound so large. You can try to fix n and plot the running time as a function of p, comparing it to 1/h(p).
Yuval Filmus

Oh I'm sorry, I didn't mean a relative error of 0.03, but an absolute one (2.13222 vs 2.10339). Plotting T(n,p) as a function of p, relative to 1/h(p) gave a relative difference of 4%, with T(1011,0.05)h(0.05) being 96% of T(1011,0.4)h(0.4).
orlp

1
Super-constant is a function tending to infinity with respect to the relevant variable (in this case n). It is the same as ω(1).
Yuval Filmus
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.