ฉันกำลังมองหาโครงสร้างข้อมูลที่เก็บชุดสตริงไว้ในชุดอักขระสามารถทำการดำเนินการต่อไปนี้ได้ เราแสดงว่าเป็นโครงสร้างข้อมูลการจัดเก็บชุดของสตริงSD ( S ) S
Add-Prefix-Set
บน : กำหนดชุดของ (อาจว่างเปล่า) สตริงซึ่งขนาดถูก จำกัด ด้วยค่าคงที่และความยาวสตริงถูก จำกัด โดยค่าคงที่ส่งคืน\}) ทั้งสองนี้คง bounding มีทั่วโลก: พวกเขาเป็นเหมือนกันสำหรับปัจจัยการผลิตทั้งหมดTT D ( { t s | t ∈ T , s ∈ S } ) TGet-Prefixes
บน : return\} โปรดทราบว่าผมไม่ทราบจริงๆสิ่งที่โครงสร้างที่ใช้สำหรับชุดนี้ตราบเท่าที่ฉันสามารถระบุเนื้อหาในเวลา{ a | s ∈ S , ∈ Σ } O ( | Σ | )Remove-Prefixes
ใน : การกลับมา\})D ( { s | s ∈ S , ∈ Σ } )Merge
: ให้และกลับT)D ( T ) D ( S ∪ T )
ตอนนี้ฉันต้องการดำเนินการเหล่านี้ทั้งหมดในเวลาแต่ฉันสบายดีกับโครงสร้างที่ดำเนินการทั้งหมดเหล่านี้ในเวลาโดยที่คือความยาวของสตริงที่ยาวที่สุดใน โครงสร้าง. ในกรณีของการรวมฉันต้องการเวลาทำงานโดยที่คือสำหรับอันแรกและ theสำหรับโครงสร้างที่สองo ( n ) n o ( n 1 + n 2 ) n 1 n n 2 n
ข้อกำหนดเพิ่มเติมคือโครงสร้างไม่สามารถเปลี่ยนแปลงได้หรืออย่างน้อยที่สุดการดำเนินการด้านบนจะส่งกลับโครงสร้าง 'ใหม่' เช่นตัวชี้ไปยังโครงสร้างเดิมที่ยังคงทำงานเหมือนเดิม
หมายเหตุเกี่ยวกับค่าตัดจำหน่าย: ใช้ได้ แต่คุณต้องระวังการคงอยู่ ในขณะที่ฉันใช้โครงสร้างแบบเก่าตลอดเวลาฉันจะมีปัญหาถ้าฉันทำกรณีที่เลวร้ายที่สุดด้วยชุดของการดำเนินการบางอย่างในโครงสร้างเดียวกัน (ดังนั้นการละเว้นโครงสร้างใหม่ที่สร้างขึ้น)
ฉันต้องการใช้โครงสร้างดังกล่าวในอัลกอริทึมการแยกฉันกำลังทำงานอยู่; โครงสร้างข้างต้นจะเก็บ lookahead ที่ฉันต้องการสำหรับอัลกอริทึม
ฉันได้พิจารณาแล้วใช้Trieแต่ปัญหาหลักคือว่าผมไม่ทราบวิธีการที่จะผสานพยายามอย่างมีประสิทธิภาพ หากชุดสตริงสำหรับAdd-Prefix-Set
ประกอบด้วยสตริงอักขระเดียวเท่านั้นคุณสามารถเก็บชุดเหล่านี้ไว้ในสแต็กซึ่งจะทำให้เวลาการทำงานของคุณสำหรับการดำเนินการสามครั้งแรก อย่างไรก็ตามวิธีนี้ใช้ไม่ได้กับการรวมเข้าด้วยกัน
สุดท้ายโปรดทราบว่าฉันไม่สนใจปัจจัย: นี่คงที่สำหรับทุกสิ่งที่ฉันสนใจ
Add-Prefix-Set
)
Add-Prefix-Set
หรือคุณเริ่มต้นด้วยชุดสตริงโดยพลการ