假設有x個盒子,每個盒子包含一個字母A-Z的「庫存」,每個字母庫存爲1或更多。如何實現這樣的算法?
現在說我需要以下條件:
- 6作爲
- 2燒烤
- 圖1C
我如何獲得的箱子所有可能的組合/排列的列表那可以給我提供我需要的信件?
該算法還需要生成盒子的組合以滿足我的要求。例如:如果Box-1只有4個As並且Box-2有1個A並且Box-3有1個A,那麼我需要算法的結果來指定6個As可以在3個盒子之間實現。
解決這個問題的基本邏輯是什麼。有什麼特別的算法我需要爲此進行研究嗎?
編輯1:
每DCP的建議,這裏是我的嘗試是,PHP實現:
$boxes = array(
// box 1
array(
'A' => 6,
'B' => 4,
'C' => 10
),
// box 2
array(
'A' => 8,
'B' => 4,
'C' => 2
),
// box 3
array(
'A' => 1,
'B' => 1,
'C' => 0
)
);
$n = count($boxes);
for ($mask = 0; $mask <= (1 << $n) - 1; $mask++)
{
$tots = array();
for ($i = 0; $i < $n; $i++)
{
if (((1 << $i) & $mask) != 0)
{
// this is a selected box for this mask, add the A's, B's etc. for this box to the total
$tots[0] += $boxes[$i]['A'];
$tots[1] += $boxes[$i]['B'];
$tots[2] += $boxes[$i]['C'];
}
// check the tots array to see if it meets the letter requirements. If it does,
// then this is a valid combination of boxes.
}
}
你能提供一些背景嗎?爲什麼你想要所有的組合?這似乎並不有用,因爲在列出案例之後,您沒有選擇標準的條件。除非是好奇心......或作業。 – 2010-11-20 05:31:46
@belisarius:不一定要有一個標準來選擇一個。也許問題解決了所有確定的組合。另外,爲什麼我要問這個問題的唯一兩個可能的原因是「好奇心」還是「功課」?難道這不是我正在處理的實際問題嗎? – StackOverflowNewbie 2010-11-20 08:25:40
哦,是的!當然!由於這是一個「給予和承擔」的網站,我只是要求你分享你的問題背後的理論基礎的最公開的部分,只是爲了幫助其他人認識到你所得到的答案可以被應用的那種問題。有效的答案是{我的問題是...},{只是好奇},{不是您的業務}。儘管如此,最後一點也沒有多大幫助。 – 2010-11-20 15:21:14