РЕДАКТИРОВАТЬ:
Я следовал вашим хорошим советам и использовал структуру данных trie для хранения своего словаря. Структура, которую я выбрал, это эта для заинтересованных людей.
Но сейчас у меня есть еще одна проблема: построение моей структуры данных три при каждом запуске моего приложения очень долго! Может быть, мой словарь слишком велик, или, может быть, выбранная мною реализация не подходит для простого словаря.
Так есть ли способ сохранить эту структуру даже после закрытия приложения, например, зарегистрированной базы данных, или, если вы думаете, что проблема вызвана реализацией, вы можете порекомендовать мне другую?
У меня серьезная проблема с проектом моего андроида.
Цель здесь - вычислить все слова, которые можно составить из серии из 6 букв
Для этого в моем BDD есть две таблицы:
- 'words' с двумя столбцами: '_id'and' mots '
- и временная таблица 'temp'
с такими же столбцами.
'words' содержит все слова из словаря (он огромен), а 'temp' содержит все возможные комбинации букв, которые можно составить из 6 букв (по крайней мере, из 3 букв).
Я пытаюсь выбрать в таблице «temp» слово, которое является реальным, то есть слово, которое находится в таблице «words». Вот мой код для этого:
Я делаю первый выбор слов, которые содержат хорошие буквы (используются как минимум 3 буквы)
db.execSQL("CREATE TABLE temp2 (_id integer primary key autoincrement, mots text not null);");
db.execSQL("INSERT INTO temp2 (_id, mots) SELECT * FROM words WHERE mots like '%"+lettres.tab_char.get(0)+"%' OR mots like '%"+lettres.tab_char.get(1)+"%' "
+ "OR mots like '%"+lettres.tab_char.get(2)+"%' OR mots like '%"+lettres.tab_char.get(3)+"%' OR mots like '%"+lettres.tab_char.get(4)+"%' "
+ "OR mots like '%"+lettres.tab_char.get(5)+"%';");
(lettre.tab_char - это ArrayList (Character), который содержит буквы, используемые для создания комбинаций в temp)
Я делаю соединение между таблицами 'temp2' и 'temp':
String MY_QUERY = "SELECT temp2._id, temp2.mots FROM temp2 INNER JOIN temp ON temp2.mots = temp.mots;";
Cursor test = db.rawQuery(MY_QUERY, null);
После этого я помещаю свои значения в список.
Это работает, но действительно очень медленно: не могли бы вы помочь мне, пожалуйста?