插空法排不相邻元素
要求某几个元素两两不相邻时,先把**其余**元素排好,再把它们一个一个插进产生的空档里—— 个元素排成一列有 个空(含两端),一个空至多放一个,不相邻就自动成立。
「不相邻」这个条件正面数很难:它约束的是相邻位置之间的关系,一个一个往位置上填时, 每填一个都要回头看左边是谁。插空法把这件事翻译成一个没有约束的动作:
- 先排别人:把不受「不相邻」约束的那 个元素排成一列, 种。
- 数空:这 个元素之间有 个空,两端还有 个,共 个空。
- 往空里插:要插的 个元素,一个空最多放一个,即在 个空里选 个并排上顺序, 种。
- 相乘:。
第 3 步的「一个空最多放一个」就是「不相邻」的全部内容——两个元素挤进同一个空才会挨着, 分在不同空里则中间必然隔着至少一个「别人」。
两条最容易踩的界
(一)先排的那批自己也有约束时,插空并不管。 插空只保证被插的那 个两两不相邻;先排好的 个之间是什么关系,它一个字都没说。 所以题目若同时要求「甲类不相邻且乙类不相邻」,正确的做法是:先排乙类(不管它相不相邻), 再按「乙类当前排成了什么样」分类——乙类自己已经挨着的那些排法,必须强制往它们中间的 那个空里插一个甲,剩下的甲才自由。少了这层分类,会把「乙类挨着」的情形整块多算进去。
(二) 时答案是 ,不是硬算。 空不够用, 里 本来就等于 ,与「 个两两不相邻塞不进 个空」这件事一致。
和捆绑法的分工
- 要相邻 → 捆绑:把要挨着的那几个粘成一个整体先排,再乘内部的排法数;
- 不相邻 → 插空:先排别人,再往空里放。
两者常在同一道题里配合:先用捆绑数出「某类相邻」的种数,再用它做补集。
学它之前先会
共 2 条前置、最深 2 层。
出现在以下题目中
共 3 道题考到本条。