从来没学过这么通透的 - 排列&组合

简介: 昨天无意间,做了一道算法题,优雅的解法又需要用到组合这种数学知识!这次,我要狠狠的攻克他!

 昨天无意间,做了一道算法题优雅的解法又需要用到组合这种数学知识!

这次,我要狠狠攻克它!

既然如此,那就将排列与组合一块打包学习吧。

注意,这里主要是讲解相关思想,具体算法大家可以到 leetcode牛客洛谷等算法平台上搜索。

目录

一、先说说什么是排列?

二、那什么又是组合数呢?

三、应用举例:


一、先说说什么是排列

举一个生活中,常见的例子。

现在,有3名学生(A、B、C)排队,要站成一排,请问有几种排法?

image.gif 编辑

所以答案就是 ,这不就是3的阶乘(3!)吗?

还不理解的,可以看一看图:

image.gif 编辑

深入探究一点,如果有10名学生,从中选取3名学生,排成一排,请问有几种排法

image.gif 编辑

所以答案就是 ,这不就是10的阶乘除以7的阶乘吗( )吗?

总结一下,于是假设总人数是n人,挑选m人,不就变成了

也就是

所以可以总结出来 =

小结一下:

为了更严谨,咱们正式一些。

排列:一般的,从n个不同的元素中取出m(m<=n)个元素,按一定顺序排成一排,叫做从n个元素中取出m个元素的一种排列。

排列数:一般的,从n个元素中取出m个元素的所有的排列个数,叫做从n个元素中取出m个元素的排列个数。用符合 表示。且 =


二、那什么又是组合数 呢?

就还是那个例子。

现在,有10名学生(A、B、C...),从中选取3名学生,请问有几种选法?

画重点了!本选择方法,不要求有序

而上方咱们计算时,为 ,也就是

而其中一共有 种排序方法(

这一相除,不就变成了 这个公式吗,也就是720/6=120种。

排列以后,不就变成了 image.gif 编辑这个公式吗!

小结一下:

组合:从n个不同的元素中任意挑选m(m<=n)个元素,组成一组,他就是从n个元素中挑选m个元素的一个组合。

组合数:从n个不同的元素中任意挑选m(m<=n)个元素,所有的组合个数,就是从n个元素中挑选m个元素的所有组合数


三、应用举例:

只懂概念,是肯定不行的。来!上题!巩固!

从4名男生、3名女生中,挑选3名代表,求:

  1. 至少有一名女生的不同选法共有多少种?
  2. 代表中男、女都要有的不同的选法多少种?

没算错吧!哈哈,思路可是这样的

要选取至少一名女生,不就是如下思路

直接法

  • 1女2男
  • 2女1男
  • 3女0男

间接法

  • 所有可能 :0女3男

那有没有小可爱的思路是这样的呢?

哪为什么不能这样呢,即先选取1个女生,有3种可能,随后在剩下的6个人中,在选取2个人,这种思想错误吗,还是少判断哪里了?

这种思想是错误的,原因在于存在重复计数的情况。

按照你所说的思路,先从3名女生中选1名女生,有C31=3种选法;然后从剩下的6个人(4名男生和2名女生)中选2个人,有C62=2!(6−2)!6!=2×16×5=15种选法。根据分步乘法计数原理,这样得到的选法总数是3×15=45种。

下面举例说明重复计数的情况:

假设3名女生分别为A、B、C,4名男生分别为a、b、c、d。

情况一:先选女生A,然后从剩下6人中选B和a,得到组合{A,B,a}。

情况二:先选女生B,然后从剩下6人中选A和a,得到组合{B,A,a}。

这两种情况实际上是同一个组合{A,B,a},但按照你的方法却被当作两种不同的选法进行了计数。

对于每一个包含2名女生的组合都会出现这样的重复情况,对于包含3名女生的组合,重复的情况会更复杂。所以这种先选1名女生再从剩下6人中选2人的方法不能正确计算至少有一名女生的选法数量。

OK啦,本题的正确答案是,

而第二问方法是同样的,切记,不要将组合&排列搞混喽!


借鉴博客:

1、排列&组合



目录
相关文章
|
5月前
|
存储 缓存 Java
为何最终我放弃了 Go 的 sync.Pool
本文并非否定 sync.Pool,而是分享技术选型的思考过程,帮助大家更准确地使用它
277 1
|
人工智能 测试技术 Go
如何使用 Google 的 Gemini
Google Gemini是谷歌发布的人工智能大模型,能够在从数据中心到移动设备等不同平台上运行。本文将介绍Gemini以及如何使用Gemini。
2601 0
|
5月前
|
存储 缓存 安全
一文带你读懂 Go 1.24 map 重构了什么?
本文聚焦 Go 1.24 map 底层重构,解释它如何从旧版 bucket + overflow 方案,演进为 Swiss Table + 局部 split 的新结构,以及它所带来的性能提升。
364 1
一文带你读懂 Go 1.24 map 重构了什么?
|
5月前
|
人工智能 JavaScript API
新手必看|OpenClaw阿里云部署流程+千问Qwen3-Max对接+避坑攻略
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年开源AI智能体领域的核心工具,凭借“插件化技能体系+多模型兼容”的优势,成为个人与轻量团队提升效率的首选。它本身不具备独立大模型推理能力,需对接外部大模型才能实现“自然语言指令→任务执行”的完整闭环,而阿里云百炼平台的千问Qwen3-Max大模型,凭借免费调用额度、国内节点稳定性及与OpenClaw的无缝适配,成为新手对接的最优选择。
1616 1
|
2月前
|
人工智能 缓存 自然语言处理
阿里云百炼Token Plan团队版指南:按Credits计费、标准高级和尊享坐席收费价格及使用方法
阿里云百炼Token Plan团队版是面向企业/团队的AI大模型订阅服务,按Credits统一计费,支持文本与图像生成多模型灵活切换。提供标准(198元/月,2.5万Credits)、高级(698元)、尊享(1398元)三档坐席,兼容OpenClaw、Hermes Agent等主流工具,承诺数据不用于训练,保障安全与稳定。快速体验TokenPlan:https://t.aliyun.com/U/fPVHqY
|
5月前
|
缓存 前端开发 JavaScript
首屏优化实践:如何将 Vue3 + Vite 项目的加载速度提升3倍
本篇博客,将会带着你,走一遍首屏优化实践。手把手给你演示,如何将 Vue3 + Vite 项目的加载速度提升3倍。
526 6
首屏优化实践:如何将 Vue3 + Vite 项目的加载速度提升3倍
|
5月前
|
缓存 网络协议 安全
浅谈《图解HTTP》
《图解HTTP》适合作为第一本网络协议书。它就像一座桥梁,连接了 "零基础" 与 "系统性学习",对入门者及其友好。
298 1
|
5月前
|
中间件 API Go
自go-zero走进微服务
Go-zero 的微服务进阶之路:始于 goctl 的契约驱动与提效,立于 zrpc 与 etcd 的架构互联,成于 熔断限流等全链路服务治理的坚实保障。
407 1
|
9月前
|
弹性计算
租用阿里云服务器一天多少钱?来看看吧,连夜整理价格优惠
阿里云服务器按天计费约0.1元起。通过年付特价活动,如轻量应用服务器38元/年,折合约0.1元/天,性价比高;若按量付费,2核4G实例日均约9.3元,适合短期使用。
633 7
|
人工智能 JSON 自然语言处理
Function AI 工作流发布:以 AI 重塑企业流程自动化
AI工作流正重塑企业自动化流程。Function AI工作流基于函数计算FC,融合LLM、Agent等技术,实现智能任务处理与自我优化,助力企业迈向智能流程自动化,提升效率,增强响应能力。