如何实际计算奇偶校验是偶数还是奇数?

时间:2013-05-25 00:27:41

标签: javascript shuffle

我正在开发一个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;
}

我如何计算这么多帖子中我读过的排列或奇偶校验值?

2 个答案:

答案 0 :(得分:2)

只计算您正在进行的互换数量。如果交换的数量是偶数,则排列具有偶数奇偶校验。

例如,这些是3个数字的偶数排列。请注意,您需要0或2次交换才能从[1,2,3]中获取它们:

1,2,3
2,3,1
3,1,2

答案 1 :(得分:0)

你做的两个数字的每次交换都会翻转奇偶校验。如果你的数量是偶数,你就是好人。如果你有一个奇数,你就不是。

这基本上是奇偶校验的意思,它是群论的一个(简单)定理,任何两种获得相同混洗的方法都具有相同的奇偶性。