Di kelas Java saya, kami belajar tentang kompleksitas berbagai jenis koleksi.
Segera kita akan membahas pohon biner, yang telah saya baca. Negara-negara buku yang tinggi minimal pohon biner adalah , tetapi tidak menawarkan penjelasan lebih lanjut.
Adakah yang bisa menjelaskan mengapa?
data-structures
binary-trees
discrete-mathematics
trees
CodyBugstein
sumber
sumber
Jawaban:
Pohon biner memiliki 1 atau 2 anak di simpul non-daun dan 0 simpul di simpul daun. Biarkan ada node di pohon dan kita harus mengaturnya sedemikian rupa sehingga mereka masih membentuk pohon biner yang valid.n
Tanpa membuktikan, saya menyatakan bahwa untuk memaksimalkan ketinggian, diberikan node harus diatur secara linier, yaitu setiap node non-daun harus hanya memiliki satu anak:
Di sini, rumus untuk menghitung hubungan ketinggian dalam hal jumlah node adalah lurus ke depan. Jika adalah ketinggian pohon, maka h = n - 1 .h h=n−1
Sekarang, jika kita mencoba untuk membangun pohon biner dari node dengan tinggi minimum (selalu dapat direduksi menjadi pohon biner lengkap), kita harus mengemas sebanyak mungkin simpul di tingkat atas, sebelum pindah ke tingkat berikutnya. Jadi, pohon itu berbentuk pohon berikut:n
Mari kita mulai dengan kasus tertentu, .n=2m−1
Kita tahu itu,
Juga, mudah untuk membuktikan bahwa, level yang dapat memiliki paling banyak 2 i node di dalamnya.i 2saya
Dengan menggunakan hasil ini dalam jumlah di atas, kami menemukan bahwa untuk setiap level , dari 0 hingga m , terdapat istilah 2 i - 1 yang sesuai dalam perluasan 2 m - 1 . Ini menyiratkan, bahwa pohon biner lengkap 2 m - 1 node diisi penuh dan memiliki tinggi, h ( 2 m - 1 ) = m - 1 , di mana h ( n ) = tinggi pohon biner lengkap dengan n node.i 0 m 2i−1 2m−1 2m- 1 h ( 2m- 1 ) = m - 1 h ( n ) = n
Dengan menggunakan hasil ini, , karena pohon dengan 2 m - 1 node terisi penuh dan dengan demikian pohon dengan ( 2 m - 1 ) + 1 = 2 m node harus mengakomodasi node tambahan di level berikutnya m , menambah tinggi 1 dari m - 1 ke m .h ( 2m) = m 2m- 1 ( 2m- 1 ) + 1 = 2m m m - 1 m
Sampai sekarang kita telah membuktikan, h ( 2 m + 1 ) = m + 1 dan juga, h ( 2 m + 1 - 1 ) = m
Jadi, m ≤ h ( n ) < m + 1∀ n ∈ Z , 2m≤ n < 2m + 1
Tetapi, dengan mengambil log (basis 2) di kedua sisi, m = ⌊ log 2 ( n ) ⌋
Jadi, h ( n ) = m = ⌊ log 2 ( n ) ⌋∀ n , n ∈ [ 2m, 2m + 1)
Dan kita dapat menggeneralisasi hasil ini menggunakan induksi.∀n∈Z
sumber
sumber
Untuk menjaga ketinggian minimum, mudah untuk melihat bahwa kita perlu mengisi semua level kecuali mungkin yang terakhir. Mengapa? jika tidak, kita bisa memindahkan node level terakhir ke slot kosong di level atas.
Sekarang, bayangkan saya memiliki sejumlah kacang yang tidak ditentukan dan saya beri Anda satu kacang sekaligus dan meminta Anda untuk membangun pohon biner dengan ketinggian seminimal mungkin. Saya mungkin kehabisan kacang pada saat Anda mengisi tingkat terakhir sepenuhnya atau setidaknya memiliki satu kacang di tingkat terakhir. Katakanlah, Anda memiliki tinggi pohon h pada saat ini.
sumber