Это просто проблема, которая выглядит довольно интересно. Я попытался задуматься над этим, но не смог найти способ решить эту проблему в эффективные сроки. Возможно, мои идеи все еще растут ... в любом случае вопрос следующий.Чтобы найти все возможные перестановки данной строки
Требуется выяснить все возможные перестановки данной строки ....... Также, поделитесь, если возможно вариации этой проблемы.
Я нашел решение в сети, которое использует рекурсию .. но это не удовлетворяет, так как выглядит немного ошибочным.
программа выглядит следующим образом: -
void permute(char s[], int d)
{
int i;
if(d == strlen(s))
printf("%s",s);
else
{
for(i=d;i<strlen(s);i++)
{
swap(s[d],s[i]);
permute(s,d+1);
swap(s[d],s[i]);
}
}
}
Если эта программа хорошо выглядит (это дает ошибку, когда я побежал), то просьба представить небольшой пример, чтобы понять это, как я до сих пор развивается рекурсию концепции ..
Любой другой эффективный алгоритм, если существует, то, может также обсуждаться ....
И пожалуйста ,, это не HW ........
Спасибо .............
Не будет ли это работать в n! время по определению? – Tyler
Нет, это не 'n!': (1) 'n × n!' Для 'printf' в каждом листе рекурсии и (2) примерно' n² × n! 'Для повторяющегося' strlen' на каждом уровень рекурсии. Вы можете легко избавиться от дополнительного фактора 'n' в (2), запрограммировав немного более тщательно. –