У меня есть этот код. Не уверен, что это работает, потому что время выполнения программы все еще продолжается.Перестановки английского алфавита заданной длины
void permute(std::vector<std::string>& wordsVector, std::string prefix, int length, std::string alphabet) {
if (length == 0) {
//end the recursion
wordsVector.push_back(prefix);
}
else {
for (int i = 0; i < alphabet.length(); ++i) {
permute(wordsVector, prefix + alphabet.at(i), length - 1, alphabet);
}
}}
, где я пытаюсь получить все комбинации символов в английском алфавите определенной длины. Я не уверен, правильный ли подход на данный момент.
Алфавит состоит из A-Z в строке длиной 26. WordsVectors содержит все различные комбинации слов. префикс должен проходить через рекурсивно до тех пор, пока не будет сделано слово, а длина будет самоочевидной.
Пример, если я даю длину 7 функции, я ожидаю размер 26 x 25 x 24 x 23 x 22 x 21 x 20 = 3315312000
, если я прав, следуя формуле для перестановок. Я не думаю, что программы предназначены для запуска так долго, чтобы либо я попадал в бесконечный цикл, либо что-то не так с моим подходом. Пожалуйста, порекомендуйте. Благодарю.
Я бы не использовал рекурсии на этом. Учитывая количество вызовов функций, я удивлен, что вы не попали в переполнение стека. – NathanOliver
программа займет много времени, поскольку сложность задается выбором n (n <= 26) вещей из 26, а затем ее перестановкой. Он будет очень быстрым для n, и, следовательно, сложность высока. Его не бесконечный цикл просто займет невероятно длинный – sashas
У вас достаточно памяти для хранения слов? –