คำจำกัดความของต้นไม้ที่สมดุล


104

ฉันแค่สงสัยว่าอาจมีใครสามารถอธิบายคำจำกัดความของต้นไม้ที่สมดุลให้ฉันได้ ฉันมี "ต้นไม้มีความสมดุลถ้าต้นไม้ย่อยแต่ละต้นมีความสมดุลและความสูงของต้นไม้ย่อยทั้งสองต่างกันอย่างมาก

ฉันขออภัยหากนี่เป็นคำถามที่โง่ แต่คำจำกัดความนี้ใช้กับทุกโหนดจนถึงใบไม้ของต้นไม้หรือเฉพาะกับต้นไม้ย่อยทางซ้ายและขวาทันทีจากราก? ฉันเดาว่าวิธีอื่นในการจัดกรอบสิ่งนี้เป็นไปได้หรือไม่ที่โหนดภายในของต้นไม้จะไม่สมดุลและต้นไม้ทั้งต้นจะยังคงสมดุล


6
แค่อยากจะเพิ่มเติมว่าเรากำลังพูดถึงคอมพ์ คำจำกัดความทางวิทยาศาสตร์ของทรีย่อย: ทรีย่อยของต้นไม้ T คือต้นไม้ที่ประกอบด้วยโหนดใน T และลูกหลานทั้งหมดใน T สำหรับคำจำกัดความทางคณิตศาสตร์ปกติ (กราฟย่อยของต้นไม้ซึ่งเป็นต้นไม้) มันไม่เป็นความจริง .
TT_

คำตอบ:


125

โดยทั่วไปข้อ จำกัด จะถูกนำไปใช้ซ้ำกับทรีย่อยทุกรายการ นั่นคือต้นไม้จะสมดุลก็ต่อเมื่อ:

  1. ความสูงของต้นไม้ย่อยด้านซ้ายและด้านขวาแตกต่างกันอย่างน้อยหนึ่งรายการ AND
  2. แผนผังย่อยด้านซ้ายมีความสมดุลและ
  3. แผนผังย่อยด้านขวามีความสมดุล

ตามนี้ต้นไม้ถัดไปจึงสมดุล:

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

อันถัดไปไม่สมดุลเพราะต้นไม้ย่อยของ C แตกต่างกันด้วยความสูง 2:

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

ที่กล่าวว่าข้อ จำกัด เฉพาะของจุดแรกขึ้นอยู่กับชนิดของต้นไม้ อย่างใดอย่างหนึ่งดังกล่าวข้างต้นเป็นเรื่องปกติสำหรับต้นไม้ AVL

ตัวอย่างเช่นต้นไม้สีแดงดำมีข้อ จำกัด ที่นุ่มนวลกว่า


53

มีหลายวิธีในการกำหนด "สมดุล" O(log(n))เป้าหมายหลักคือการรักษาระดับความลึกของโหนดทั้งหมดจะเป็น

ปรากฏให้ฉันว่าสภาพความสมดุลที่คุณกำลังพูดถึงสำหรับต้นไม้ AVL
นี่คือคำจำกัดความอย่างเป็นทางการของสภาพสมดุลของต้นไม้ AVL :

สำหรับโหนดใด ๆ ใน AVL ความสูงของทรีย่อยด้านซ้ายจะแตกต่างกันมากที่สุด 1 จากความสูงของทรีย่อยด้านขวา

คำถามต่อไป " ความสูง " คืออะไร?

" ความสูง " ของโหนดในต้นไม้ไบนารีคือความยาวของเส้นทางที่ยาวที่สุดจากโหนดนั้นไปยังใบไม้

มีกรณีแปลก ๆ แต่พบได้บ่อย:

(-1)คนกำหนดความสูงของต้นไม้ที่ว่างเปล่าให้เป็น

ตัวอย่างเช่นลูกด้านซ้ายของรูทคือnull:

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

อีกสองตัวอย่างเพื่อพิจารณา:

ใช่ตัวอย่างต้นไม้ที่สมดุล :

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

ไม่ใช่ไม่ใช่ต้นไม้ที่สมดุลตัวอย่าง:

        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)      

1
โปรดทราบว่าคำจำกัดความนี้ช่วยให้ต้นไม้ย่อยที่สมดุลไม่สมดุลกัน (เช่นขยายตัวอย่างต้นไม้สมดุลด้านบนโดยการเพิ่มลูกใน D และอีกอันหนึ่งเป็น G) นี่ตั้งใจหรือไม่?
Gen

2
ไม่มันไม่ " สำหรับโหนดใด ๆ ใน AVLความสูงของทรีย่อยด้านซ้ายจะแตกต่างกันมากที่สุด 1 จากความสูงของทรีย่อยด้านขวา" หากคุณเพิ่มลูกใน D B จะไม่เป็นไปตามกฎข้างต้น ดังนั้นต้นไม้จะไม่เป็น BBT
John Red

1
คำตอบของคุณนั้นละเอียดมากและไม่ถูกต้อง
Marwen Trabelsi

9

ไม่มีความแตกต่างระหว่างสองสิ่งนี้ ลองคิดดูสิ

ลองใช้คำจำกัดความที่ง่ายกว่านี้ "จำนวนบวกคือแม้ว่ามันจะเป็นศูนย์หรือจำนวนนั้นลบสองก็เป็นคู่" นี่บอกว่า 8 คือแม้ว่า 6 จะเป็นคู่หรือไม่? หรือนี่บอกว่า 8 คือ 6, 4, 2 และ 0 เป็นคู่?

ไม่มีความแตกต่าง ถ้ามันบอกว่า 8 คือแม้ว่า 6 จะเป็นคู่ก็ยังบอกว่า 6 คือแม้ว่า 4 จะเป็นคู่ และมันยังบอกว่า 4 คือแม้ว่า 2 จะเป็นคู่ ดังนั้นมันจึงบอกว่า 2 คือแม้ว่า 0 จะเป็นคู่ ดังนั้นถ้ามันบอกว่า 8 คือแม้ว่า 6 จะเป็นคู่มัน (ทางอ้อม) จะบอกว่า 8 คือแม้ว่า 6, 4, 2 และ 0 จะเป็นคู่

มันก็เหมือนกันที่นี่ แผนผังย่อยทางอ้อมใด ๆ สามารถพบได้โดยห่วงโซ่ของแผนผังย่อยโดยตรง ดังนั้นแม้ว่าจะใช้โดยตรงกับต้นไม้ย่อยโดยตรง แต่ก็ยังใช้ทางอ้อมกับต้นไม้ย่อยทั้งหมด (และโหนดทั้งหมด)


1
สมมติว่าค่ารูทเท่ากับ 15 ลงไปทางขวาฉันมี 16,17,18 ทางซ้ายฉันมี 14,13,12 เป็นต้นไม้ที่สมดุลหรือไม่? ความสูงของแต่ละทรีย่อยนอกโหนดอยู่ภายในหนึ่ง แต่นำโหนดแรกที่อยู่ใต้รูทไปทางขวามันไม่มีลูกทางซ้าย แต่ความสูงของลูกทางขวาคือ 2 ดังนั้นโหนดนั้นจึงไม่สมดุล ถูกต้องหรือไม่
Mark Soric

1
แก้ไข. ต้นไม้จึงไม่สมดุล
David Schwartz

1
ดังนั้นเพื่อให้ต้นไม้มีความสมดุล - ทุกโหนดจะต้องมีความสมดุล ความงาม - ขอบคุณมากสำหรับความช่วยเหลือ
Mark Soric

1
@DavidSchwartz ทำไมเราถึงพยายามใช้ต้นไม้ที่สมดุล? ทำไมเราถึงสนใจว่าต้นไม้มีความสมดุลหรือไม่?
Dejell

3
นี่คือคำตอบที่ซับซ้อนที่สุดที่ฉันเคยเห็นใน SO - สำหรับคำถามใด ๆ ขออภัยที่ต้องพูดแบบนี้
Trevor

4

ต้นไม้ที่สมดุลคือต้นไม้ที่มีความสูงตามลำดับของท่อนไม้ (จำนวนองค์ประกอบในต้นไม้)

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

คำจำกัดความที่ให้ไว้ว่า "ต้นไม้มีความสมดุลของต้นไม้ย่อยแต่ละต้นมีความสมดุลและความสูงของต้นไม้ย่อยทั้งสองต้นแตกต่างกันอย่างน้อย 1 ต้น" ตามด้วยต้นไม้ AVL

เนื่องจากต้นไม้ AVL มีความสมดุล แต่ไม่ใช่ต้นไม้ที่สมดุลทั้งหมดเป็นต้นไม้ AVL ต้นไม้ที่สมดุลจะไม่ถือคำจำกัดความนี้และโหนดภายในอาจไม่สมดุลในต้นไม้เหล่านี้ อย่างไรก็ตามต้นไม้ AVL ต้องการให้โหนดภายในทั้งหมดมีความสมดุล


3

จุดมุ่งหมายของต้นไม้ที่สมดุลคือการเข้าถึงใบไม้ในระยะทางที่น้อยที่สุด องศาของต้นไม้คือจำนวนกิ่งลบ 1 ต้นไม้ที่สมดุลอาจไม่ใช่ไบนารี


0
  1. ความสูงของโหนดในต้นไม้คือความยาวของเส้นทางที่ยาวที่สุดจากโหนดนั้นลงไปจนถึงใบไม้โดยนับทั้งจุดเริ่มต้นและจุดสิ้นสุดของเส้นทาง
  2. โหนดในต้นไม้มีความสมดุลกับความสูงหากความสูงของต้นไม้ย่อยแตกต่างกันไม่เกิน 1
  3. ต้นไม้มีความสมดุลของความสูงหากโหนดทั้งหมดมีความสูงสมดุล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.