Definisi Pohon Seimbang

100

Saya hanya ingin tahu apakah seseorang dapat menjelaskan definisi pohon seimbang bagi saya. Saya berpendapat bahwa "sebuah pohon seimbang jika setiap sub-pohon seimbang dan tinggi dari dua sub-pohon berbeda paling banyak satu.

Saya minta maaf jika ini pertanyaan bodoh, tetapi apakah definisi ini berlaku untuk setiap simpul sampai ke daun pohon atau hanya ke sub-pohon kiri dan kanan langsung dari akar? Saya kira cara lain untuk membingkai ini adalah, apakah mungkin simpul internal pohon menjadi tidak seimbang dan seluruh pohon tetap seimbang?

Mark Soric
sumber
6
Hanya ingin menambahkan bahwa kita sedang berbicara tentang Comp. Definisi sains dari subpohon: Sebuah subpohon dari pohon T adalah pohon yang terdiri dari simpul di T dan semua keturunannya di T. Untuk definisi matematika biasa (subgraf dari pohon yang merupakan pohon) itu tidak benar .
TT_

Jawaban:

123

Batasan umumnya diterapkan secara rekursif ke setiap subpohon. Artinya, pohon hanya seimbang jika:

  1. Tinggi subpohon kiri dan kanan berbeda paling banyak satu, DAN
  2. Subpohon kiri seimbang, DAN
  3. Subpohon kanan seimbang

Menurut ini, pohon berikutnya seimbang:

     A
   /   \
  B     C  
 /     / \  
D     E   F  
     /  
    G  

Yang berikutnya tidak seimbang karena anak-anak pohon C berbeda 2 tingginya:

     A
   /   \
  B     C   <-- difference = 2
 /     /
D     E  
     /  
    G  

Meskipun demikian, batasan spesifik dari poin pertama bergantung pada jenis pohonnya. Yang tercantum di atas adalah tipikal pohon AVL .

Pohon merah-hitam , misalnya, memaksakan pembatas yang lebih lembut.

comocomocomocomo.dll
sumber
50

Ada beberapa cara untuk mendefinisikan "Seimbang". Tujuan utamanya adalah untuk menjaga kedalaman semua node O(log(n)).

Tampak bagi saya bahwa kondisi keseimbangan yang Anda bicarakan adalah untuk pohon AVL .
Berikut adalah definisi formal dari kondisi keseimbangan pohon AVL :

Untuk setiap node dalam AVL, tinggi subpohon kirinya berbeda paling banyak 1 dari tinggi subpohon kanannya.

Pertanyaan selanjutnya, apa itu " tinggi "?

" Tinggi " dari node dalam pohon biner adalah panjang jalur terpanjang dari node tersebut ke daun.

Ada satu kasus aneh tapi umum:

Orang mendefinisikan tinggi pohon kosong menjadi (-1).

Misalnya, anak kiri root adalah null:

              A  (Height = 2)
           /     \
(height =-1)       B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
                    \
                     C (Height = 0)

Dua contoh lagi untuk ditentukan:

Ya, Contoh Pohon Seimbang :

        A (h=3)
     /     \
 B(h=1)     C (h=2)        
/          /   \
D (h=0)  E(h=0)  F (h=1)
               /
              G (h=0)

Tidak, Bukan Contoh Pohon yang Seimbang :

        A (h=3)
     /     \
 B(h=0)     C (h=2)        <-- Unbalanced: 2-0 =2 > 1
           /   \
        E(h=1)  F (h=0)
        /     \
      H (h=0)   G (h=0)      
CherylG
sumber
1
Perhatikan bahwa definisi ini memungkinkan subpohon yang tidak seimbang dari pohon yang seimbang. (misalnya, perluas contoh pohon seimbang di atas dengan menambahkan satu anak ke D dan satu lagi ke G) Apakah ini dimaksudkan?
gen
2
Tidak, tidak. " Untuk setiap node di AVL , tinggi subpohon kiri berbeda paling banyak 1 dari tinggi subpohon kanannya." Jika Anda menambahkan anak ke D, maka B tidak akan mengikuti aturan di atas. Karenanya, pohon itu tidak akan menjadi BBT.
John Red
1
jawaban Anda sangat bertele-tele dan tidak akurat
Marwen Trabelsi
9

Tidak ada perbedaan antara kedua hal ini. Pikirkan tentang itu.

Mari kita ambil definisi yang lebih sederhana, "Bilangan positif adalah meskipun itu nol atau angka minus dua itu genap." Apakah ini mengatakan 8 adalah meskipun 6 genap? Atau apakah ini mengatakan 8 adalah bahkan jika 6, 4, 2, dan 0 adalah genap?

Tidak ada bedanya. Jika dikatakan 8 bahkan jika 6 genap, ia juga mengatakan 6 bahkan jika 4 genap. Dan demikian juga dikatakan 4 adalah meskipun 2 genap. Dan dengan demikian dikatakan 2 bahkan jika 0 genap. Jadi jika dikatakan 8 adalah meskipun 6 genap, itu (secara tidak langsung) mengatakan 8 adalah bahkan jika 6, 4, 2, dan 0 adalah genap.

Di sini sama saja. Setiap sub-pohon tidak langsung dapat ditemukan oleh rantai sub-pohon langsung. Jadi meskipun hanya berlaku langsung ke sub-pohon langsung, itu masih berlaku secara tidak langsung ke semua sub-pohon (dan juga semua node).

David Schwartz
sumber
1
Misalkan nilai dari root adalah 15. Di sebelah kanan, saya punya 16,17,18. Di kiri saya punya 14,13,12. Apakah itu pohon yang seimbang? Ketinggian setiap sub-pohon dari node berada dalam satu. Tapi ambil simpul pertama di bawah akar ke kanan, tidak ada anak kiri tetapi tinggi anak kanannya 2. Jadi simpul itu tidak seimbang. Apakah itu benar?
Mark Soric
1
Benar. Dengan demikian pohon tersebut tidak seimbang.
David Schwartz
1
Jadi agar pohon menjadi seimbang - setiap simpul harus seimbang. Kecantikan - Terima kasih banyak atas bantuan Anda.
Mark Soric
1
@DavidSchwartz mengapa kita mencoba menggunakan pohon yang seimbang? Mengapa kita peduli jika pohon itu seimbang atau tidak?
Dejell
3
Sejauh ini, ini adalah jawaban paling kompleks yang pernah saya lihat di SO - untuk pertanyaan apa pun. Maaf untuk mengatakan ini.
Trevor
4

Pohon seimbang adalah pohon yang tingginya berurutan menurut log (jumlah elemen dalam pohon).

height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree

Definisi yang diberikan "satu pohon seimbang dari setiap sub-pohon seimbang dan tinggi dari dua sub-pohon berbeda paling banyak satu" diikuti oleh pohon AVL.

Karena, pohon AVL seimbang tetapi tidak semua pohon yang seimbang adalah pohon AVL, pohon yang seimbang tidak memegang definisi ini dan simpul internal dapat menjadi tidak seimbang di dalamnya. Namun, pohon AVL membutuhkan semua node internal untuk diseimbangkan.

div
sumber
3

Tujuan pohon yang seimbang adalah mencapai daun pada lintasan minimum (ketinggian min). Derajat pohon adalah jumlah cabang dikurangi 1. Pohon yang seimbang mungkin bukan Biner.

Mohamed ROMDANE
sumber
0
  1. Tinggi sebuah simpul pada pohon adalah panjang jalur terpanjang dari simpul tersebut ke bawah ke daun, menghitung simpul awal dan akhir dari jalur tersebut.
  2. Sebuah simpul pada sebuah pohon memiliki keseimbangan tinggi jika tinggi dari subpohonnya berbeda tidak lebih dari 1.
  3. Sebuah pohon memiliki keseimbangan tinggi jika semua simpulnya memiliki keseimbangan tinggi.
John Paul
sumber