Berapa tinggi rata-rata pohon biner?

10

Apakah ada definisi formal tentang tinggi rata-rata pohon biner?

Saya punya pertanyaan tutorial tentang menemukan ketinggian rata-rata pohon biner menggunakan dua metode berikut:

  1. Solusi alami mungkin mengambil panjang rata-rata dari semua jalur yang mungkin dari akar ke daun, yaitu

    avh1(T)=1# pergi Tv daun Tkedalaman(v) .

  2. Pilihan lain adalah untuk mendefinisikannya secara rekursif, yaitu tinggi rata-rata untuk sebuah simpul adalah rata-rata di atas ketinggian rata-rata dari sub pohon ditambah satu, yaitu

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    dengan untuk daun dan untuk slot kosong.l avh 2 ( _ ) = 0avh2(l)=1lavh2(_)=0

Berdasarkan pemahaman saya saat ini, misalnya tinggi rata-rata pohonT

    1    
   / \
  2   3
 /
4

is dengan metode kedua, yaitu menggunakan rekursi.avh2(T)=1.25

Namun, saya masih tidak mengerti bagaimana melakukan yang pertama. tidak benar.avh1(T)=(1+2)/2=1.5

Abadi
sumber
1
Bisakah Anda memberikan beberapa konteks? Tidak ada definisi matematis yang "benar"; Anda dapat mendefinisikan "tinggi rata-rata pohon biner" sesuka Anda. (Rata-rata dari apa yang selama apa distribusi ?) Tapi definisi yang berbeda akan lebih atau kurang berguna untuk aplikasi yang berbeda.
JeffE
@ Jeff JEffE "Tidak segera jelas bagaimana menentukan tinggi rata-rata pohon biner. Mungkin solusi yang paling alami mungkin memiliki panjang rata-rata jalur yang mungkin dari akar ke daun. Solusi yang lebih sederhana (bahkan mungkin sederhana) adalah untuk mengatakan bahwa tinggi rata-rata untuk sebuah simpul adalah rata-rata di atas ketinggian rata-rata sub pohon ditambah satu. Anda merasa lebih mudah untuk membuat kode alternatif ini. Bisakah Anda memberikan contoh untuk menunjukkan perbedaannya? "
Abadi
Saya mencoba membuat posting Anda lebih jelas dengan memberikan definisi yang tepat dari kedua varian. Harap periksa bahwa saya menafsirkan teks Anda dengan benar. Secara khusus, Anda kehilangan jangkar untuk varian kedua; apakah Anda mengambil daun dengan tinggi satu atau nol membuat perbedaan.
Raphael

Jawaban:

3

Tidak ada alasan untuk percaya bahwa kedua definisi tersebut menggambarkan ukuran yang sama. Anda dapat menulis secara rekursif juga:avh1

avh1(N(l,r))=lv(l)(Sebuahvh1(l)+1)+lv(r)(Sebuahvh1(r)+1)lv(l)+lv(r)

dengan untuk daun l . Jika Anda tidak percaya bahwa ini sama, buka definisi avh 1 di sebelah kanan, atau lakukan bukti induksi.avh1(l)=0lavh1

Sekarang kita melihat bahwa bekerja sangat berbeda dari avh 2 . Sementara avh 2 menimbang ketinggian rekursif dari simpul anak - anak secara merata (menambah dan membaginya menjadi dua), avh 1 menimbang mereka sesuai dengan jumlah daun yang dikandungnya. Jadi mereka sama (modulo jangkar) untuk pohon-pohon yang seimbang daun, yang seimbang dalam arti bahwa pohon saudara memiliki banyak daun yang sama. Jika Anda menyederhanakan bentuk rekursif avh 1 dengan lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)ini segera terlihat. Namun, pada pohon yang tidak seimbang, mereka berbeda.

Perhitungan Anda memang benar (diberikan definisi Anda); Perhatikan bahwa pohon contoh tidak seimbang.

Raphael
sumber
Apakah itu mungkin untuk menunjukkan kode implementasi untuk , saya tidak cukup mengerti bagaimana melakukannya secara rekursifavh1
Abadi
avh1
Maksud saya kode implementasi menggunakan rekursi
Timeless
@null: Anda dapat menyalin rumus secara harfiah , asalkan Anda memasukkan casing dasar. Cara melakukannya tergantung pada bahasa pemrograman dan implementasi pohon Anda. Saya sarankan Anda mengambil perulangan ke Stack Overflow jika implementasi adalah rintangan bagi Anda.
Raphael
2

Sunting: Jeffe membuat poin bagus dalam komentarnya di atas. Anda mungkin harus membaca "benar vs salah" dalam jawaban berikut sebagai "nyaman / konsisten vs tidak konsisten".

Tampaknya perhitungan kedua Anda salah. Biarkan ketinggian subtree dengan simpul tunggal (yaitu daun) menjadi 0. Kemudian ketinggian root subtree di:

  • tinggi pada 4 adalah 0
  • tinggi pada 3 adalah 0
  • tinggi pada 2 adalah tinggi rata-rata pada 3 + 1 = 0 + 1 = 1
  • tinggi pada 1 adalah rata-rata ketinggian pada 2 dan 3 = (0 + 1) / 2 + 1 = 1,5

Saya pikir Anda melakukan perhitungan pertama dengan benar, dan 1,5 adalah jawaban yang tepat.

Joe
sumber
idenya adalah nol simpul dengan tinggi -1, berdasarkan pada pendekatan ke-2, tinggi rata-rata sebuah simpul adalah rata-rata dari subpohon ditambah 1, tinggi rata-rata simpul 4 adalah ((-1) + (- 1)) / 2 + 1 = 0 , tinggi rata-rata simpul 2 adalah (0 + (- 1)) / 2 + 1 = 0,5, dan tinggi rata-rata root adalah 1,25.
Abadi
@null Anda dapat mendefinisikannya seperti itu jika Anda bersikeras, tetapi kemudian dua definisi tidak akan konsisten.
Joe