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

Solid Trees ในโครงสร้างข้อมูล


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

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

ส่งผลให้ต้นไม้แตกเป็นแนวทึบ รากของเส้นทางทึบจะเชื่อมต่อกับเส้นทางทึบอื่น ๆ ด้วยเส้นประ โครงสร้างข้อมูลใหม่ระบุว่ามีการสร้าง "ต้นไม้เสมือน" การเชื่อมโยงและการตัดต้นไม้ T แต่ละต้นจะแสดงด้วยต้นไม้เสมือน V ซึ่งมีโหนดชุดเดียวกัน แต่เส้นทางทึบแต่ละเส้นของทรีดั้งเดิมนั้นถูกดัดแปลงหรือแปลงเป็นไบนารีทรีในทรีเสมือน ต้นไม้ไบนารีมีความสมดุลมากที่สุด ดังนั้น ต้นไม้เสมือนจึงเชื่อมโยงกับลูกด้านซ้าย (ทึบ) ลูกด้านขวา (ทึบ) และลูกกลาง (เส้นประ) ศูนย์หรือมากกว่า (เส้นประ)

กล่าวอีกนัยหนึ่ง ต้นไม้เสมือนประกอบด้วยลำดับชั้นของต้นไม้ไบนารีทึบที่เชื่อมด้วยขอบประ แต่ละโหนดเชื่อมโยงกับตัวชี้ไปยังพาเรนต์ และไปยังโหนดย่อยด้านซ้ายและขวา

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

Formally, Parentpath(v) =Node(Inorder(v)+ 1).

โปรดทราบว่าสำหรับโหนด v ใด ๆ โหนดทั้งหมดในทรีย่อยด้านซ้ายจะมีตัวเลขที่ไม่เรียงลำดับน้อยกว่า และโหนดในทรีย่อยทางขวาจะมีตัวเลขที่ไม่เรียงลำดับที่สูงกว่า เพื่อให้แน่ใจว่าโหนดทั้งหมดในทรีย่อยด้านซ้ายจะแสดงเป็นลูกหลาน และโหนดทั้งหมดในแผนผังย่อยด้านขวาจะแสดงเป็นบรรพบุรุษ ดังนั้น ผู้ปกครอง (ในไบนารีทรี) ของเด็กทางซ้ายจะถือว่าเป็นบรรพบุรุษ (ในทรีดั้งเดิม) แต่ผู้ปกครอง (ในไบนารีทรี) ของเด็กที่ถูกต้องจะถือว่าเป็นผู้สืบทอด (ในทรีดั้งเดิม) คำสั่งซื้อนี้ช่วยให้เราดำเนินการเพิ่มต้นทุนได้อย่างมีประสิทธิภาพ

เราต้องการคำจำกัดความหรือสัญกรณ์เพื่อดำเนินการต่อ

ให้ mincost(x) เป็นต้นทุนของโหนดที่มีค่าคีย์ต่ำสุดในบรรดาผู้สืบทอดทั้งหมดของ x ในทรีย่อยแบบทึบเดียวกัน

จากนั้นในแต่ละโหนด เราเก็บสองฟิลด์ δcost(x) และ δmin(x) เรากำหนด

δmin(x) =cost(x)−mincost(x). And,
δcost(x) =cost(x)− cost(parent(x)) if x is associated with a solid parent
δcost(x) =cost(x) otherwise (x is treated as a solid tree root)