ลองจินตนาการถึงต้นไม้สีแดงดำ มีลำดับการแทรกและการลบที่สร้างขึ้นหรือไม่


41

สมมติว่านิยามของต้นไม้สีแดงดำดังต่อไปนี้

  1. มันเป็นต้นไม้ค้นหาแบบไบนารี
  2. แต่ละโหนดมีสีทั้งสีแดงหรือสีดำ รากมีสีดำ
  3. สองโหนดที่เชื่อมต่อด้วยขอบไม่สามารถเป็นสีแดงได้ในเวลาเดียวกัน
  4. นี่ควรเป็นคำจำกัดความที่ดีของใบไม้ NIL เช่นเดียวกับบนวิกิ ใบไม้ NIL เป็นสีดำ
  5. เส้นทางจากรูตไปยังใบไม้ NIL ใด ๆ มีจำนวนโหนดดำจำนวนเท่ากัน


คำถาม

สมมติว่าคุณได้ใช้งานinsertและdeleteการดำเนินการสำหรับต้นไม้สีแดงดำ ทีนี้ถ้าคุณได้รับต้นไม้สีแดงดำที่ถูกต้องจะมีลำดับinsertและdeleteการดำเนินการที่สร้างไว้หรือไม่


แรงจูงใจ

คำถามนี้กระตุ้นโดยคำถามนี้และจากการสนทนาจากคำถามนี้

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

  1. ฉันไม่ทราบวิธีที่จะพิสูจน์ได้อย่างถูกต้องว่า
  2. ฉันยังสนใจในกรณีทั่วไปมากขึ้น

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

2
ไม่ฉันคิดว่าคุณเข้าใจผิด แน่นอนชุดแทรกและลบใด ๆ สร้างต้นไม้สีแดงดำบางส่วน คำถามคือ: ต้นไม้ใดที่เหมาะกับคำจำกัดความที่สามารถสร้างขึ้นได้โดยการแทรกและลบตามลำดับ หากคุณได้รับต้นไม้คุณสามารถสร้างลำดับของแทรกและลบใหม่ได้หรือไม่?
alisianoi

2
@ all3fox ใช่คุณพูดถูก มีอัลกอริทึมที่ใช้การดำเนินการinsertและdeleteสร้างต้นไม้สีแดงดำที่ถูกต้องซึ่งประกอบด้วยโหนดสีดำเท่านั้น มันใช้แทรก / ลบเพื่อสร้างต้นไม้แห่งความสูงชั่วโมง อันดับแรกเราสามารถสร้างต้นไม้สีแดงดำที่มีความสมดุลอย่างสมบูรณ์แบบโดยใช้ความกว้าง2 ชั่วโมง+ 1 - 1ครั้งจากนั้นใช้h 2 h - 1(ชั่วโมง+2)2ชั่วโมง-1ชั่วโมง2ชั่วโมง+1-1ชั่วโมง* * * *2ชั่วโมง-1การแทรกและการลบในจำนวนเดียวกันจะวาดใหม่เป็นต้นไม้สีดำสนิท เคล็ดลับที่นี่คือการเลื่อนขึ้นกับเลเยอร์สีแดงที่ต่ำที่สุดขึ้นไปจนถึงราก ชั่วโมง
Anton Trunov

1
@AntonTrunov ขอบคุณฉันเข้าใจว่า แล้วกรณีของต้นไม้สีแดงดำทั่วไปล่ะ? คุณคิดว่ามันเป็นไปได้หรือไม่ที่จะสร้างต้นไม้สีแดง - ดำinsertและdeleteการดำเนินงาน
alisianoi

2
a) คำตอบนั้นขึ้นอยู่กับการนำไปปฏิบัติอย่างแม่นยำinsertและdelete; อาจมีหลายวิธีในการดำเนินการเหล่านี้ b) เนื่องจากต้นไม้ RB เป็นต้นไม้ B ลำดับที่ 4 เราจึงสามารถมองหาแรงบันดาลใจได้ รายละเอียดอาจพิสูจน์ได้ยากเนื่องจากการทำแผนที่จาก RB ไปยัง B (และ / หรือด้านหลัง) นั้นไม่ซ้ำกัน
กราฟิลส์

คำตอบ:


2

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

ปัญหาของต้นไม้สีดำสีแดงที่ไม่ใช่ (ซ้าย - หรือ - ขวา) คือการมีหลายวิธีในการคืนค่าสีแดงดำหลังจากลบหรือแทรกขั้นพื้นฐาน
ไม่ใช่การแทรกหรือการลบที่แปลงต้นไม้ แต่การปรับสมดุลและการหมุนที่เกิดขึ้นหลังจากนั้นเพื่อรักษา / กู้คืนความมืดสีแดงของต้นไม้

คำอธิบายพื้นฐานของต้นไม้สีแดงดำไม่ได้กำหนดเส้นทางที่เป็นไปได้
มันอาจจะไม่ไปได้ที่จะคิดออกว่าจะว่าสร้างต้นไม้สีดำให้เป็นสีแดงเพราะไม่จำเป็นที่จะต้องปรับสมดุลจะกำหนด

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

นี่ไม่ได้หมายความว่า RB-tree ที่เอนตัวไปทางซ้ายนั้นดีกว่าหรือมีประสิทธิภาพมากกว่าสิ่งที่พวกเขาได้รับในมือข้างหนึ่งโดยใช้กฎการปรับสมดุลที่กำหนดขึ้นพวกเขาเสียที่อื่นโดยรหัสสมดุลที่ซับซ้อนมากขึ้น


(ชั่วโมง+2)2ชั่วโมง-1ชั่วโมง2ชั่วโมง+1-1ชั่วโมง* * * *2ชั่วโมง-1ชั่วโมง คูณชั้นสีแดงที่ต่ำที่สุดขึ้นไปบนต้นไม้จนกระทั่งถึงราก

ฉันคิดว่าอัลกอริทึมการทรงตัวที่สมบูรณ์แบบเช่นDay-Stout-Warrenจะมีประสิทธิภาพมากกว่า


1
การใช้การดำเนินการinsertและdeleteจากหนังสือ CLRS คุณสามารถสร้างแผนภูมิ RB ที่ถูกต้องซึ่งประกอบด้วยโหนดสีดำเท่านั้น เคล็ดลับคือการแทรกเพิ่มเติมโหนดกว่าที่จำเป็นแล้วคนมากเกินไปลบ อัลกอริทึมจะกำจัดโหนดสีแดง
Anton Trunov

@AntonTrunov คุณมีลิงค์สำหรับอัลกอริทึมนั้นหรือไม่หากรวมไว้ในคำตอบ ฉันหามันไม่เจอด้วย google-fu ของฉัน
Johan

1
น่าเสียดายที่ฉันไม่มีลิงก์ ฉันพยายามตอบคำถามในเวลานั้นและหาอัลกอริธึมสำหรับกรณีพิเศษของต้นไม้ RB สีดำทั้งหมด ฉันเรียงลำดับอธิบายไว้ในความคิดเห็นนั้น แต่ไม่ได้แสดงหลักฐาน
Anton Trunov

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