我想生成字母 A - G(七)的所有可能排列,据称 Heap 的算法使这成为可能。
但是,当我查看Wikipedia 页面上的伪代码时,我看到了:
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
....不知道这意味着什么。
所以,我知道如果我有七个字母(AG),它显然会找到前六个字母的所有可能排列,而最后的字母保持不变。
意思是,它会在 G 位于末尾时找到 AF 的所有可能排列,并一直这样做直到每个字母都位于末尾。
鉴于,我有七个字母,这意味着“N”是奇数,因此我总是将结束字母(第七个)与第一个插槽中的字母切换。
但是(我知道这不是它的工作原理,但这就是我从中得到的全部)不会导致相同的两个字母不断交换并且没有不同的排列吗?
在过去的 4 个小时里,我搜索了谷歌搜索结果,但找不到任何可以逐行解释上述伪代码的内容。
非常感谢您的帮助!