Kesalahan dalam penggunaan notasi asimptotik

10

Saya mencoba memahami apa yang salah dengan bukti pengulangan berikut

T(n)2(cn

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

Dokumentasi mengatakan itu salah karena hipotesis induktif bahwa Apa yang saya lewatkan?

T(n)cn
Erb
sumber
2
Perulangan bentuk ini juga dapat diselesaikan dengan menggunakan teorema Master .
Juho
2
@Ran: Saya tidak berpikir master-teorema adalah tag yang sesuai untuk pertanyaan ini. Pertanyaannya bukan tentang bagaimana menyelesaikannya, tetapi untuk menunjukkan kekeliruan dalam argumen tertentu. Selain itu, master-teorema mungkin terlalu spesifik, dan mungkin tidak pantas memiliki tag sendiri. Secara umum, kita harus menandai berdasarkan pertanyaan, bukan jawaban yang mungkin. Misalnya, apakah Anda akan menandai akra-bazzi ini?
Aryabhata
"apa yang salah dengan bukti berikut" - Saya tidak melihat bukti. Sering kali membantu untuk menuliskan bukti yang lengkap (yaitu membuat induksi eksplisit) untuk menemukan kesalahan.
Raphael
Pertanyaan yang lebih umum terkait adalah Memecahkan atau memperkirakan hubungan perulangan untuk urutan angka .
Juho

Jawaban:

12

Katakanlah tujuan akhirnya adalah membuktikan . Anda mulai dengan hipotesis induksi:T(n)=O(n)

i < nT(i)ci untuk semua .saya<n

Dan untuk melengkapi buktinya, Anda harus menunjukkan bahwa juga.T(n)cn

Namun, yang dapat Anda simpulkan adalah , yang tidak membantu untuk melengkapi buktinya; Anda memerlukan satu konstanta untuk (hampir) semua . Oleh karena itu, kami tidak dapat menyimpulkan apa pun dan tidak terbukti.c n T ( n ) = O ( n )T(n)(c+1)ncnT(n)=O(n)

Perhatikan bahwa Anda bingung antara hasil dan proses pembuktian. Dan satu hal lagi, sebenarnya dalam kasus ini sehingga Anda dapat mempertimbangkan hipotesis induksi yang tepat untuk dapat membuktikannya.Θ ( n log n )T(n)Θ(nlogn)

bantalan
sumber
jika kita mengganti c '= c +1, apakah itu akan membuat perubahan?
Erb
@erb: Tidak, tidak akan. Anda harus membuktikan untuk konstanta yang dipilih. Jika mengganti , Anda akhirnya memiliki (atau ) maka hasilnya adalah sama. T ( n ) ( c + 1 ) n T ( n ) ( c + 2 ) nc=c+1T(n)(c+1)nT(n)(c+2)n
pad
8

Anda telah menghilangkan beberapa langkah. Sepertinya Anda berusaha membuktikan dengan induksi bahwa , dan buktinya Anda:T(n)=O(n)

Misalkan untuk k < n . Ini berarti T ( k ) cT(k)=O(k)k<n untuk beberapa c . Kemudian T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckc , jadi T ( n ) = O ( n ) .T(n)=2T(n/2)+n2cn/2+n(c+1)nT(n)=O(n)

Bukti ini salah sejak awal: “ untuk k < n ” tidak masuk akal. Besar oh adalah gagasan asimptotik: T ( k ) = O ( k ) berarti ada beberapa konstanta c dan ambang N sehingga k N , T ( k ) cT(k)=O(k)k<nT(k)=O(k)c . Dan lagi pada akhirnya, Anda tidak dapat menyimpulkan bahwa " T ( n ) = O ( n ) ", karena itu mengatakan sesuatu tentang fungsi T secara keseluruhan dan Anda hanya membuktikan sesuatu tentang nilai T tertentu ( n ) .kN,T(k)ckT(n)=O(n)TT(n)

Anda harus eksplisit tentang apa yang berarti. Jadi mungkin buktinya:O

Misalkan untuk semua k < n . Kemudian 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

Ini tidak membuktikan langkah induktif: Anda mulai dari , dan Anda membuktikan bahwa untuk k = n , T ( k ) ( c + 1 )T(k)ckk=n . Ini adalah batas yang lebih lemah. Lihatlah apa artinya ini: T ( k ) cT(k)(c+1)k berarti bahwa c adalah terikat untuk tingkat pertumbuhan T . Tetapi Anda memiliki tingkat c yang tumbuh ketika k tumbuh. Itu bukan pertumbuhan linear!T(k)ckcTck

Jika Anda melihat lebih dekat, Anda akan melihat bahwa tingkat tumbuh sebesar 1 setiap kali k berlipat ganda. Jadi, secara informal, jika m = 2 p k maka c m = c k + p ; dengan kata lain, c k = c 0 log 2 k .c1km=2pkcm=ck+halck=c0catatan2k

Ini bisa dibuat tepat. Buktikan dengan induksi bahwa untuk , T ( k ) c log 2 ( k ) .k1T(k)ccatatan2(k)

Relasi perulangan adalah tipikal untuk algoritma divide-and-conquer yang membagi data menjadi dua bagian yang sama dalam waktu linier. Algoritma tersebut beroperasi di waktu (bukan O ( n ) ).Θ(nlHaig(n))HAI(n)

Untuk melihat apa hasil yang diharapkan, Anda dapat memeriksa hubungan perulangan terhadap teorema master . Divisi ini dan pekerjaan ekstra yang dilakukan adalah n ; log 2 ( 2 ) = 1 jadi ini adalah kasus kedua yang pertumbuhannya adalah Θ ( n2T(n/2)nlog2(2)=1 .Θ(nlog(n))

Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

Saya memperluas jawaban yang sudah diberikan, mungkin hanya dengan menjelaskan komentar saya lebih terinci.

Karena menebak jelas sulit dan melelahkan, terkadang ada metode yang lebih baik. Salah satu metode tersebut adalah Teorema Master . Pengulangan kami sekarang dalam bentuk , di mana a 1 dan b > 1 adalah konstanta dan f ( n ) suatu fungsi. Perhatikan bahwa dalam kasus kami n / 2 dapat diartikan sebagai n / 2T(n)=aT(n/b)+f(n)a1b>1f(n)n/2n/2. Secara teknis tepat, perulangan kami mungkin tidak terdefinisi dengan baik karena mungkin bukan bilangan bulat. Namun, ini diizinkan karena tidak akan mempengaruhi perilaku pengulangan asimptotik. Karena itu, kita sering merasa nyaman untuk menjatuhkan lantai dan langit-langit. Bukti formal ini agak membosankan, tetapi pembaca yang tertarik dapat menemukannya misalnya dari Cormen et al. buku .n/2

a=2b=2f(n)=Θ(n)nlogba=nlog22=nf(n)=Θ(n)T(n)=Θ(nlogn)

Juho
sumber
n=2k