Re: [問題] 排列組合,相同物品分發制不同容器
※ 引述《lovesnake (【忠犬攻一枚】)》之銘言:
: ※ 引述《yauhh (喲)》之銘言:
: : 看最後一句,猜你的方法有一點特殊性或限制,所以數量少於堆數的二倍才會成功.
: : 假設有八個東西要分三堆,你會先整理出
: : 1 1 6
: : 1 2 5
: : 1 3 4
: : ......
: : 這意思是說, 1 1 6 的情況,你要先隨便取一個,然後隨便取一個,然後剩下六個放到
: : 第三堆,這樣是一些組合. 1 2 5 的情況要做另一些組合. 然後 1 3 4 的情況再做
: : 另一些組合. 其他也一樣.
: : 這樣應該不會當東西數目超過堆數的二倍時無法分堆了.
: 我原本的想法是把物品分成三堆各一個,然後剩下假如說是兩個
: 用字典順序排出以後,找出個數 = 剩餘物品個數的SubSet
: 加到原本的三堆裡面...
: 您那個想法....是說先做出單一情況,然後在排列組合,有另外6種組合
: 最後列出全部的意思嗎?
: 不過列出單一情況這邊的演算法就卡住了Orz
: 1 1 6
: 1 2 5
: 1 3 4
: 2 1 5
: 2 2 4
: 2 3 3
: 這是所有的相同東西分到相同堆的結果
: 該怎麼用演算法跑出這樣的結果呢?
這部份應該是簡單到不需要講的吧. 方法很明確,只看你程式會不會寫而已.
對總和8來說,要分為三個數字,因為每個數字至少為1,所以每個數字最多填到6.
所以這是六取三排列,但限定總和為8.
: 且如果用出另外六組組合,也會有重複的必須做後面的剔除動作
: 可能有耗效能之嫌 (雖然微不足道啦)
: 對您的想法不了解的大概這兩點,謝謝!!
所謂重複,是什麼重複,堆的重複或者是東西的重複?
我以為你是拿那些東西雖然每個都相同,但彼此仍視為不同 (如東西上有打編號之類)
如果是把東西全都看成相同,分堆會變得比較簡單,甚至不用分了, 1 1 6 就是一種分堆
情況, 1 2 5 是第二種情況, ......等.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.67.34
※ 編輯: yauhh 來自: 61.231.67.34 (04/14 10:47)
討論串 (同標題文章)