排列组合
前几天 弦中子 老师 在 反相吧 发了一个 帖 《快递员问题可否这样思考?》 https://tieba.baidu.com/p/6763029470 。
1 楼 提出了一个 “快递员问题” :
有一个快递员从家里出发,要经过n个点后回到家里,请问他走的最短路程是哪一条?
我 在 10 楼 这样回复 :
“
弦老师 的 这种 情况, 光 绝对 摸不着 头脑 该走 哪一个路径 是 “最近” 的 ,
那个 光, 估计 会 站在 那里 一直想 , 一直想 …… 于是 光速 为 0 了 。
假设 有 n 个 节点, 求 这些 节点 的 排列数量 = n ! , 每一个 排列 组成一条 路径, 计算 每一条 路径 的 长度, 排个序, 就知道 最短 的 路径 是 哪条 了 。
”
这里 引出 了 一个 排列组合 的 问题 。 排列 和 组合 都是 组合, 排列区分元素顺序, 组合不区分元素顺序, 比如 AB 和 BA 是 不同 的 排列, 是 同一个 组合 。
假设 有 ABCD 4 个 字母, 从中 拿出 2 个 字母 来 排列, 有多少种 排列 ? 排列考虑元素顺序, 不同的顺序算不同的排列 。
会有 4^2 = 4 * 4 = 16 种 排列 。 具体是
AA, AB, AC, AD
BA, BB, BC, BD
CA, CB, CC, CD
DA, DB, DC, DD
如果 是 从 ABCD 中 拿出 3 个 字母 来 排列, 则 会有 4^3 = 4 * 4 * 4 = 64 种 排列 。
这种 排列 允许 同一个 字母 在 一个 排列 中 重复使用, 比如 AA, BB, AAA, BBB, AAB, BBD 。
如果 不允许 同一个 字母 在 一个 排列 里 重复使用, 那么 从 ABCD 中 拿出 2 个 字母 来 排列, 有多少种 排列 ?
有 4 * 3 = 12 种 排列 。 具体是
AB, AC, AD
BA, BC, BD
CA, CB, CD
DA, DB, DC
不允许 同一个 字母 在 一个 排列 里 重复使用, 从 ABCD 中 拿 3 个 字母 来 排列, 有 4 * 3 * 2 = 24 种 排列,
ABC ABD, ACB, ACD, ADB, ADC
BAC, BAD, BCA, BCD, BDA, BDC
CAB, CAD, CBA, CBD, CDA, CDB
DAB, DAC, DBA, DBC, DCA, DCB
不允许 同一个 字母 在 一个 排列 里 重复使用, 从 ABCD 中 拿 4 个 字母 来 排列, 有 4 * 3 * 2 * 1 = 4 ! 种 排列, 这跟 上面 拿 3 个 字母 来 排列 是 一样 的,
ABCD ABDC, ACBD, ACDB, ADBC, ADCB
BACD, BADC, BCAD, BCDA, BDAC, BDCA
CABD, CADB, CBAD, CBDA, CDAB, CDBA
DABC, DACB, DBAC, DBCA, DCAB, DCBA
如果 把 ABCD 看作 4 个 点, 这 4 ! 种 排列 就是 把 4 个 点 连起来 可能 得到 的 路径, 就是 本文开头 的 快递问题 里 的 n 个点 可以 有 多少种 路径 。
再来看看 组合 。 ABCD 4 个 字母 拿 2 个 字母 出来 组合, 有多少种 组合 ?
有 4 - ( 2 - 1 ) + 3 - ( 2 - 1 ) + 2 - ( 2 - 1 ) = 3 + 2 + 1 = 6 种 组合 。
具体是 AB, AC, AD, BC, BD, CD 。
ABCD 中 拿 3 个 字母 出来 组合, 有多少种 组合 ?
有 4 - ( 3 - 1) + 3 - ( 3 - 1 ) + 3 - ( 3 - 1 ) = 2 + 1 + 1 = 4 种
具体是 ABC ABD BCD ACD 。
ABCDE 5 个 字母 拿 2 个 字母 出来 组合, 有多少种 组合 ?
有 5 - ( 2 - 1 ) + 4 - ( 2 - 1 ) + 3 - ( 2 - 1 ) + 2 - ( 2 - 1 )= 4 + 3 + 2 + 1 = 10 种
具体是 AB AC AD AD AE BC BD BE CD DE 。
ABCDE 5 个 字母 拿 3 个 字母 出来 组合, 有多少种 组合 ?
有 5 - ( 3 - 1 ) + 4 - ( 3 - 1 ) + 3 - ( 3 - 1 ) + 4 - ( 3 - 1 ) + 3 - ( 3 - 1 ) + 3 - ( 3 - 1 ) = 3 + 2 + 1 + 2 + 1 + 1 = 10 种
具体是 ABC ABD ABE ACD ACE ADE BCD BCE BDE CDE 。
ABCDE 5 个 字母 拿 4 个 字母 出来 组合, 有多少种 组合 ?
有 5 - ( 4 - 1 ) + 4 - ( 4 - 1 ) + 4 - ( 4 - 1 ) = 2 + 1 + 1 = 4 种
具体是 ABCD ABCE ACDE BCDE 。
排列组合 问题 如果 让 条件 丰富一些, 解起来也会很麻烦的, 甚至有点变态 。 比如 让 组合 里 同一个字母 可以重复出现 。
比如 ABCDE 5 个 字母 里 拿 4 个 字母 出来 组合, 允许同一个 字母 在 一个组合 里 重复出现的话, 就会有 AABC ABBD BACA CCCE DDDD 这样 的,
当然, 因为 组合 不区分 元素顺序, AABC 和 BACA 是 同一个 组合 。
研究 排列组合 还有 把 一些 节点 连起来 形成 一些 路径 等等, 这一类 的 数学 称为 组合数学, 组合数学 研究 离散场景, 所以 也叫 离散数学 。
组合数学 这个 名字 总让人 想起 一些 标有数字 的 小球 排列 堆叠 成 一些 图形, 还有 把 一些 点 连成 路径 什么的, 所以 很自然的, 会 把 研究 这些 问题 的 数学 叫做 组合数学 。
我以前说过 “组合数学 是 人的本能, 根本不用学习” , 其实 也 差不多, 我觉得吧, 组合数学 是 最业余 的 数学, 微积分 是 最专业 的 数学, 代数几何 是 最有范 的 数学 。
数学, 分成 代数 、几何 、微积分 、组合数学 这样 几大类 就可以了, 哪有 那么多 啰里啰唆 。
组合数学 是 一个 有趣 的 数学, 可以 比较 娱乐性 的 来 学习 研究, 而且 也 挺有 实用性 的 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!