ในคลาส Java ของฉันเรากำลังเรียนรู้เกี่ยวกับความซับซ้อนของคอลเลกชันประเภทต่างๆ
ในไม่ช้าเราจะคุยเรื่องต้นไม้ไบนารีซึ่งฉันอ่านมาแล้ว หนังสือระบุว่าความสูงขั้นต่ำของต้นไม้ไบนารีคือแต่ไม่มีคำอธิบายเพิ่มเติม
มีคนอธิบายได้ไหม
ในคลาส Java ของฉันเรากำลังเรียนรู้เกี่ยวกับความซับซ้อนของคอลเลกชันประเภทต่างๆ
ในไม่ช้าเราจะคุยเรื่องต้นไม้ไบนารีซึ่งฉันอ่านมาแล้ว หนังสือระบุว่าความสูงขั้นต่ำของต้นไม้ไบนารีคือแต่ไม่มีคำอธิบายเพิ่มเติม
มีคนอธิบายได้ไหม
คำตอบ:
ต้นไม้ไบนารีมี 1 หรือ 2 ลูกที่ไม่ใช่โหนดใบและ 0 โหนดที่โหนดใบ ให้มีโหนดในต้นไม้และเราต้องจัดเรียงในลักษณะที่พวกเขายังคงรูปแบบต้นไม้ไบนารีที่ถูกต้อง
โดยไม่ต้องพิสูจน์ฉันกำลังระบุว่าเพื่อเพิ่มความสูงสูงสุดโหนดที่กำหนดควรจัดเรียงเชิงเส้นนั่นคือแต่ละโหนดที่ไม่ใช่ใบไม้ควรมีลูกเพียงคนเดียว:
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
ที่นี่สูตรการคำนวณความสัมพันธ์ของความสูงในแง่ของจำนวนโหนดนั้นตรงไปข้างหน้า หากคือความสูงของต้นไม้แล้วn-1
ตอนนี้ถ้าเราพยายามสร้างต้นไม้ไบนารีของ nodes ที่มีความสูงขั้นต่ำ (ลดได้เสมอไปเป็นต้นไม้ไบนารีสมบูรณ์) เราต้องแพ็คโหนดให้มากที่สุดเท่าที่เป็นไปได้ในระดับบนก่อนที่จะย้ายไปยังระดับถัดไป ดังนั้นต้นไม้จึงมีรูปแบบของต้นไม้ต่อไปนี้:
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
ให้เราเริ่มต้นกับกรณีโดยเฉพาะอย่างยิ่ง1
เรารู้ว่า
นอกจากนี้มันง่ายที่จะพิสูจน์ว่าระดับที่สามารถมีได้มากที่สุดโหนดในนั้น
โดยใช้ผลนี้ในผลรวมข้างต้นเราจะพบว่าในแต่ละระดับจากไปมีอยู่ในระยะที่สอดคล้องกันในการขยายตัวของ1 นี่หมายความว่าต้นไม้ไบนารีสมบูรณ์โหนดเต็มไปอย่างสมบูรณ์และมีความสูงโดยที่ความสูงของต้นไม้ไบนารีสมบูรณ์ที่มีโหนด
การใช้ผลลัพธ์นี้เนื่องจาก tree ที่มีโหนดเต็มแล้วจึงทำให้ tree ที่มี nodes ต้องรองรับโหนดเพิ่มเติม ในระดับถัดเพิ่มขึ้นสูงโดย 1 จากเพื่อเมตร
จนถึงตอนนี้เราได้พิสูจน์แล้วว่า เช่นเดียวกับ
ดังนั้น
แต่การบันทึก (ฐาน 2) ทั้งสองข้าง
ดังนั้น
และเราสามารถสรุปผลลัพธ์นี้โดยใช้การเหนี่ยวนำ
PS: หนังสือที่ระบุความสูงของต้นไม้ไบนารีที่สมบูรณ์แบบเป็นไม่ถูกต้องสำหรับทั้งหมดเพราะจะให้ค่าที่ไม่ครบถ้วนสำหรับจำนวนเต็มส่วนใหญ่ (เช่นทั้งหมด แต่สมบูรณ์แบบ) ต้นไม้ไบนารี) แต่ความสูงของต้นไม้นั้นเป็นส่วนประกอบที่สมบูรณ์
ฉันสมมติว่าโดยคุณหมายถึงจำนวนโหนดทั้งหมดในต้นไม้ไบนารี ความสูง (หรือความลึก) ของต้นไม้ไบนารีคือความยาวของเส้นทางจากโหนดรูท (โหนดที่ไม่มีพาเรนต์) ไปยังโหนดลีฟที่ลึกที่สุด ในการทำให้ความสูงต่ำสุดนี้ต้นไม้ส่วนใหญ่จะอิ่มตัวอย่างสมบูรณ์ (ยกเว้นระดับสุดท้าย) เช่นหากระดับเฉพาะมีโหนดที่มีลูกจากนั้นโหนดทั้งหมดในระดับชั้นหลักจะต้องมีลูกสองคน
ดังนั้นต้นไม้ไบนารีอิ่มตัวอย่างเต็มที่กับชั้นจะมีโหนดสูงสุดและจะมีความลึกของ3ดังนั้นหากเรามีความลึกของต้นไม้ไบนารีเราสามารถหาจำนวนโหนดได้อย่างง่ายดาย (ซึ่งเกิดขึ้นเมื่อต้นไม้มีความอิ่มตัวอย่างเต็มที่) หากคุณจำจากคลาสพีชคณิตนี่เป็นเพียงชุดเรขาคณิตและดังนั้นจึงสามารถแสดงดังนี้
ลองจัดเรียงใหม่: จากนั้นแก้ไขความลึก: และมีสูตรของคุณ ทีนี้โปรดจำไว้ว่านี่จะให้ผลเป็นจำนวนเต็มเท่านั้นเมื่อต้นไม้ทุกต้นเต็มไปหมด (ต้นไม้ไบนารี 'สมบูรณ์แบบ') ดังนั้นหากคุณได้รับค่าที่ไม่ใช่จำนวนเต็มอย่าลืมปัดเศษขึ้น
เพื่อให้ความสูงต่ำสุดนั้นเป็นเรื่องง่ายที่จะเห็นว่าเราจำเป็นต้องเติมทุกระดับยกเว้นอาจเป็นครั้งสุดท้าย ทำไม? มิฉะนั้นเราสามารถเลื่อนระดับโหนดสุดท้ายขึ้นสู่ช่องว่างในระดับบน
ตอนนี้ลองนึกภาพว่าฉันมีจำนวนถั่วที่ไม่ระบุจำนวนหนึ่งและฉันให้คุณทีละเมล็ดและขอให้คุณสร้างต้นไม้ไบนารีด้วยความสูงขั้นต่ำที่เป็นไปได้ ฉันอาจจะหมดถั่วตามเวลาที่คุณเติมระดับสุดท้ายให้สมบูรณ์หรืออย่างน้อยก็มีหนึ่งถั่วในระดับสุดท้าย ขอให้เราบอกว่าคุณมีต้นไม้สูงของคุณชั่วโมงที่จุดนี้
ในทั้งสองกรณีhไม่เปลี่ยนแปลง ดังนั้นซึ่งหมายความว่าคุณมีต้นไม้ไบนารีสมบูรณ์ของความสูงของเอชกับข้อ จำกัด ของฉัน แต่ฉันคิดว่าถั่วจินตภาพในระดับสุดท้าย (ถ้าคุณไม่สามารถเติมระดับสุดท้ายได้) ดังนั้นจริงๆแล้วมันคือ ดังนั้นอย่างน้อย แต่ใช้เพดานเนื่องจากเราเพิ่มถั่วในจินตนาการและไม่ลบมันออก