2013-04-27 2 views
0

Я искал это, прежде чем публиковать, но я не мог ничего прекратить, что помогает мне. Я использую java. У меня есть файл из 300 000 слов (уже отсортированный в алфавитном порядке). Я хочу загрузить эти слова в структуру и выполнить поиск, если слово, которое я пройду, существует или нет. Я хочу что-то лучшее для поиска строк. Я видел около попыток (деревья суффиксов) и красно-черные деревья (TreeSet - так как я хочу только клавиши, а нет значений в java).Оптимальная структура данных поиска

Пожалуйста, если вы считаете, что ответ дает некоторое объяснение эффективности вашего предложения. Спасибо.

EDIT структура будет создана при загрузке файла, и не будет никаких дальнейших добавление слов. Чувствительность к регистру не требуется. Я не знал, что это такое. Я знаю сейчас, но я не знаю, поможет ли это. Файл - это словарь (без перевода, только слова данного языка).

+0

. Кейс-чувствительность пункт? и используете ли вы его использование? Планируете ли вы добавить больше слов? Лично я использую попытки. –

+1

Если вам нужно использовать классы JDK, я бы пошел на 'Set '. Вы можете создать резервную копию некоторых его реализаций: 'HashSet ', 'LinkedHashSet ' или 'TreeSet ' в зависимости от ваших потребностей при использовании 'Set '. –

+0

Мне не нужно, но мне было бы легче. Почему бы вам не опубликовать это как ответ? Я отредактировал свой вопрос. Просьба представить ваше мнение. Как вы это сделаете? Спасибо за вашу помощь – alkis

ответ

2

Хэш будет вашим оптимальным решением. Он выполняет поиск в постоянное время, как и для дерева, которое является log (n).

Вы также можете сохранить в постоянное время, если вы объявите набор достаточно большим при создании.

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

создание будет во времени: п, и вам нужно будет иметь упорядоченный набор, содержащийся в отдельной структуре.

Это решение, оптимизированное для поиска дубликатов не для памяти или для добавления данных.

+1

Я бы порекомендовал вам ссылку на 'HashSet', так как OP не имеет пары ключ/значение. – jlordo

+0

'LinkedHashSet' также работает с использованием' hashCode'. –

+0

С вашим редактированием я бы сказал, что HashMap достаточно. Вы создаете множество операций с n (300 000) и можете оттуда читать с помощью одной (постоянной) операции. – Glyb