簡體   English   中英

這個問題是np-complete嗎?

[英]Is this problem np-complete?

假設有一行x箱裝滿小飾品(隨機數量),在視線范圍內(你可以看到每個箱子里有多少小裝飾品)。 現在有兩名球員可以輪到他們從任何一端挑選一個垃圾箱。 他們不能放棄轉機。 想出一個讓玩家獲得最大數量小飾品的策略。

x是偶數。

這是一個完整的問題嗎? 它類似於布爾SAT嗎?

不,它可以通過O(x^2)動態編程輕松解決。 這里看問題10。

這是一個非常簡單的問題,並不是NP完整的。 這里是算法的簡短描述,它基於動態編程。

可以[i] - 存儲小飾品數量的數組。
F [i,j] - 如果只有從i到j的罐頭可用,則確定什么是最佳移動的陣列。 0表示從左側取,1表示從右側取。
G [i,j] - 存儲移動'良好'的數組。

for (i=1 to n) F[i,i] = 0
for (i=1 to n) G[i,i] = Can[i]

for (i=1 to n-1)
   for (j=1 to n-i)
       tmp1 = Can[j] - G[j+1,j+i]
       tmp2 = Can[j+i] - G[j,j+i-1]
       if (tmp1>tmp2)
       {
             F[j,j+i] = 0;
             G[j,j+i] = tmp1;
       }
       else
       {
             F[j,j+1] = 1;
             G[j,j+i] = tmp2;
       }

很抱歉沒有評論,但如果您閱讀了一些關於動態編程的文章,您將毫無問題地獲得它。

這個問題對於alpha-beta-pruning來說似乎是完美的,因為很容易得出你的點的下限。 假設玩家面對偶數個箱子。 然后,他可以以某種方式進行游戲,以獲得偶數或所有奇數位置上的所有箱子:

假設我們有1 0 1 0 1 0,那么他可以拿左邊的1,無論對手做什么,他只是繼續拿起1的。

因此,易於計算的下限是偶數位置上所有區間的總和以及奇數位置上所有區間的總和的最大值。

對於“奇數”玩家,您可以只取(長度+ 1)/ 2最小值的總和,這不如“偶數”玩家的界限好,但也很容易計算。

我認為對於這些界限,搜索樹對於實際應用來說將是稀疏的(我猜你總能找到這種類型問題的“病態”反例),所以解決方案應該非常快。

很明顯,第一個玩家有一個平局/勝利策略。 他所要做的就是檢查奇數位置區間或偶數位置區間是否有更大的總數,然后他可以輕松地發揮,以迫使對手拿起“失敗”平價的區間。

例如:

2,6,11,4,7,3

這里的奇數位置更好(20對13),所以玩家1應該選擇2.然后玩家2必須選擇6或3,它們處於偶數位置。 如果選擇3,則選手1應選擇7,依此類推。 實際上,玩家1應該總是選擇他的對手選擇的位置旁邊的位置,並且它保證平局或勝利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM