Перестановки набора данных в Java - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть 10000 предметов в наборе, каждый из которых должен быть превращен в триады. Мне нужен алгоритм для эффективного поиска каждой триады.

Например:

{A, B, C, D, ...}

1.AAA 2 .AAB 3.AAC 4.AAD ...

вплоть до ZZY, ZZZ.

Метод, который я использую, очень неэффективен, я создал вложенный forl oop из 3, который перебирает массив, который имеет время выполнения O (N ^ 3) и ужасен с точки зрения производительности. Какой тип go и структура данных будет лучше для этого? Спасибо

1 Ответ

1 голос
/ 09 февраля 2020

Функция для печати всех перестановок длины K из набора из n символов с повторением символов:

static void printKLengthPerm(char[] set, String prefix, int n, int k) 
{ 
    if (k == 0) 
    { 
        System.out.println(prefix); 
        return; 
    } 

    for (int i = 0; i < n; i++) 
    { 
        String newPrefix = prefix + set[i]; 
        printKLengthPerm(set, newPrefix, n, k - 1); 
    } 
}

Вызов функции для печати всех перестановок длины 3 из набора все прописные буквы sh алфавиты:

char[] set = new char[26]; 
for(int i = 0; i < 26; i++)
  set[i] = (char)(i+65);
int n = set.length; 
printKLengthPerm(set, "", n, 3); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...