我想要生成字母A - G(七)的所有可能的排列,而Heap的算法据称可以实现这一点。
但是,当我查看Wikipedia page中的伪代码时,我看到了这一点:
procedure generate(n : integer, A : array of any):
if n = 1 then
output(A)
else
for i := 0; i < n - 1; i += 1 do
generate(n - 1, A)
if n is even then
swap(A[i], A[n-1])
else
swap(A[0], A[n-1])
end if
end for
generate(n - 1, A)
end if
....并且不知道它意味着什么。
所以,我知道如果我有七个字母(A-G),它会显然找到前六个字母的所有可能的排列,而最后的字母保持不变。
意思是,当G在最后时,它会找到A-F的所有可能的permations,直到每个字母结束为止。
鉴于,我有七个字母,这意味着“N”是奇数,因此我总是用第一个插槽中的字母切换结束字母(第七个字母)。
但是(而且我知道这不是它的工作原理,但它是我从中得到的全部)这不会导致相同的两个字母被不断交换并且没有不同的排列吗?
我在过去的4个小时内搜索过谷歌搜索结果,找不到任何可以逐行解释上述伪代码的内容。
非常感谢帮助!!