作者lovesnake (【忠犬攻一枚】)
站内Programming
标题Re: [问题] 排列组合,相同物品分发制不同容器
时间Sat Apr 14 11:31:18 2012
※ 引述《yauhh (哟)》之铭言:
: ※ 引述《lovesnake (【忠犬攻一枚】)》之铭言:
: : 我原本的想法是把物品分成三堆各一个,然後剩下假如说是两个
: : 用字典顺序排出以後,找出个数 = 剩余物品个数的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.
阿...用while写的话,会跑到
1 1 6
1 2 5
1 3 4
2 1 5
2 2 4
2 3 3
3 1 4 (重复了)
相等於 八个相同的东西分到三个相同的容器里
这好像只能列举....(可能我数学比较烂)
所以变成每一次做出一种组合都要去判断是否跟前面的组合有重复
不知道是否是这样呢?
关於六取三排列...不太懂..您说的是P(6 3)吗?
: : 且如果用出另外六组组合,也会有重复的必须做後面的剔除动作
: : 可能有耗效能之嫌 (虽然微不足道啦)
: : 对您的想法不了解的大概这两点,谢谢!!
: 所谓重复,是什麽重复,堆的重复或者是东西的重复?
: 我以为你是拿那些东西虽然每个都相同,但彼此仍视为不同 (如东西上有打编号之类)
: 如果是把东西全都看成相同,分堆会变得比较简单,甚至不用分了, 1 1 6 就是一种分堆
: 情况, 1 2 5 是第二种情况, ......等.
我所说的重复情况是 2 2 4
排出六种
2 2 4
2 2 4
2 4 2
2 4 2
4 2 2
4 2 2
有一半会是重复的,需要在判断。
因为原题目是---相同的东西分到不同的容器,也就是H。
变成 H(3 8) = (10 2) = 45种 这样
所以
2 2 4
4 2 2
2 4 2
这三种是不同的情况
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.216.68
1F:→ yauhh:但你原文不是说分到不同容器所以有差别? 61.231.67.34 04/14 11:43
2F:→ yauhh:3 1 4 对 1 3 4 并没有重复 61.231.67.34 04/14 11:44
3F:→ lovesnake:对阿~ 134是不会重复 但224会重复 140.121.216.68 04/14 11:45
4F:→ lovesnake:对阿~分到不同容器所以有差别 140.121.216.68 04/14 11:46
5F:→ lovesnake:所以224 跟422跟242 这三种是不一样的 140.121.216.68 04/14 11:46
6F:→ lovesnake:组合阿~ 所以才会有重复 140.121.216.68 04/14 11:46
7F:→ lovesnake:因为三个东西做组合会有六组 140.121.216.68 04/14 11:47
8F:→ lovesnake:势必会有 224 224 (程式里跑出来) 140.121.216.68 04/14 11:47
9F:→ lovesnake:242 242 422 422 这六组 其中两两重复 140.121.216.68 04/14 11:47
10F:→ lovesnake:大概是这样 ((我干嘛不用编辑Orz 140.121.216.68 04/14 11:48
11F:→ yauhh:那你422之後怎麽还会出现422? 61.231.67.34 04/14 11:48
12F:→ yauhh:我觉得422之後应该是431然後就到512了 61.231.67.34 04/14 11:49
喔~ 可能是有误解....我以为你是先做出八个相同的分三个相同的堆
然後再去排列
您说的是直接将後面的元素列为一个集合,随时修改他的极限值吗?
像是 10个分4堆
{1 [1 (1 7)]} 这样吗?
最後一个Set总和八
第二个总和九
第一个总和十
然後最後一个SET组合都跑完了以後第二个SET+1 最後一个SET总和-1
继续跑?
※ 编辑: lovesnake 来自: 140.121.216.68 (04/14 11:54)
13F:→ yauhh:喔我搞错了. P(6,3). 61.231.67.34 04/14 11:51
那种想法我有想过,可是程式该怎麽实作呢?
当初想到这个想法我以为有解了...结果程式写不出来XD
恳请赐教
※ 编辑: lovesnake 来自: 140.121.216.68 (04/14 11:55)
14F:推 EdisonX:换句话说,就是分割数问题吗? 180.177.76.161 04/14 13:27
※ 编辑: lovesnake 来自: 140.121.216.68 (04/14 14:25)
15F:→ lovesnake:不太一样窝...分割数是相同堆 这是不同 140.121.216.68 04/14 14:28
16F:→ lovesnake:不过这名词好像查的到很多东西XD 感谢 140.121.216.68 04/14 14:28
17F:→ yauhh:我原本想法应该没错,第一个数字取4,则第二个 61.231.67.34 04/14 18:05
18F:→ yauhh:数字可以是1或2或3,取了2,则第三个数字只会2 61.231.67.34 04/14 18:06