2010-08-10 55 views
1

我嘗試過一種算法,但無法做到這一點。這裏是問題:使用旋轉和交換對二維環形陣列進行排序

有16個元素,按四種類型(a,b,c和d)分組。我們也有四組,A,B,C和D.

在初始狀態下,四組各有4個隨機元件,例如:

A: c, c, a, d 
B: b, b, a, a 
C: b, b, c, c 
D: d, d, d, a 

元素組成的組中的順序重大。

有允許兩個操作:

1)旋轉所述組的()交換的基團中兩個相鄰元件與相應的元素在兩個方向上),例如:

c, c, a, d -> d, c, c, a 

2在相鄰的組的元素,考慮到第一個和最後組和元件也相鄰,所以:

A: (c, c), a, d 
B: (b, b), a, a 

-> 

A: (b, b), a, d 
B: (c, c), a, a 

A: c), c, a, (d 
D: d), d, d, (a 

-> 

A: d), c, a, (a 
D: c), d, d, (d 

該算法的目標是將元素放入其相應的組(A: a, a, a, a等)。該算法不必在時間和解決方案方面達到最優,但它的平均速度應該相當快(即沒有蠻力)。

任何人都可以幫忙嗎?這個算法是多項式嗎?

+0

試圖解決這樣的事情:http://en.wikipedia.org/wiki/Pocket_Cube? :-) – ThinkJet 2010-08-10 12:16:41

+0

你可以用一系列步驟進行單個換位嗎?即如果第一行是baaa,第二行是abbb,是否有可能得到解決方案?我懷疑有一個平等的論點說你不能,但我看不到它。所述奇偶論可能闡明瞭可解案例中的解決方案。 – deinst 2010-08-10 14:48:47

+0

當然有:baaa - > abaa,abaa - > aaba,交換第一對,我們得到abba&aabb,從那裏很簡單。 – GhassanPL 2010-08-10 15:03:58

回答

4

我認爲這總是可能的。首先考慮一個字母(比如b)只出現在兩行X和Y的情況。我們可以通過交換操作確保X和Y相鄰。

情況下,我)

X: b - - - 
Y: - b b b 

我們可以通過

Cyclich轉變X.

X: - - b - 
Y: - b b b 

掉期中間

X: - b b - 
Y: - - b b 

現在循環移位和交換使X的所有B的。

案例二)

X: b - b - 
Y: b - b - 

使其

X: - b - b 
Y: b - b - 

交換最後兩個。

另一種情況是微不足道的。

現在給出2,3或4行中特定字母的任何分佈,我們可以確保它只出現在兩行中。我會把它留給你,因爲它很容易看到,很難打字!

(如果只出現在一排,我們的工作主要是爲信做)

這樣的算法將是

確保只出現在兩行。確保行是A和B(稍後交換)。

現在執行上面的步驟使A成爲aaaa。

忽略A.

考慮B,C,D。確保b只出現在兩行中。使B如上所述是bbbb。

忽略B.

鑑於C和d,您可以使用上面使C是CCCC,d將dddd完整。

2

我最初的想法是嘗試某種形式的動態編程 - 這個問題看起來與Edit Distance比較相似,因爲您擁有一組有限的操作和一個已知的期望結束狀態。動態編程方法會產生多時間算法。但是,正如我所說,這正是我開始尋找算法的地方,我不知道這種方法是否真的有效。如果一段時間後我會有更深的思考。

希望這有助於!