Я должен написать программу словаря в качестве семестрового проекта для курса бакалавриата по структурам данных и алгоритмам, и я ожидаю найти наиболее подходящее решение (структура данных) для этой проблемы.Какая структура данных наиболее подходит для реализации Словаря?
Я рассмотрел использование либо хеш-таблицы , либо trie. Мне предложили кто-то использовать treaps, но пока не смогли их изучить.
В моей базе данных содержится около 100 тыс. Различных слов и их значений. Основные функциональные возможности программы, как ожидается, чтобы обеспечить являются вставки, обновление, удалить и Поиск слово/определение. Если мне удастся сжать автозаполнение и исправление заклинания, это будет дополнительный бонус.
Итак, мой вопрос, учитывая мои требования, какая структура данных лучше всего подходит для моих целей. Когда я говорю «лучше», я прошу структуру данных, которая имеет лучшую сложность во время выполнения и низкую стоимость (требования к памяти).
Кроме того, я хотел иметь алгоритм, который возвращал все слова, начинающиеся с данного префикса. Например, скажем, я вызываю вызов функции dictionary.getWordsStartingWith("fic")
, он должен вернуть список всех слов, начинающихся с fic
, таких как fiction
, fictitious
, fickle
и т. Д. Я знаю, что могу это сделать, если я реализую свой словарь как trie, я мог бы это сделать , но можно ли это сделать с помощью хеш-таблицы?
Вы изучали сбалансированное дерево поиска? Подобно red-black или avl – smac89
Требования к автозавершению указывают в сторону какой-либо формы дерева или trie, а также от хеш-таблицы. Хэш-таблица не поможет в поиске всех слов, начинающихся с данного префикса, в то время как древовидная структура даст это более или менее бесплатно. –
@ Smac89 Да, я посмотрел на деревья AVL, но я думаю, что они могут быть не такими эффективными, как хэш-таблица. Но опять же, хэш-таблица ограничивает мою функциональность. –