คือความสูงต่ำสุดของไบนารีต้นไม้ทำไม ?


10

ในคลาส Java ของฉันเรากำลังเรียนรู้เกี่ยวกับความซับซ้อนของคอลเลกชันประเภทต่างๆ

ในไม่ช้าเราจะคุยเรื่องต้นไม้ไบนารีซึ่งฉันอ่านมาแล้ว หนังสือระบุว่าความสูงขั้นต่ำของต้นไม้ไบนารีคือแต่ไม่มีคำอธิบายเพิ่มเติมlog2⁡(n+1)−1

มีคนอธิบายได้ไหม


ฉันอธิบายที่นี่stackoverflow.com/a/13093274/550393
— 2cupsOfTech

คำตอบ:


11

ต้นไม้ไบนารีมี 1 หรือ 2 ลูกที่ไม่ใช่โหนดใบและ 0 โหนดที่โหนดใบ ให้มีโหนดในต้นไม้และเราต้องจัดเรียงในลักษณะที่พวกเขายังคงรูปแบบต้นไม้ไบนารีที่ถูกต้องn

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

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

ที่นี่สูตรการคำนวณความสัมพันธ์ของความสูงในแง่ของจำนวนโหนดนั้นตรงไปข้างหน้า หากคือความสูงของต้นไม้แล้วn-1hh=n−1

ตอนนี้ถ้าเราพยายามสร้างต้นไม้ไบนารีของ nodes ที่มีความสูงขั้นต่ำ (ลดได้เสมอไปเป็นต้นไม้ไบนารีสมบูรณ์) เราต้องแพ็คโหนดให้มากที่สุดเท่าที่เป็นไปได้ในระดับบนก่อนที่จะย้ายไปยังระดับถัดไป ดังนั้นต้นไม้จึงมีรูปแบบของต้นไม้ต่อไปนี้:n

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

ให้เราเริ่มต้นกับกรณีโดยเฉพาะอย่างยิ่ง1n=2m−1

เรารู้ว่า

20+21+22+...+2m−1=2m−1

นอกจากนี้มันง่ายที่จะพิสูจน์ว่าระดับที่สามารถมีได้มากที่สุดโหนดในนั้นi2i

โดยใช้ผลนี้ในผลรวมข้างต้นเราจะพบว่าในแต่ละระดับจากไปมีอยู่ในระยะที่สอดคล้องกันในการขยายตัวของ1 นี่หมายความว่าต้นไม้ไบนารีสมบูรณ์โหนดเต็มไปอย่างสมบูรณ์และมีความสูงโดยที่ความสูงของต้นไม้ไบนารีสมบูรณ์ที่มีโหนดi0m2i−12m−12m−1h(2m−1)=m−1h(n)=n

การใช้ผลลัพธ์นี้เนื่องจาก tree ที่มีโหนดเต็มแล้วจึงทำให้ tree ที่มี nodes ต้องรองรับโหนดเพิ่มเติม ในระดับถัดเพิ่มขึ้นสูงโดย 1 จากเพื่อเมตรh(2m)=m2m−1(2m−1)+1=2mmm−1m

จนถึงตอนนี้เราได้พิสูจน์แล้วว่า เช่นเดียวกับ

h(2m)=m,
h(2m+1)=m+1
h(2m+1−1)=m

ดังนั้น∀n∈Z,2m≤n<2m+1

m≤h(n)<m+1

แต่การบันทึก (ฐาน 2) ทั้งสองข้าง

m≤log2⁡(n)<m+1
m=⌊log2⁡(n)⌋

ดังนั้น∀n,n∈[2m,2m+1)

h(n)=m=⌊log2⁡(n)⌋

และเราสามารถสรุปผลลัพธ์นี้โดยใช้การเหนี่ยวนำ∀n∈Z

PS: หนังสือที่ระบุความสูงของต้นไม้ไบนารีที่สมบูรณ์แบบเป็นไม่ถูกต้องสำหรับทั้งหมดเพราะจะให้ค่าที่ไม่ครบถ้วนสำหรับจำนวนเต็มส่วนใหญ่ (เช่นทั้งหมด แต่สมบูรณ์แบบ) ต้นไม้ไบนารี) แต่ความสูงของต้นไม้นั้นเป็นส่วนประกอบที่สมบูรณ์log2⁡(n+1)−1nlog2⁡(n)n


19

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

ดังนั้นต้นไม้ไบนารีอิ่มตัวอย่างเต็มที่กับชั้นจะมีโหนดสูงสุดและจะมีความลึกของ3ดังนั้นหากเรามีความลึกของต้นไม้ไบนารีเราสามารถหาจำนวนโหนดได้อย่างง่ายดาย (ซึ่งเกิดขึ้นเมื่อต้นไม้มีความอิ่มตัวอย่างเต็มที่) หากคุณจำจากคลาสพีชคณิตนี่เป็นเพียงชุดเรขาคณิตและดังนั้นจึงสามารถแสดงดังนี้41+1⋅2+1⋅2⋅2+1⋅2⋅2⋅23

nodes=1+2+22+23+...+2depth=∑k=0depth2k=1−2depth+11−2.

ลองจัดเรียงใหม่: จากนั้นแก้ไขความลึก: และมีสูตรของคุณ ทีนี้โปรดจำไว้ว่านี่จะให้ผลเป็นจำนวนเต็มเท่านั้นเมื่อต้นไม้ทุกต้นเต็มไปหมด (ต้นไม้ไบนารี 'สมบูรณ์แบบ') ดังนั้นหากคุณได้รับค่าที่ไม่ใช่จำนวนเต็มอย่าลืมปัดเศษขึ้น

nodes=2depth+1−1,
nodes+1=2depth+1log2⁡(nodes+1)=log2⁡(2depth+1)=depth+1log2⁡(nodes+1)−1=depth.

4

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

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

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

20+21+22+23+⋯+2h=2h+1−1≤n.
h=lg⁡(n+1)−1.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.