Проблема, которую я должен решить, состоит в том, чтобы создать все возможные слова, используя согласные и гласные, где у меня есть два списка массива:
Первый A = {a, e, i, o, u}
, составленный только из гласных.Вторые B = {b, c, d, f, g, h, j, k, l, m, n, p, q, r, t, v, x, y, w, z}
, ведут себя согласными.
С этими двумя мне нужно сгенерировать все возможные комбинации слов, используя согласную и гласную, например:
01 - babebi, 02 - babebu ...
И используятретий массив, мне нужно добавить числовое значение в конец каждого слова со следующим списком массивов: C = {0,1,2,3,4,5,6,7}
, где можно будет использовать только два алгоритма, например:
01 - babebi01, 02 - babebi02, 03 - babebi03 ...
безповторяющиеся числа и для всех слов.
Для этого у меня есть следующий код:
С помощью этого метода я генерирую все слова, используя согласные и гласные:
Где я генерирую всепары, согласный и гласный.
private void getRandomPairs(Values obj) {
for (String vowel: obj.getVowels()) {
for (String consonat: obj.getConsonants()) {
pairsLetters.add(consonat + vowel);
}
}
}
Затем со всеми парами, сохраненными в списке, я генерирую все слова.
private List<String> generateWord() {
for (int i = 0; i < pairsLetters.size(); ++i){
for (int j = 0; j < pairsLetters.size(); ++j){
if (pairsLetters.get(i).equals(pairsLetters.get(j))) continue;
for (int k = 0; k < pairsLetters.size(); ++k){
if ((pairsLetters.get(i).equals(pairsLetters.get(k))) || (pairsLetters.get(j).equals(pairsLetters.get(k)))) continue;
words.add(pairsLetters.get(i) + pairsLetters.get(j) + pairsLetters.get(k));
}
}
}
return words;
}
С помощью этого другого метода я генерирую все возможные комбинациичисел без повторения с использованием двух алгоритмов:
private void generateNumbersPairs(Values obj) {
for (int i = 0; i < obj.getNumbers().size(); ++i){
for (int j = 0; j < obj.getNumbers().size(); ++j){
if (obj.getNumbers().get(i).equals(obj.getNumbers().get(j))) continue;
pairNumbers.add(obj.getNumbers().get(j)+obj.getNumbers().get(i));
pairNumbers.add(obj.getNumbers().get(i)+obj.getNumbers().get(j));
}
}
}
Это сделано, и используется этот метод для генерации всех комбинаций слов с номером значения в конце:
Генерация слов
private void getAllWords (List <String> words, List <String> pairNumbers) {
for (int letter = 0; letter <6; ++ letter) {
for (int number = 0; number <pairNumbers.size (); ++ number) {
if (words.equals (pairNumbers.get (number))) continue;
saveNewWord (words, pairNumbers, number);
}
}
}
Сохранение слов
private void saveNewWord (List <String> pairs, List <String> pairNumbers, int number) {
String word = String.join ("", words);
allWords.add (word + pairNumbers.get (number));
}
Моя проблема в том, что, поскольку количество слов огромно, когда мой метод проходит через «для», я не могу выполнить такой расчет,потому что метод потребляет больше памяти, чем у меня.Был бы какой-нибудь способ улучшить этот алгоритм?Может ли кто-нибудь помочь мне с этим?