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


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=n1

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

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

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

เรารู้ว่า

20+21+22+...+2m1=2m1

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

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

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

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

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

ดังนั้นnZ,2mn<2m+1

mh(n)<m+1

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

mlog2(n)<m+1
m=log2(n)

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

h(n)=m=log2(n)

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

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


19

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

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

nodes=1+2+22+23+...+2depth=k=0depth2k=12depth+112.

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

nodes=2depth+11,
nodes+1=2depth+1log2(nodes+1)=log2(2depth+1)=depth+1log2(nodes+1)1=depth.

4

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

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

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

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