Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Splay ใน Virtual Tree ในโครงสร้างข้อมูล


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

อัลกอริทึมจะพิจารณาต้นไม้สามครั้ง หนึ่งครั้งในแต่ละรอบ และเปลี่ยนแปลงต้นไม้ ในการผ่านครั้งแรก โดยการกระจายเฉพาะในโซลิดทรี โดยเริ่มจากโหนด y เส้นทางจาก y ไปยังรากของต้นไม้ทั้งหมดจะกลายเป็นเส้นประ เส้นทางนี้สร้างขึ้นแข็งโดยการประกบ ระยะสุดท้ายที่โหนด y จะสร้างรากของต้นไม้ y ไม่เป็นทางการ อัลกอริทึมอธิบายดังนี้

อัลกอริทึมสำหรับ Splay(y)

ผ่าน 1 เดินขึ้นไปบนต้นไม้เสมือน แต่การกระโจนจะดำเนินการภายในทรีย่อยที่เป็นของแข็งเท่านั้น เมื่อสิ้นสุดเส้นทางนี้ เส้นทางจาก y ไปยังรูทจะกลายเป็นเส้นประ

ผ่าน 2 เดินขึ้นจากโหนด y ประกบกันที่บรรพบุรุษที่เหมาะสมของ y แต่ละคน เมื่อสิ้นสุดขั้นตอนนี้ เส้นทางจาก y ไปยังรูตจะกลายเป็นของแข็ง ยกเว้นว่าโหนด y และลูกทั้งหมดในทรีเดิม (อันก่อนผ่าน 1) ตอนนี้กลายเป็นลูกที่ถูกทิ้ง

ผ่าน 3 เดินขึ้นจากโหนด y ไปที่รูท กระจายตามปกติ

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

ตัวอย่างได้รับด้านล่าง

ตารางความถี่ตัวอักษร

จดหมาย z k c คุณ d อี
ความถี่ 2 7 24 32 37 42 42 120

รหัสฮัฟฟ์แมน

จดหมาย ความถี่ รหัส บิต
อี 120 0 1
d 42 101 3
42 110 3
คุณ 37 37100 3
32 1110 4
24 11111 5
k 7 111101 6
z 2 111100 6

ต้น Huffman (สำหรับตัวอย่างด้านบน) แสดงไว้ด้านล่าง

Splay ใน Virtual Tree ในโครงสร้างข้อมูล