2013-04-08 89 views
0

3掛鉤(或棒,或任何你稱他們)的迭代算法是重複以下兩點:
1.將最小的磁盤向右/向左移動(如果奇數/偶數)
2.讓一個可能的移動而不觸及最小的磁盤河內塔反覆n> 3掛鉤

我的問題是 - 是否有一些類似的算法n> 3釘?

我無法在互聯網上找到這個(至少迭代)。我自己也弄不清楚什麼。上面的算法不起作用 - 它會無意中移動磁盤。

我知道我以前曾發佈過2種相關的問題,但您並不歡迎他們,所以在您投降之前 - 只需在評論中寫下我自己研究更多信息的評論,而我刪除此線程。

+1

通過使用顯式堆棧,您始終可以將遞歸算法轉換爲迭代算法。 – nhahtdh 2013-04-08 15:50:08

+0

這是唯一的方法,或者至少是最好的解決方案? – user2251921 2013-04-08 15:51:59

+0

是否[此](http://stackoverflow.com/questions/2870684/how-does-this-iterative-tower-of-hano-i-work-c)覆蓋它? – Dukeling 2013-04-08 15:52:59

回答

2

對於3-PEG河內問題用正> 1盤(第n == 1情況下是微不足道的)一般的遞歸算法是:

  1. 移動n-1個從源栓盤到第三掛鉤(不是來源或目標)
  2. 將最大的磁盤移動到目標掛鉤。
  3. 將n-1個圓盤從第三個釘子移到目標釘子。

超過3個掛鉤,算法是相同的。只需用「任何未使用的掛鉤」替換「第三掛鉤」即可。

請注意,算法不使用「向左移動」或「向右移動」等術語。

正如@nhahtdh在評論中指出的那樣,任何遞歸算法都可以通過標準方法轉化爲迭代算法。

+0

這實際上並沒有回答這個問題,即關於'n> 3'釘住問題。 – rici 2013-04-08 16:03:22

+1

@rici - 我明確談論n> 3釘住問題;我還提到OP可以使用教科書方法將遞歸算法轉換爲迭代算法。這不能回答這個問題嗎? – 2013-04-08 16:12:19

+0

的確如此,你呢。道歉。你根本不用擔心最優性或無堆棧--O(1)空間 - (第一個未知的n> 3;第二個在OP中描述n == 3),這使得你的答案在技術上是正確的,不滿意,不滿意。並不是說真的有一個滿意的答案,因爲「不」很少滿足。 – rici 2013-04-08 16:15:20

1

Wikipedia article on Tower of Hanoi答案沒有非蠻力算法是已知的找到一個可證明的最佳解決方案,雖然有一個算法可能是最優的。

雖然三釘版本有一個簡單的遞歸解決方案,如上所述,有四個釘(稱爲Reve的難題)的河內塔問題的最佳解決方案,更不用說更多釘,仍然是一個懸而未決的問題。這是一個很好的例子,可以通過稍微放鬆一個問題限制來簡化可解決的問題,從而使問題變得更加困難。
+0

這隻涉及*最優*解決方案。僅僅找到一個*解決方案還是比較簡單的。 – recursive 2013-04-08 16:07:22

+0

@recursive:的確如此。例如,您可以使用3針解決方案,僅使用第一個和最後兩個釘。但我不認爲這是OP所期待的。 – rici 2013-04-08 16:08:14