排列数
定义
从 个不同元素中任取 个元素按照一定顺序排成一列,叫做从 个不同元素中取出 个元素的一个排列;从 个不同元素中取出 个元素的所有排列的个数,叫做从 个不同元素中取出 个元素的排列数,记作 。
计算公式
排列数的计算公式如下:
其中 。
组合数
从 个不同元素中任取 个元素组成一个集合,叫做从 个不同元素中取出 个元素的一个组合;从 个不同元素中取出 个元素的所有组合的个数,叫做从 个不同元素中取出 个元素的组合数,记作 。
计算公式
组合数的计算公式如下:
其中,。
对称性
递推公式
三种实现方法
1.递推公式/杨辉三角
根据组合数的递推公式 ,用二维数组存储如下所示:
1 |
|
|
|
|
|
1 |
1 |
|
|
|
|
1 |
2 |
1 |
|
|
|
1 |
3 |
3 |
1 |
|
|
1 |
4 |
6 |
4 |
1 |
|
1 |
... |
... |
... |
... |
1 |
其中, 表示 。
此方法的时间复杂度和空间复杂度均为 ,但其只需进行加法运算,且每次查询的时间复杂度为 ,总时间复杂度为 。此方法适用于 较小且查询次数 较多的情况。
2.计算所有 及其乘法逆元
根据计算公式 ,用两个一维数组分别存储 及其乘法逆元 ,即 ,时间复杂度和空间复杂度均为 。
查询时计算 ,时间复杂度为 ,总时间复杂度为 。此方法适用于 不太大且查询次数 较多的情况。
3.边乘边除
根据计算公式 ,每次乘 同时除 ,防止答案过大上溢出错。可用双指针优化,分母能除则除尽。单次计算的时间复杂度为 ,空间复杂度为 ,对于 次查询,总时间复杂度为 。此方法适用于 较大但 不太大且查询次数 较少的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具