You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

1-9数字排列满足指定子序列的计数及最小子序列集问题问询

关于1-9排列子序列约束的问题解答

问题1:符合所有子序列约束的排列数量

咱们先拆解一下题目里的约束:把1-9放进3×3的网格,行是[1,2,3][4,5,6][7,8,9],列是[1,4,7][2,5,8][3,6,9]。题目要求排列同时包含所有行和列的子序列,本质上就是要找这个网格的线性扩展——也就是按顺序取出网格元素时,每行元素必须保持从左到右的顺序,每列元素必须保持从上到下的顺序。

这是个经典的组合数学问题,3×3网格的线性扩展数是42种。简单来说,就是在满足所有行、列的顺序约束下,通过递归计数或钩子公式推导,最终得到的可行排列总数就是42。

问题2:最少3位子序列数的两种情况

恰好1种排列的情况

要让只有一种排列满足所有给定的3位子序列,核心是用子序列的约束唯一确定所有元素的相对顺序。

最精简的方案是用4个3位子序列,比如 123345567789。这四个子序列的约束通过传递性能导出完整的递增顺序:1在2前、2在3前,3在4前……以此类推,最终只有123456789这一种排列符合所有要求。

能不能用更少的?比如3个?答案是不行。3个3位子序列最多只能给出6个直接顺序约束,加上传递性也覆盖不了9个元素的全部相对顺序,必然会有元素的顺序不受限,导致多个排列满足条件。

恰好2种排列的情况

要恰好有两种排列,我们需要约束住绝大多数元素的顺序,只留下一对元素的顺序可以自由互换。

最少需要4个3位子序列,比如 123345567689。这里567要求5<6<7,689要求6<8<9,但7和8的相对顺序没有被约束,因此会产生两种符合条件的排列:123456789123456879,且不存在其他满足所有子序列的排列。

同样,3个3位子序列做不到这一点——要么约束太松导致更多排列,要么约束过强导致只有一种甚至没有符合条件的排列。

内容的提问来源于stack exchange,提问作者Xiangyu Chen

火山引擎 最新活动