บางคนที่ฉันรู้จักกำลังวางแผนที่จะใช้ตัวแก้ไขข้อความในอนาคตอันใกล้นี้ซึ่งทำให้ฉันคิดว่าโครงสร้างข้อมูลชนิดใดที่รวดเร็วสำหรับตัวแก้ไขข้อความ โครงสร้างที่ใช้มากที่สุดจะเห็นได้ชัดเชือกหรือบัฟเฟอร์ช่องว่าง
ต้น Van Emde Boasเป็นคิวลำดับความสำคัญที่เร็วที่สุดรอบ ๆ หากคุณไม่คำนึงถึงขอบเขตบนจำนวนรายการที่คุณสามารถใส่ลงไปและค่าใช้จ่ายในการเริ่มต้นจำนวนมาก คำถามของฉันคือว่ามีโครงสร้างข้อมูลบางส่วนที่เร็วเท่ากับทรี Emde Boas หรือไม่ แต่รองรับการทำงานของโปรแกรมแก้ไขข้อความ
เราต้องรองรับอักขระได้ไม่เกินในโครงสร้างข้อมูลของเรา (ดังนั้นหากเราจะสนับสนุนอักขระ ASCII ได้สูงสุด 4GB) เราได้รับอนุญาตเวลาในการเริ่มต้นโครงสร้างข้อมูลใหม่ เราต้องการสนับสนุนการดำเนินงานต่อไปนี้:
- แทรกอักขระที่ตำแหน่งใน (และเพิ่มตำแหน่งของอักขระที่ตามมาทุก ๆ 1)
- ลบตัวอักษรที่ตำแหน่งในบันทึกเมตร)
- กลับตัวอักษรที่ตำแหน่งในบันทึกเมตร)
ดังนั้นการแทรก (0, 'a') ตามด้วยการแทรก (0, 'b') ให้ผลลัพธ์เป็น "ba"
จะดีกว่านี้:
- กลับมาเป็น 'ชี้' เพื่อดัชนีบางในบันทึกเมตร)
- ได้รับ 'ชี้' กลับตัวอักษรที่ตำแหน่งนี้ใน(1)
- ได้รับ 'ชี้' เอาตัวละครในตำแหน่งนี้ใน(1)
- ได้รับ 'ตัวชี้' เพิ่มตัวละครที่ตำแหน่งนี้ในและส่งกลับตัวชี้ไปยังตำแหน่งต่อไปนี้
- (อุปกรณ์เสริม) กำหนด 'ชี้' กลับ 'ชี้' ตัวอักษรถัดไป / ก่อนหน้านี้ใน(1)