说我有一个我希望改组的列表[a, b, c, d, e, f, g]
。
我想找到一种随机置换数据的算法,其限制是任何元素都不会超过其起始位置的N个空格。因此,对于N = 2
,a
将永远不会出现在起始列表的第三个位置下方。使用N = 0
,算法将返回列表而不进行任何更改,而N = len(list) - 1
,它的功能与普通的混洗算法完全相同
例如,使用python语法:
>>> restrictedShuffle([a, b, c, d, e, f, g], N=2)
[a, c, b, f, d, g, e]
>>> restrictedShuffle([a, b, c, d, e, f, g], N=1)
[b, a, c, e, d, f, g]
>>> restrictedShuffle([a, b, c, d, e, f, g], N=0)
[a, b, c, d, e, f, g]
这样的算法是否存在?