对于我正在使用功能语言编写的应用程序,我想实现一个确定性的改组算法,以便给定相同的种子,它将返回相同的改组数组,并删除了X位置的某些元素元素最初不在数组中。例如:如果shuffle([1,2,3,4,5], seed) = [4,2,3,1,5]
然后shuffle([1,3,4,5], seed)
应该返回[4,3,1,5]
。但是在尝试重新发明轮子之前,我必须问:这种算法是否存在?(也想知道此属性是否有名称)。感谢您的任何投入。
如果您的随机播放产生原始列表或该列表反转(取决于种子),它将具有您描述的属性。其他所有子列表,并不是所有子列表都与它们对应的改组匹配时,将使元素以相同的方式移动。例如,考虑shuffle([1,2,3])
。在下表中,每一列都是不同的洗牌。对于每种情况,这3个子列表中的一个都有一个随机播放,可将元素的移动方式与其他两个不同。
shuffle([1,2,3]) = [1,3,2] [2,1,3] [2,3,1] [3,1,2]
shuffle([1,2]) = [1,2] [2,1]* [2,1] [1,2]*
shuffle([1,3]) = [1,3] [1,3] [3,1] [3,1]
shuffle([2,3]) = [3,2]* [2,3] [2,3]* [3,2]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句