Я пытаюсь написать фрагмент кода, который будет генерировать перестановку, или некоторые серии символов, которые все разные рекурсивно.Как уменьшить время выполнения этого конкретного решения?
def getSteps(length, res=[]):
if length == 1:
if res == []:
res.append("l")
res.append("r")
return res
else:
for i in range(0,len(res)):
res.append(res[i] + "l")
res.append(res[i] + "r")
print(res)
return res
else:
if res == []:
res.append("l")
res.append("r")
return getSteps(length-1,res)
else:
for i in range(0,len(res)):
res.append(res[i] + "l")
res.append(res[i] + "r")
print(res)
return getSteps(length-1,res)
def sanitize(length, res):
return [i for i in res if len(str(i)) == length]
print(sanitize(2,getSteps(2)))
Так заносить бы
"LL", "LR", «RR, "RL" или некоторая перестановка ряда.
Я могу видеть сразу же, что эта функция вероятно, работает довольно медленно, потому что мне нужно перебирать весь массив. Я пытался сделать процесс настолько эффективным, насколько мог, но это насколько я могу получить. Я знаю, что во время прогона происходят некоторые ненужные вещи, но Я не знаю, как сделать это намного лучше. Поэтому мой вопрос заключается в следующем: что бы я сделал, чтобы повысить эффективность и сократить время работы этого кода?
edit = Я хочу, чтобы иметь возможность переносить этот код на java или какой-либо другой язык, чтобы понять концепцию рекурсии, а не использовать внешние библиотеки и решить мою проблему, не понимая ее.
ли стандартная библиотека предоставляет вам любые инструменты, которые вы могли бы полностью использовать или построить решение? http://docs.python.org/2/library/itertools.html – dm03514
Одной из вещей, которая могла бы улучшить производительность, было бы изменение «if res == []» на «if not res», поскольку пустые списки оцениваются в Ложно в Python. –
Благодарим вас за это, но я хочу, чтобы решение было рекурсивным, поскольку я пытаюсь создать своего рода «доказательство концепции» для рекурсии в этом фрагменте кода. Кроме того, я хочу, чтобы иметь возможность переносить это на java или C++, чтобы действительно понять концепцию больше, чем синтаксис. – Swarage