链式不相邻问题
问题:有
Σ:{1,2,3⋯n}
,从
Σ
中取出
m
个数,并且此
m
个数不能彼此相邻,试问有多少种取法。
这个问题在组合数学中有结论,也给出了证明,但是我没有足够的耐心把证明看完,自己用高中排列组合的知识导出了结果,供参考。
如下方示意图所示,
第一步,将
m
个球摆成一排放桌子上,如示意图中的蓝球,为了保证这
m
个球不相邻,中间的m-1个空位必须放入其他球,而首尾的两个空位可以放球也可以不放球。
第二步,还剩下
n−m
个球,如示意图中的红球,将这些
n−m
个球分成
m+1
份,用来分隔第一步中的
m
个球。运用插板法进行分隔,则需要
m
个板。分隔的要求是:首尾两份中可以有球,也可没有,中间的m-1份中每份中至少有一个球。那么,很容易得到共有
Cmn−m+1
插板方法。
第三步,将第二步分好的
m+1
份红球对应地放入第一步的
m
个蓝球当中去,根据蓝球的位置从
Σ
中取数,可以保证取出来的数彼此不相邻。这种取法既不重复也不会遗漏。因此共有
Cmn−m+1
种取法。
环形不相邻问题
把上面的问题稍作修改,视
Σ
中的
n
和
1
也是相邻的,即
Σ
中的数组合成了一圈。那么从
Σ
中取出
m
个数,并且此
m
个数不能彼此相邻,问有多少种取法呢?
求解环形不相邻问题比较简便的方法就是将环形不相邻转换为链式不相邻,从而利用链式不相邻的结论。
先从
n
个球中任取一个球,共有
n
种取法从(
n
球并不相同),那么,该球左右两侧各有一个球都不能被取了,如下方示意图所示。此时环形正好被断开,相当于剩下
n−3
个数,从中取
m−1
个数,使之彼此不相邻的链式不相邻问题,共有取法
Cm−1n−m−1
。所以,共有取法为
nCm−1n−m−1
种。
这个不相邻的问题,我是在赛码网碰到的“排座位”问题中出现的。圆桌有
n
个座位,有
m
个客人,有多少中排座位的方法,使得客人彼此不相邻。该问题可以通过上述结论,大为简化。