Я намагаюся написати перевірку орфографії, яка повинна працювати з досить великим словником. Я дуже хочу, щоб ефективний спосіб індексувати мої словникові дані, використовуючи відстань Дамерау-Левенштейн, щоб визначити, які слова найближчі до неправильно написаного слова.
Я шукаю структуру даних, яка б дала мені найкращий компроміс між складністю простору та складністю виконання.
На основі того, що я знайшов в Інтернеті, у мене є кілька підказок щодо того, який тип структури даних використовувати:
Трие
Це моя перша думка і виглядає досить просто втіленням і має забезпечити швидкий пошук / вставлення. Орієнтовний пошук з використанням Дамерау-Левенштейна повинен бути простим для здійснення і тут. Але це виглядає не дуже ефективно з точки зору складності простору, оскільки, швидше за все, у вас є велика кількість витрат на зберігання вказівників.
Патрісія Трі
Це, здається, займає менше місця, ніж звичайний Trie, оскільки ви в основному уникаєте витрат на зберігання покажчиків, але я трохи переживаю за фрагментацію даних у випадку дуже великих словників, як у мене.
Дерево суфіксу
Я не впевнений у цьому, здається, що деякі люди вважають його корисним у видобутку тексту, але я не дуже впевнений, що це дасть у плані продуктивності перевірки орфографії.
Трирічне дерево пошуку
Вони виглядають досить приємно і за складністю повинні бути близькими (кращими?) До Патрісії Тріс, але я не впевнений, що стосується фрагментації, якщо це буде краще гіршого, ніж Патрісія Тріс.
Вибух дерева
Це здається гібридним, і я не впевнений, яку перевагу він мав би над Трісом тощо, але я кілька разів читав, що це дуже ефективно для пошуку тексту.
Я хотів би отримати деякий відгук щодо того, яку структуру даних найкраще використовувати в цьому контексті та що робить її кращою за інші. Якщо я пропускаю деякі структури даних, які були б ще більш підходящими для перевірки орфографії, я також дуже зацікавлений.