「组合数学」一:什么是组合数学

好怪的标题

前言#

组合数学所关心的问题就是把某个集合中的对象排列成某种模式,使其满足一些指定的规则。

排列的存在性和排列的列举或分类是两种反复出现的通用问题

排列数量较小时我们可以枚举,当数量较大时我们就要考虑在不列出它们的情况下确定这些排列的技术问题

还有另外两种常常出现的组合问题:研究已知排列和构造最优排列

因此,关于组合数学的一般描述也许就是:

组合数学验证发现的主要工具之一是

通常用数学归纳法证明一个较强的结果比证明一个较弱的结果更容易

组合数学的一个典型解决方法可能包含下面几个步骤:

1.建立数学模型

2.研究模型

3.计算若干小样例(打表)

4.推理计算出答案(找规律)

例一:棋盘的完美覆盖问题#

先考虑一张普通88棋盘,有一些12的多米诺骨牌,是否能够把32张多米诺骨牌不重不漏地摆放在棋盘上,形成棋盘的多米诺完美覆盖。

我们可以很简单地求得一个方案,也可以不是很简单地算出方案数12988816=24172532

更一般地,有mn的棋盘,此时它的完美覆盖不一定存在。比如对于33的棋盘来说就不存在完美覆盖。不难看出,当n,m中至少有一个数是偶数时,或者是棋盘格子的总数是偶数时才存在完美覆盖

Fischer得出了计算mn的棋盘的不同完美覆盖的一般公式,这个公式中含有三角函数

再考虑88,去掉一条对角线上两个对角的方格,剩下的62个方格不存在完美覆盖,可以用黑白染色来证明,去掉的两个格子一定同色

更一般地,取一个mn棋盘黑白染色,随机去掉一些方格,存在完美匹配的必要条件是剩下的黑格和白格数量相等

充要条件以后再谈

再拓展,对于mn棋盘,用1b的牌完美覆盖问题

为了有完美覆盖,b必须是mn的一个因子。

显然存在完美覆盖的一个充分条件是,b必须是mn的一个因子

b是素数时,上述条件是充要条件

b不是素数时,假设完美覆盖存在,我们要证明mnb整除时余数是0,设

m=pb+rn=qb+s

不妨设bm的因子,于是我们要证明r=0

现在把黑白染色推广到b种颜色的情况,按下列方式染色

完美覆盖的每一张b格牌覆盖b个方格,且每一个方格覆盖一种颜色。于是,棋盘上每一种颜色的方格数一定相同

我们将棋盘分为三部分,上方pbn部分,左下方rqb部分,右下方rs部分,易证前两部分颜色数一定相同,只考虑右下方rs部分,若要每种颜色格数相同,只有r0,s=br=0

由此得出:

mn1bbmn

根据上述染色方法我们还可以改述上述结论:

如果完美覆盖中所有1b牌都是水平或竖直放置,则称这样的完美覆盖是平凡的。存在完美覆盖当且仅当存在平凡覆盖

下面考虑一个很有特色的多米诺骨牌问题:

考虑44的棋盘,用8张多米诺骨牌可以完美覆盖,证明:

总可以把这个棋盘横着或竖着切成非空两块而不切断任意一张多米诺骨牌

称这样的切割直线为这个完美覆盖的断层线。因此,一条水平断层线表示这个44的棋盘的完美覆盖是由两个完美覆盖组成的:对于某个k=1,2,3,,一个是k4的完美覆盖,另一个是(4k)4的完美覆盖。

假设44的棋盘存在一个不存在断层线的完美覆盖,设x1,x2,x3分别是被三条水平切割线切到的多米诺骨牌数

因为不存在断层线,所以x1,x2,x3>0,一个水平方向多米诺骨牌在一行覆盖两个方格,一个竖直方向多米诺骨牌在两行上分别覆盖一个方格,由此可以得出x1,x2,x3都是偶数,即

x1+x2+x32+2+2=6

而且在这个完美覆盖中至少有6个竖直方向上的多米诺骨牌。

用类似的方法我们可以得出至少有6个水平方向上的多米诺骨牌。

6+6=12>8,所以44棋盘的完美覆盖一定存在断层线

例二:幻方#

n阶幻方中所有整数的和是:

1+2+3++n2=n2(n2+1)2

上面的和利用了算术级数的求和公式

n阶幻方有n行,且幻和是s,则有ns=n2(n2+1)2,因此,任意两个n阶幻方都有相同的幻和,即

s=n(n2+1)2

幻方的一种构造方法:

n是奇数时

1.先把1放在第一行的中间

2.放好一个数后的下一个数放在当前数字的右上方

3.若右上方已有数字,则放入正下方

三阶幻方满足的性质:

与这个立方体的边平行的直线、每个平面截面的两条对角线、四条空间对角线的幻和相等

s=n4+n2,下面证明不存在三阶幻方体:

如果存在,那么幻和s=42。考虑任意33截面

[abcxyzdef]

根据幻方体定义,有

a+y+f=42b+y+e=42c+y+d=42a+b+c=42d+e+f=42

前三个式子相加减去后两个等式后得到y=14,说明每个截面的中心都必须是14,而幻方中只能填入一个14,所以不存在三阶幻方体

例三:四色问题#

​ 相邻国家不同色的染色问题,已经证明最多五种颜色可以给任何一张地图染色,且目前依靠计算机计算可以证明仅用四种颜色可以给每一张平面地图染色

例四:36军官问题#

​ 给定来自6种军衔和6个军团的36名军官,能不能把他们排列成一个66的编队,使得每一行和每一列上满足每个军衔有一名军官且每个军团有一名军官呢?

​ 可以给一名军官指定一个有序对(i,j),其中i(i=1,2,6)表示他的军衔,j(j=1,2,6)表示他的军团,于是这个问题要问:

​ 能不能把这36个有序对(i,j)排列成一个66的矩阵,使得每一行和每一列上整数1,2,6都能以某种顺序出现在有序对的第一个位置上,且都能以某种顺序出现在有序对的第二个位置上?

​ 我们可以把这样的矩阵分割成两个66的矩阵,其中一个对应i,另一个对应j

​ 问题又可以变为,是否存在两个66的矩阵,它们的项都取自于整数1,2,,6,使得

1.在这两个矩阵种的每一行和每一列上整数1,2,6都能以某种顺序出现

2.当并置这两个矩阵时,所有有序对(i,j)全部出现

​ 于是这个问题的一个解是

​ 前面的军衔矩阵和军团矩阵是三阶拉丁方,整数1,2,3在每一行和每一列仅出现一次

​ 这两个三阶拉丁方是正交的,因为当把它们并置时生成所有可能的9个有序对(i,j)

​ 所以问题可以改为研究:

​ 存在两个六阶正交拉丁方吗?

​ 至于这个问题后面再讨论(也可能不讨论了((

例五:最短路径问题#

​ 没说正经东西

例六:相互重叠的圆#

​ 设hn等于构建的区域数,平凡地h1=2,接下来有h2=4,h3=8,因此猜测h4=16

​ 但下图证明h4=14

​ 解决这一类问题通常用增量法

​ 设我们有hn1,现在加入第n个圆,前n1个圆与第n个圆每个最多有2个交点,所以会新产生最多2(n1)个交点,这些交点第n个圆分割成2(n1)条弧,每条弧都创建出一个新的区域,所以

hn=hn1+2(n1) (n2)hn=2(1+2++n1) (n2) hn=n2n+2 (n2) 

例七:Nim游戏#

n堆硬币,每堆硬币数量不等,玩家轮流每次至少从其中一堆硬币种取走至少一个硬币,取走最后一枚硬币的玩家获胜

​ 先考虑仅有两堆的Nim游戏,后手可以保持永远让两堆数量相等来取胜

​ 再推广到k堆,后手可以通过让每堆石子的所有二进制的每一位上加起来永远是偶数取胜

posted @   lovelyred  阅读(1871)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
CONTENTS