Я написал следующий алгоритм поиска всех возможных перестановок n уникальных алфавитов.Алгоритм поиска всех перестановок для n алфавитов
Set<String> results = new HashSet<String>();
int size = 1;
//find the total permutations possible
for(int i=0;i<array.length;i++){
size*=(i+1);
}
// i is the number of items remaining to be shuffled.
while(results.size()<size){
for (int i = array.length; i > 1; i--) {
// Pick a random element to swap with the i-th element.
int j = rng.nextInt(i); // 0 <= j <= i-1 (0-based array)
// Swap array elements.
char tmp = array[j];
array[j] = array[i-1];
array[i-1] = tmp;
}
StringBuffer str = new StringBuffer();
for(int i=0;i<array.length;i++)
str.append(array[i]);
results.add(str.toString());
}
System.out.println(results);
1) Есть ли что-нибудь, что нужно сделать для улучшения этого алгоритма?
2) Какова временная сложность этого алгоритма?
PS: Я приношу свои извинения людям, которые отреагировали на мой previous post. Я попробую самостоятельно, прежде чем обращаться за помощью.
Гораздо лучше, но по-прежнему рекомендуется добавить тег [домашняя работа] самостоятельно. Кроме того, сделайте первый удар по сложности самостоятельно. –
Сколько будет перестановок? Это должно дать вам представление о нижней оценке сложности. –
Было бы хотя бы n! т.е. факториальные (n) перестановки. Следовательно, нижняя граница будет равна n !? –