ต้นไม้สีแดงดำทุกต้นไม่สมดุลหรือไม่


30

โดยสัญชาตญาณ "ต้นไม้ที่สมดุล" ควรเป็นต้นไม้ที่ต้นไม้ย่อยด้านซ้ายและขวาในแต่ละโหนดจะต้องมีจำนวนโหนดโดยประมาณเท่ากัน

แน่นอนเมื่อเราพูดถึงต้นไม้สีแดงดำ * (ดูคำจำกัดความที่ท้าย) การมีความสมดุลจริง ๆ แล้วเราหมายถึงว่าพวกเขามีความสูงที่สมดุลและในแง่นั้นพวกเขามีความสมดุล

สมมติว่าเราพยายามทำสัญชาตญาณข้างต้นเป็นระเบียบดังนี้:

คำนิยาม:ต้นไม้ไบนารีเรียกว่า -balance, โดยมี , สำหรับทุกโหนด , ความไม่เท่าเทียมกันμ0μ12N

μ|NL|+1|N|+11μ

เก็บและสำหรับทุก ๆมีบางโหนดที่คำสั่งข้างต้นล้มเหลว คือจำนวนโหนดในทรีย่อยด้านซ้ายของและคือจำนวนโหนดใต้ต้นไม้ที่มีเป็นรูท (รวมถึงรูท)μ>μ|NL|N|N|N

ฉันเชื่อว่าสิ่งเหล่านี้เรียกว่าต้นไม้ที่มีน้ำหนักสมดุลในวรรณกรรมบางเล่มในหัวข้อนี้

ใคร ๆ ก็สามารถแสดงให้เห็นว่าถ้าต้นไม้ไบนารีกับ nodes คือ -balanced (สำหรับค่าคงที่ ) ดังนั้นความสูงของต้นไม้คือดังนั้นจึงคงการค้นหาที่ดี คุณสมบัติ.nμμ>0O(logn)

ดังนั้นคำถามคือ:

มีบ้างไหมที่ต้นไม้สีแดงดำใหญ่พอที่จะ mu- สมดุลμ>0μ


ความหมายของต้นไม้สีแดงดำที่เราใช้ (จากบทนำสู่อัลกอริทึมโดย Cormen et al):

แผนผังการค้นหาแบบไบนารีที่แต่ละโหนดมีสีเป็นสีแดงหรือสีดำและ

  • รากมีสีดำ
  • โหนด NULL ทั้งหมดเป็นสีดำ
  • หากโหนดเป็นสีแดงแสดงว่าโหนดลูกทั้งสองเป็นสีดำ
  • สำหรับแต่ละโหนดเส้นทางทั้งหมดจากโหนดนั้นไปยังโหนด NULL ที่สืบทอดมามีโหนดสีดำจำนวนเดียวกัน

หมายเหตุ: เราจะไม่นับโหนด NULL ในคำจำกัดความของ -balance ด้านบน (แม้ว่าฉันเชื่อว่ามันไม่สำคัญว่าเราจะทำ)μ


@Aryabhata: มีอะไรพิเศษ ( ) ในการแก้ไขของคุณ? ฉันสบายดีกับความจริงที่ว่าสมดุลหมายถึงสมดุล ผมไม่คิดว่าคุณควรจะมีเพื่อหาสิ่งที่แน่นอนที่จะพิสูจน์ความสูงเป็นlog) ฉันพลาดอะไรไปรึเปล่า? μ>μ1314 μO(logn)
jmad

นอกจากนี้คุณจำเป็นต้องมีคำสั่งเชิงลบเพื่อให้ห่วงโซ่ counterexample กับต้นไม้ต้นหนึ่งสำหรับทุก{N} ห่วงโซ่ไม่ จำกัด ใด ๆ ที่ไม่ลดขนาดโหนดจะเพียงพอใช่ไหม nN
กราฟิลส์

@jmad: หากไม่มีการแก้ไขต้นไม้ทุกต้นจะมีความสมดุลเล็กน้อยดังนั้นเราจึงไม่มีคำตอบสำหรับคำถามเล็กน้อย ฉันต้องการหลีกเลี่ยงสิ่งนั้น μ0
Aryabhata

@ ราฟาเอล: ฉันไม่เข้าใจ ขนาดโหนดของต้นไม้nคุณกำลังบอกว่ามันไม่สำคัญว่าต้นไม้ใดที่เราเลือกให้และ ? ดูเหมือนจะไม่ชัดเจนสำหรับฉันและนั่นคือสิ่งที่เป็นคำถามเกี่ยวกับ! nthnRBnμn0
Aryabhata

1
รุ่นก่อนหน้าของคำถามนี้อ้างว่ารันไทม์ของอัลกอริทึม recursive บนต้นไม้สีแดงสีดำจำนวนที่ไม่เชิงเส้นของการทำงานในแต่ละขั้นตอนที่ไม่จำเป็นต้องn) การอ้างสิทธิ์นี้ไม่ถูกต้อง ความสูงสมดุลหมายความว่าระดับความลึกนั้น -node สีแดงสีดำต้นไม้เป็นn) ดังนั้นหากคุณดำเนินการการทำงานในแต่ละระดับของต้นไม้การทำงานรวมเป็นn) O(nlogn)nO(logn)O(n)O(nlogn)
JeffE

คำตอบ:


31

เรียกร้อง : ต้นไม้สีแดงสีดำสามารถยกเลิกพล -balancedμ

Proof Idea : เติมทรีย่อยที่ถูกต้องให้มากที่สุดเท่าที่จะเป็นไปได้และด้านซ้ายมีจำนวนน้อยที่สุดเท่าที่จะเป็นไปได้สำหรับหมายเลขของโหนดสีดำในทุก ๆ รูท - ลีฟk

พิสูจน์ : กำหนดลำดับของต้นไม้สีแดงดำเพื่อให้มีโหนดดำในทุกเส้นทางจากรากไปยังใบไม้ใด ๆ (เสมือน) กำหนดด้วยTkTkkTk=B(Lk,Rk)

  • Rkต้นไม้ที่สมบูรณ์ของความสูงกับต้นที่หนึ่ง, สาม, ... ระดับสีแดง, อื่น ๆ สีดำและ2k1
  • Lkต้นไม้ที่สมบูรณ์ของความสูงพร้อมโหนดทั้งหมดที่มีสีดำk1

เห็นได้ชัดว่าทั้งหมดเป็นต้นไม้สีแดงดำTk

ตัวอย่างเช่น ,และตามลำดับ:T1T2T3


T_1
[ แหล่งที่มา ]


T_2
[ แหล่งที่มา ]


T_3
[ แหล่งที่มา ]


ตอนนี้ให้เราตรวจสอบความประทับใจทางภาพของด้านขวาที่มีขนาดใหญ่เมื่อเทียบกับด้านซ้าย ฉันจะไม่นับใบเสมือน พวกเขาไม่ส่งผลกระทบต่อผล

ทรีย่อยด้านซ้ายของเสร็จสมบูรณ์และมักจะมีความสูงและมีโหนดทรีย่อยที่ถูกต้องนั้นสมบูรณ์และมีความสูงและประกอบด้วยโหนดตอนนี้ค่าสมดุลสำหรับรูตคือTkk12k12k122k1μ

2k2k+22k=11+2kk0

ซึ่งพิสูจน์ว่าไม่มีตามที่ร้องขอμ>0


14

เลขที่ พิจารณาต้นไม้สีแดงดำที่มีโครงสร้างพิเศษดังต่อไปนี้

  • ทรีย่อยทางซ้ายเป็นต้นไม้ไบนารีสมบูรณ์ที่มีความลึกซึ่งทุกโหนดมีสีดำd
  • ทรีย่อยที่เหมาะสมคือต้นไม้ไบนารีที่สมบูรณ์ที่มีความลึกซึ่งทุกโหนดที่ความลึกคี่เป็นสีแดงและทุกโหนดที่ความลึกเท่ากันจะเป็นสีดำ2d

มันตรงไปตรงมาเพื่อตรวจสอบว่านี่เป็นต้นไม้สีแดงดำที่ถูกต้อง แต่จำนวนโหนดในทรีย่อยด้านขวา ( ) นั้นคือสแควร์ของจำนวนโหนดในทรีย่อยทางซ้าย ( )22d+112d+11


+1: ขอบคุณ! แต่จำนวนของโหนดเป็นของจาก1 เราสามารถบางที 'แผ่น' เหล่านี้เพียงพอที่จะได้รับต้นไม้ขนาดที่กำหนด ? (ดูเหมือนว่าควรจะทำได้) 22d+1+2d+11n
Aryabhata

1
คุณมีตัวอย่างตัวอย่างสำหรับจำนวนไม่ จำกัดดังนั้นทำไมต้องกังวล แต่ฉันคิดว่าถ้าคุณต้องการคุณสามารถเพิ่มโหนดสีแดงเพิ่มเติมลงในทรีย่อยด้านซ้ายหรือนำโหนดสีแดงออกมาจากทรีย่อยด้านขวา n
JeffE

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