我有一個關聯數組,其中我存儲鍵值對,其上我可以執行交換操作識別交換序列:產生相同結果
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