具有任意初始状态的 Steinhaus–Johnson–Trotter 算法

2024-01-06

如果初始数组中的值未排序,则标准 Steinhaus–Johnson–Trotter 中必须更改哪些内容?例如,我的初始数组是 312,我想生成以下结果:

312
321
231
213
123
132

我可以引入一个额外的数组来定义每个数字的初始权重,例如w[3]=1、w[1]=2 和 w[2]=3,然后比较权重而不是算法中的值,但是没有这个是否可以做到 - 我想将算法应用于问题这个额外的数组哪里不方便?我正在寻找 C 语言的解决方案。


只需像平常一样对索引数组应用 Johnson-Trotter 算法即可。然而,不是显示索引,而是在包含任意顺序的任意元素的单独数组中显示每个相应索引处的项目。

举一个简单的例子(不是用 C 语言,但想法是一样的):

from trotter import Permutations

index_permutations = Permutations(3, [0, 1, 2])

items = [3, 1, 2]

print("Indices -> Items")
for indices in index_permutations:
    print("{} -> {}".format(indices, [items[i] for i in indices]))

Output:

Indices -> Items
[0, 1, 2] -> [3, 1, 2]
[0, 2, 1] -> [3, 2, 1]
[2, 0, 1] -> [2, 3, 1]
[2, 1, 0] -> [2, 1, 3]
[1, 2, 0] -> [1, 2, 3]
[1, 0, 2] -> [1, 3, 2]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有任意初始状态的 Steinhaus–Johnson–Trotter 算法 的相关文章

随机推荐