ความสูงเฉลี่ยของต้นไม้ไบนารีคืออะไร?


10

มีคำจำกัดความเกี่ยวกับความสูงเฉลี่ยของต้นไม้ไบนารีหรือไม่?

ฉันมีคำถามเกี่ยวกับการสอนเกี่ยวกับการค้นหาความสูงเฉลี่ยของต้นไม้ไบนารีโดยใช้สองวิธีต่อไปนี้:

  1. วิธีแก้ปัญหาตามธรรมชาติอาจจะใช้ความยาวเฉลี่ยของเส้นทางที่เป็นไปได้ทั้งหมดจากรากถึงใบไม้นั่นคือ

    )avh1(T)=1# leaves in Tv leaf of Tdepth(v)

  2. อีกทางเลือกหนึ่งคือการกำหนดมันซ้ำ ๆ นั่นคือความสูงเฉลี่ยสำหรับโหนดคือค่าเฉลี่ยสูงกว่าความสูงเฉลี่ยของ subtrees บวกหนึ่งนั่นคือ

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

    ด้วยสำหรับ leafs lและavh 2 ( _ ) = 0สำหรับช่องว่างavh2(l)=1lavh2(_)=0

ตามความเข้าใจปัจจุบันของฉันเช่นความสูงเฉลี่ยของต้นไม้T

    1    
   / \
  2   3
 /
4

คือโดยวิธีที่สองนั่นคือการใช้การสอบถามซ้ำavh2(T)=1.25

อย่างไรก็ตามฉันยังไม่เข้าใจวิธีการทำสิ่งแรก ไม่ถูกต้องavh1(T)=(1+2)/2=1.5


1
คุณช่วยอธิบายบริบทได้ไหม ไม่มีสิ่งเช่นนิยามทางคณิตศาสตร์ที่ "ถูกต้อง"; คุณสามารถกำหนด "ความสูงเฉลี่ยของต้นไม้ไบนารี" ได้ตามต้องการ (ค่าเฉลี่ยของสิ่งที่มากกว่าสิ่งที่กระจาย ?) แต่คำนิยามที่แตกต่างกันจะมากหรือน้อยกว่าที่มีประโยชน์สำหรับการใช้งานที่แตกต่างกัน
JeffE

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

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

คำตอบ:


3

ไม่มีเหตุผลที่จะเชื่อว่าคำจำกัดความทั้งสองอธิบายถึงวิธีการเดียวกัน คุณสามารถเขียนซ้ำด้วย:avh1

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

avh1(l)=0lavh1

avh1avh2avh2avh1avh1lv(l)=lv(r)ชัดเจนในทันที บนต้นไม้ที่ไม่สมดุลย์พวกมันต่างกัน

การคำนวณของคุณถูกต้องแน่นอน (ให้คำจำกัดความของคุณ); โปรดทราบว่าต้นไม้ตัวอย่างไม่สมดุลใบ


avh1

avh1

ฉันหมายถึงรหัสการใช้งานโดยใช้การสอบถามซ้ำ
Timeless

@null: คุณสามารถคัดลอกสูตรได้เกือบตามตัวอักษรหากคุณรวมกรณีพื้นฐาน วิธีการทำอย่างแม่นยำนั้นขึ้นอยู่กับภาษาการเขียนโปรแกรมและการนำต้นไม้มาใช้ ฉันขอแนะนำให้คุณกลับมาใช้ซ้ำกับStack Overflowหากการดำเนินการเป็นสิ่งกีดขวางสำหรับคุณ
กราฟิลส์

2

แก้ไข: Jeffe เป็นจุดที่ดีในความคิดเห็นของเขาด้านบน คุณควรอ่าน "ถูกต้องเทียบกับไม่ถูกต้อง" ในคำตอบต่อไปนี้ว่า "สะดวกสบาย / คงที่เทียบกับไม่สอดคล้อง"

ดูเหมือนว่าการคำนวณครั้งที่สองของคุณไม่ถูกต้อง ให้ความสูงของต้นไม้ย่อยที่มีโหนดเดียว (เช่นใบไม้) เป็น 0 จากนั้นความสูงของรากต้นไม้ย่อยที่:

  • ความสูงที่ 4 คือ 0
  • ความสูงที่ 3 คือ 0
  • height ที่ 2 คือความสูงเฉลี่ยที่ 3 + 1 = 0 + 1 = 1
  • ความสูงที่ 1 คือค่าเฉลี่ยของความสูงที่ 2 และ 3 = (0 + 1) / 2 + 1 = 1.5

ฉันคิดว่าคุณทำการคำนวณครั้งแรกอย่างถูกต้องและ 1.5 เป็นคำตอบที่ถูกต้อง


ความคิดคือโหนด null ที่มีความสูง -1 ตามวิธีที่ 2 ความสูงเฉลี่ยของโหนดคือค่าเฉลี่ยของทรีย่อยบวก 1, ความสูงเฉลี่ยของโหนด 4 คือ ((-1) + (- 1)) / 2 + 1 = 0 ความสูงเฉลี่ยของโหนด 2 คือ (0 + (- 1)) / 2 + 1 = 0.5 และดังนั้นความสูงเฉลี่ยของรากคือ 1.25
ตลอดกาล

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