Bukti bahwa pohon pencarian biner yang dibangun secara acak memiliki tinggi logaritmik

10

Bagaimana Anda membuktikan bahwa ketinggian yang diharapkan dari pohon pencarian biner yang dibangun secara acak dengan node adalah ? Ada bukti dalam CLRS Pengantar Algoritma (bab 12.4), tapi saya tidak memahaminya.O ( log n )nHAI(catatann)

pengguna1675999
sumber
1
Pertanyaan yang mana? Contoh apa? Harap edit dan berikan detail lengkap.
Ran G.
3
Harap hindari menggunakan singkatan (seperti BST) dan anggap sebagian besar dari kita tidak memiliki buku CLRS. Jika Anda dapat menyalin teorema di sini, dan menjelaskan apa yang tidak Anda pahami, Anda akan mendapatkan lebih banyak jawaban.
Ran G.
2
Ini akan tergantung pada bagaimana pohon pencarian biner dibangun. (Bahkan jika hasilnya tidak, buktinya akan.) Beberapa detail lebih lanjut akan berguna.
Peter Shor

Jawaban:

21

Mari kita pikirkan hal ini secara intuitif. Dalam skenario kasus terbaik, pohon itu seimbang sempurna; dalam skenario terburuk, pohon sepenuhnya tidak seimbang:

Pohon pencarian biner seimbang tinggiPohon pencarian biner kasus terburuk

Mulai dari simpul akar , pohon kiri ini memiliki dua kali lebih banyak node pada setiap kedalaman berikutnya, sehingga pohon tersebut memiliki node dan tinggi (yang dalam hal ini 3). Dengan sedikit matematika, , yang artinya memiliki tinggi. Untuk pohon yang sama sekali tidak seimbang, ketinggian pohon hanyalah . Jadi kita punya batasan.n = h i = 0 2 i = 2 h + 1 - 1 h n 2 h + 1 - 1 h log 2 ( n + 1 ) - 1 l o g 2 n O ( log n ) n - 1 O ( n )haln=saya=0h2saya=2h+1-1hn2h+1-1hcatatan2(n+1)-1lHaig2nHAI(catatann)n-1HAI(n)

Jika kami membangun pohon seimbang dari daftar yang diurutkan , kami akan memilih elemen tengah untuk menjadi simpul akar kami. Jika kita sebaliknya membangun pohon secara acak, salah satu dari simpul tersebut kemungkinan besar akan dipetik dan ketinggian pohon kita adalah: Kita tahu bahwa di pohon pencarian biner, subtree kiri hanya boleh berisi kunci kurang dari simpul root. Jadi, jika kita secara acak memilih elemen , subtree kiri memiliki elemen dan subtree kanan memiliki elemen , jadi lebih kompak:n h e i g h t t r e e = 1 + max ( h e i g h t l e f t s u b t r e e , h e i g h t r i g h t s u b t r e e{1,2,...,n}ni t h i - 1 n - i h n = 1 + maks ( h i - 1 , h n - i ) E [ h n ] = 1

hesayaghttree=1+maks(hesayaghtleft skamubtree,hesayaghtrsayaght skamubtree)
sayathsaya-1n-sayahn=1+maks(hsaya-1,hn-saya). Dari sana, masuk akal bahwa jika setiap elemen sama-sama cenderung dipetik, nilai yang diharapkan hanyalah rata-rata dari semua kasus (bukan rata-rata tertimbang). Karenanya:E[hn]=1nsaya=1n[1+maks(hsaya-1,hn-saya)]

Seperti yang saya yakin Anda perhatikan, saya telah sedikit menyimpang dari bagaimana CLRS membuktikan ini, karena CLRS menggunakan dua teknik bukti yang relatif umum yang membingungkan bagi yang belum tahu. Yang pertama adalah menggunakan eksponen (atau logaritma) dari apa yang ingin kita temukan (dalam hal ini tinggi), yang membuat matematika bekerja sedikit lebih bersih; yang kedua adalah menggunakan fungsi indikator (yang saya akan abaikan saja di sini). CLRS mendefinisikan tinggi eksponensial sebagai , sehingga perulangan analognya adalah . Y n = 2 × maks ( Y i - 1 , Y n - i )Yn=2hnYn=2×maks(Ysaya-1,Yn-saya)

Dengan asumsi independensi (bahwa setiap undian elemen (dari elemen yang tersedia) untuk menjadi akar subtree terlepas dari semua undian sebelumnya), kami masih memiliki hubungan: mana saya melakukan dua langkah: (1) memindahkan luar karena itu adalah konstanta dan salah satu sifat penjumlahan adalah , dan (2) memindahkan 2 di luar karena juga merupakan konstanta dan salah satu sifat dari nilai yang diharapkan adalah . Sekarang kita akan mengganti1

E[Yn]=saya=1n1nE[2×maks(Ysaya-1,Yn-saya)]=2nsaya=1nE[maks(Ysaya-1,Yn-saya)]
1nsayacsaya=csayasayaE[Sebuahx]=SebuahE[x]maksberfungsi dengan sesuatu yang lebih besar karena jika tidak menyederhanakan sulit. Jika kita berdebat untuk tidak negatif , : , lalu: sedemikian sehingga langkah terakhir mengikuti dari pengamatan bahwa untuk , dan dan pergi semua cara untuk , dan , jadi setiap istilahXYE[maks(X,Y)]E[maks(X,Y)+min(X,Y)]=E[X]+E[Y]
E[Yn]2nsaya=1n(E[Ysaya-1]+E[Yn-saya])=2nsaya=0n-12E[Ysaya]
saya=1Ysaya-1=Y0Yn-saya=Yn-1saya=nYsaya-1=Yn-1Yn-saya=Y0Y0untuk muncul dua kali, sehingga kami dapat mengganti seluruh penjumlahan dengan yang penjumlahan. Berita baiknya adalah kita memiliki perulangan ; berita buruknya adalah kita tidak jauh dari tempat kita mulai.Yn-1E[Yn]4nsaya=0n-1E[Ysaya]

Pada titik ini, CLRS menarik bukti induksi dari ... repertoar pengalaman matematika, yang termasuk identitas mereka serahkan kepada pengguna untuk dibuktikan. Yang penting tentang pilihan mereka adalah istilah terbesarnya adalah , dan ingat bahwa kita menggunakan tinggi eksponensial sedemikian rupa sehingga . Mungkin seseorang akan berkomentar mengapa binomial khusus ini dipilih. Gagasan umum adalah untuk mengikat dari atas pengulangan kita dengan ekspresi untuk beberapa konstanta .E[Yn]14(n+33)saya=0n-1(saya+33)=(n+34)n3Yn=2hnhn=catatan2n3=3catatan2nHAI(catatann)nkk

Untuk mengakhiri dengan satu liner:

2E[Xn]E[Yn]4nsaya=0n-1E[Ysaya]14(n+33)=(n+3)(n+2)(n+1)24E[hn]=HAI(catatann)
Merbs
sumber
WOW TERIMA KASIH !!!! Meskipun saya tidak tahu tentang nilai yang diharapkan, jenis ini masuk akal. Saya tidak melakukan kursus matematika diam-diam sebelum melakukan algoritma. Saya akan memposting lebih banyak komentar, jika saya ragu. Terima kasih, Merbs.
user1675999
tetapi mengapa sebenarnya tinggi eksponensial kurang dari atau sama dengan binomial yang dipilih? Saya masih tidak mengerti mengapa kita tidak bisa memilih binomial lain dengan istilah terbesar yang berbeda dan melakukan matematika yang persis sama ... mungkin saya bodoh tapi saya tidak bisa melihat mengapa ... dan sampai pada titik ini sebagai bukti masuk akal, maka mereka hanya perlu menarik sesuatu sepenuhnya dari biru dan tanpa penjelasan memberi tahu kami itu "membuktikan" mereka benar ...
Zeks
@Zeks Jadi, kita bisa memilih binomial lain dengan istilah yang lebih besar. Jika istilahnya masih polinomial ( n^k), kesimpulannya sama karena kdijatuhkan dalam notasi O-besar (cara 3 dijatuhkan). Tetapi jika kita menggantikannya dengan sesuatu yang eksponensial ( e^n), itu akan tetap menjadi batas atas yang benar , hanya saja tidak ketat . Kita tahu bahwa ketinggian yang diharapkan setidaknya adalah logaritmik, jadi menentukan bahwa itu adalah paling banyak logaritmik membuatnya ketat.
Merbs
@ Davidvidathan Saya tidak mengerti kekhawatiran Anda - apakah Anda meragukan bahwa 1 / n adalah konstan atau dapat dipindahkan ke luar penjumlahan? Itu, seperti konstanta 2, sebagian besar diambil untuk tujuan ilustrasi, untuk menyederhanakan bukti yang tersisa.
Merbs