У меня есть проект, над которым я работаю, и который я планирую реализовать как на Java, так и на ActionScript, поэтому я пометил оба языка.
Чтобы выполнить этот проект, мне нужно будет создать набор всех слов из заданного словаря заданной длины. Затем, после выбора буквы, мне нужно создать подмножества слов на основе ОБА положения буквы и частоты буквы. Например, если набор содержит
{this, time, pate, malt, that, teat, tote}
и пользователь выбирает букву «т», мне нужно разделить набор на подмножества так, чтобы:
Subset 1 (t___) = {this, time}
Subset 2 (__t_) = {pate}
Subset 3 (___t) = {malt}
Subset 4 (t__t) = {that, teat}
Subset 5 (t_t_) = {tote}
для каждого существующего подмножества (обратите внимание, что (_t__) не существовало, поэтому подмножество не было создано).
Какая структура данных была бы лучшим выбором для такой ситуации? Я программирую это как для java, так и для ActionScript, поэтому в идеале это была бы структура, которую я мог бы использовать для них обоих. Тем не менее, я не против полностью изменить структуры данных между языками, если это необходимо. Эти две программы будут отдельными реализациями для моей собственной практики; кроссплатформенная функциональность не требуется.
Некоторые вещи, которые я рассмотрел:
Попытки: обычно, когда я работаю с наборами слов, я использую узлы с Trie. Однако я не думаю, что это сработает в этом случае, потому что нет эффективного/элегантного способа разделить Trie на слова в зависимости от положения букв. Было бы ужасно неэффективно проходить по дереву для всего, что имеет конкретную букву в третьей позиции, а не в каких-либо других позициях, например. Так что не думаю, что попытки сработают.
Массивы: самые основные структуры данных. Легко и просто использовать. Вероятно, я мог бы заставить это работать, сохранив набор слов в виде массива строк, а затем используя серию сравнений, используя charAt() для строк, чтобы разделить их на подмножества. Однако это также не кажется очень элегантным, и я полагаю, что можно было бы использовать лучшую структуру.
ArrayLists: аналогичная проблема с массивами. Я не уверен, что реализация List все равно чем-нибудь поможет.
Словари/карты: единственное преимущество в том, что я использовал их раньше. Я вообще не думаю, что они подходят к ситуации.