gpt4 book ai didi

python - 具有重复元素的完全排列的非递归算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:09 24 4
gpt4 key购买 nike

我在Python中通常使用递归算法如下:

def permutate(array, t, n):             

if t == n:
for i in range(n):
print array[i]

return

for j in range(t,n):
flag = 1
for r in range(t,j):
if array[r] == array[j]:
flag = 0
break

if flag == 0:
continue
else:
array[j],array[t] = array[t],array[j]
permutate(array,t+1,n)
array[j],array[t] = array[t],array[j]

这个很简洁。但我希望找到一种方便的非递归算法来对重复元素进行全排列?

最佳答案

这是“非递归化”递归函数的通用方法:假设我们有以下递归函数:

RecFunc (parameters)
...
...
var x = RecFunc (other parameters)
...
...
EndFunc

要“取消递归化”它,您可以使用这样的堆栈:

NonRecFunc (parameters)
stack MyStack;
MyStack.push (InitialValue);
While (MyStack is non empty)
var S = MyStack.pop;
# begin operations with S
....
# results are x_1, ..., x_n
for x_i = x_1 to x_n
MyStack.push (x_i);
endfor
endWhile
EndFunc

在您的例子中,堆栈包含一对由数组和整数组成的对。初始值为input中的数组,int m=0。操作可能看起来像这样

for i = m to n
for j = i+1 to n
if array[i] == array[j]
continue
endif
array_c = copy of array
permute entries i and j in array_c
push (array_c, m+1) in the stack
endfor
endfor

祝你好运!

关于python - 具有重复元素的完全排列的非递归算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com