ฉันกำลังพยายามเขียนตัวตรวจการสะกดซึ่งควรใช้กับพจนานุกรมที่มีขนาดค่อนข้างใหญ่ ฉันต้องการวิธีที่มีประสิทธิภาพในการจัดทำดัชนีข้อมูลพจนานุกรมของฉันโดยใช้ระยะทางDamerau-Levenshteinเพื่อกำหนดว่าคำใดที่ใกล้เคียงที่สุดกับคำที่สะกดผิด
ฉันกำลังมองหาโครงสร้างข้อมูลที่จะให้ความประนีประนอมระหว่างความซับซ้อนของพื้นที่กับความซับซ้อนของรันไทม์ได้ดีที่สุด
จากสิ่งที่ฉันพบบนอินเทอร์เน็ตฉันมีโอกาสในการขายไม่กี่เกี่ยวกับประเภทของโครงสร้างข้อมูลที่จะใช้:
Trie
นี่เป็นความคิดแรกของฉันและดูใช้งานได้ง่ายและควรมีการค้นหา / แทรกอย่างรวดเร็ว การค้นหาโดยประมาณโดยใช้ Damerau-Levenshtein ควรง่ายต่อการใช้งานที่นี่เช่นกัน แต่มันไม่ได้ดูมีประสิทธิภาพมากนักในแง่ของความซับซ้อนของพื้นที่เนื่องจากคุณมักจะมีค่าใช้จ่ายจำนวนมากกับที่เก็บข้อมูลพอยน์เตอร์
Patricia Trie
ดูเหมือนว่าจะใช้เนื้อที่น้อยกว่า Trie ปกติเนื่องจากคุณไม่ต้องเสียค่าใช้จ่ายในการเก็บพอยน์เตอร์ แต่ฉันกังวลเกี่ยวกับการแยกส่วนข้อมูลในกรณีที่พจนานุกรมมีขนาดใหญ่มากเหมือนที่ฉันมี
ต้นไม้ต่อท้าย
ฉันไม่แน่ใจเกี่ยวกับสิ่งนี้ดูเหมือนว่าบางคนจะพบว่ามีประโยชน์ในการทำเหมืองข้อความ แต่ฉันไม่แน่ใจว่าสิ่งที่จะให้ในแง่ของประสิทธิภาพสำหรับตัวตรวจสอบการสะกด
Ternary Search Tree
สิ่งเหล่านี้ดูดีมากและในแง่ของความซับซ้อนควรอยู่ใกล้ (ดีกว่า) กับ Patricia Tries แต่ฉันไม่แน่ใจเกี่ยวกับการแยกส่วนหากมันจะดีกว่าแย่กว่า Patricia Tries
ต้นไม้ระเบิด
ดูเหมือนว่าจะเป็นลูกผสมและฉันก็ไม่แน่ใจว่าจะได้ประโยชน์อะไรจาก Tries และสิ่งที่คล้ายกัน แต่ฉันได้อ่านมาหลายครั้งแล้วว่ามันมีประสิทธิภาพมากสำหรับการทำเหมืองข้อความ
ฉันต้องการรับความคิดเห็นเกี่ยวกับโครงสร้างข้อมูลที่ดีที่สุดที่จะใช้ในบริบทนี้และสิ่งที่ทำให้ดีกว่าที่อื่น หากฉันขาดโครงสร้างข้อมูลบางอย่างที่เหมาะสมกว่าสำหรับเครื่องตรวจการสะกดคำฉันก็สนใจเช่นกัน