Код, который я написал, кажется, выглядит плохо с асимптотической мерой времени и пробега Я получаю T (N) = T (N-1) * N + O ((N-1!) * N), где N - размер ввода. Мне нужно посоветовать, чтобы оптимизировать егоПереведите строку, чтобы напечатать все возможные слова
Поскольку это вопрос интервью алгоритм, основанный мы должны реализовать логику наиболее эффективным способом, без использования каких-либо библиотек
Вот мой код
def str_permutations(str_input,i):
if len(str_input) == 1:
return [str_input]
comb_list = []
while i < len(str_input):
key = str_input[i]
if i+1 != len(str_input):
remaining_str = "".join((str_input[0:i],str_input[i+1:]))
else:
remaining_str = str_input[0:i]
all_combinations = str_permutations(remaining_str,0)
for index,value in enumerate(all_combinations):
all_combinations[index] = "".join((key,value))
comb_list.extend(all_combinations)
i = i+1
return comb_list
Не могли бы вы решить отношение повторения? Я забыл, как это сделать. Кроме того, когда вы говорите «переставить ... для печати всех ... комбинаций», я предполагаю, что вы на самом деле не подразумеваете комбинации (поскольку существует только 1 n-комбинация набора n элементов), и вместо этого вы имеете в виду все перестановки? Учитывая, что есть n! перестановки строки над n различными (!) буквами, вы не получите ниже экспоненциальной сложности в общем случае (ни время, ни пробел); однако вы можете подсчитать для каждого символа количество появлений до фактического создания перестановок. –
Скажите k_i - количество появлений буквы i в вашей строке; подсчитывая видимость заранее (линейное время и пространство с использованием гистограммы), вы сохраните коэффициент «продукт над k_i! для всех символов i в строке» (обратите внимание на факториал). –
@ G.Bach спасибо за ответ, я догадываюсь, что трудно повторить решение, но я согласен с u, что, поскольку вопрос требует всех перестановок, он не может быть меньше n! и определенная сложность для запуска программы, но время работы моей программы выглядит очень плохо, я думаю, – Sandy