Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831712
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-23 15:53:04

比如 3 张椅子围成一圈,2 个人往上坐,只有1种排列
  ●
○●
  ○
●●
  ●
●○
上面三种排列只算一种,因为“圈”是无方向的,当然更假定所有椅子都是一样的,所有人也都是一样的。

5张椅子围成一圈,1 个人往上坐,有1种排列
5张椅子围成一圈,2 个人往上坐,有2种排列,一种是二个人靠一起,另一种是两个人之间隔一个空座
5张椅子围成一圈,3 个人往上坐,有2种排列,一种是三个人靠一起,另一种是两个人靠一起与另一人隔一个空座
5张椅子围成一圈,4 个人往上坐,有1种排列
……
6张椅子围成一圈,3 个人往上坐,有4种排列
   ○○
○      ●
   ●●
   ○●
○      ○
   ●●
   ●○
○      ○
   ●●
   ●○
○      ●
   ●○


……

把“空座“和“人”互换一下,并不会影响结果,所以人有几种排列,那么空座位就有几种排列。因此
f(m,n) 应当等于 f(m,m-n),这是最基本的,可以用它先过滤一下答案。

------ 2007-05-12日记

谢谢大家,我就不一个个回复了。

如果不是一个圈,而是一个排,那么这就非常简单:m! / (n!) / (m-n)!
如果是一个圈,自然会认为是 m! / (n!) / (m-n)! / m ,然而这是错误的,举例来说: 4张椅子2个人往上坐
如果是一个排,
有如下六种排列
●●○○
●○●○
●○○●
○●●○
○●○●
○○●●
按圈分,可以分成2组
●●○○
○●●○
○○●●
●○○●

●○●○
○●○●
,前4种在圈中属于同一种,后2种在圈中属于同一种,也就是每种排列的重复次数并不都相同,除以什么都不会正确,随着m和n越大,那些讨巧的做法,比如取绝对值呀,等等都将失效。


------ 2007-10-11 记 ------ 一个可能正确的答案: http://blog.vckbase.com/Files/bruceteen/permutation.zip

阅读(1968) | 评论(10) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-23 15:54:55

IPX
6张椅子围成一圈,3 个人往上坐,有4种排列
那个图,我怎么觉得第二个和第三个是一样的.
因为星星说人是一样,椅子也一样,圆是可以转的.

网友评论2012-11-23 15:54:48

DaiLiang
这是排列组合里的圆排列问题

网友评论2012-11-23 15:54:40

arong
中间插入空格算不算不同?
队列方向反算不算不同?

网友评论2012-11-23 15:54:32

arong
我们分两步解决这个问题
首先,我们假定椅子是直排的,那么排列种数为P(m,n) = m!/(m-n)!
然后我们考虑一个排列,其实重点在于起点那个人在椅子啥位置,因此有m个选项,答案就是

m!/m/(m-n)!

对于(3,2) ,答案时3!/3/1 = 2两种排列

网友评论2012-11-23 15:54:24

wetwoo的小窝
利用Mobius反演可以解决可重圆排列问题