我正在研究 15 block 滑动拼图的实现,我卡在了这一点上,我必须确保我只洗牌到“可解决的排列”——在我的例子中,右下角的空方 block Angular 落:偶数排列。
我读过许多类似的主题,例如 How can I ensure that when I shuffle my puzzle I still end up with an even permutation?并了解我需要“计算排列中反转次数的奇偶性”。
我正在用 Javascript 编写,并使用 Fischer-Yates-algorithm 来随机化我的数字:
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;
}
我如何实际计算我在这么多帖子中读到的这个排列或奇偶校验值?
最佳答案
只需计算您进行的交换次数即可。如果交换次数为偶数,则排列具有偶校验。
例如,这些是 3 个数字的偶数排列。请注意,您需要 0 或 2 次交换才能从 [1,2,3] 获得它们:
1,2,3
2,3,1
3,1,2
关于javascript - 如何实际计算奇偶校验是偶数还是奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16745282/