我正在开发一个15件滑动拼图的实现,我一直坚持这一点我必须确保我只是将其改成“可解决的排列” - 在我的情况下,右下方的空白拼贴角落:甚至是排列。
我已经阅读了许多类似的线程,例如How can I ensure that when I shuffle my puzzle I still end up with an even permutation?,并且理解我需要“计算排列中反转次数的奇偶校验”。
我用Javascript编写,并使用Fischer-Yates算法随机化我的数字:
var allNrs = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];
for (var i = allNrs.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp1 = allNrs[i];
var temp2 = allNrs[j];
allNrs[i] = temp2;
allNrs[j] = temp1;
}
我如何计算这么多帖子中我读过的排列或奇偶校验值?
答案 0 :(得分:2)
只计算您正在进行的互换数量。如果交换的数量是偶数,则排列具有偶数奇偶校验。
例如,这些是3个数字的偶数排列。请注意,您需要0或2次交换才能从[1,2,3]中获取它们:
1,2,3
2,3,1
3,1,2
答案 1 :(得分:0)
你做的两个数字的每次交换都会翻转奇偶校验。如果你的数量是偶数,你就是好人。如果你有一个奇数,你就不是。
这基本上是奇偶校验的意思,它是群论的一个(简单)定理,任何两种获得相同混洗的方法都具有相同的奇偶性。