我有一个关联数组,其中我存储键值对,其上我可以执行交换操作识别交换序列:产生相同结果
swap(a, b) // a <-> b
{
temp = map.value(b);
map.value(b) = map.value(a);
map.value(a) = temp;
}
现在,给定的交换的序列,我想要知道我执行的下一个交换是否导致关联阵列进入之前的状态:
eg序列:
1 <-> 2
2 <-> 1
和
1 <-> 2
2 <-> 3
3 <-> 1
2 <-> 3
都无能为力。
我希望能够通过查看交换序列本身来检测到这一点。我猜测有这样的问题的数学表述,但我似乎无法弄清楚。
我观察到的第一个例子是一个环和第二已经一个循环,所以“有向图中检测环路”可能是解决方案的一部分,但我不知道这将如何适应进入我正在寻找的算法。
该算法还应该交插无关互换工作,这是最简单的例子:
1 <-> 2
100 <-> 200
2 <-> 1
200 <-> 100
我修复了标签以更好地反映问题。谢谢! – ArjunShankar