当前课程知识点:组合数学 >  小乒乓球的组合之旅 >  钟声里的全排列 >  程序支持与Stirling公式

返回《组合数学》慕课在线视频课程列表

程序支持与Stirling公式在线视频

程序支持与Stirling公式

下一节:思考题

返回《组合数学》慕课在线视频列表

程序支持与Stirling公式课程教案、知识点、字幕

刚才我们介绍了很多种不同的全排列生成算法

实际上呢 现在的编程环境

也给大家提供了非常有利的工具

比如说在Java中它就直接提供了

Permutation以及Combination的函数

在其他的一些算法介绍中

都会介绍如何去生成全排列

同样呢 我们现在在学术界

我们会发现也有很多相关的论文都会介绍

不同情况下

如何去有效合理地产生所有的全排列

实际上我们用的最多的还是STL中

提供的两个非常有用的排列生成工具

我们看一下

在STL标准程序库中有这样两个函数

一个是next_permutation 一个是prev_permutation

这两个函数实际上就是

依次生成字典序中的下一个序列

那么我们就可以看一下

如果我们拿这两个函数去生成全排列

程序运行效果怎么样呢

这里呢我们编写了一个简单的代码

来演示在STL库中next_permutation的用法

当然prev_permutation也是一样

基本上我们主要思路就是给定了一个初始的串

之后呢我们通过循环调用next_permutation

就可以产生所有的全排列

那么我们来运行一下看一下

比如说我们让它来计算

abcd这四个字符构成的全排列

很快就能出现结果

那么如果我们处理更大一点的字符呢

比如说abcdefghij一共十个字符

我们来看看它处理的效率如何

我们看屏幕一直在闪

两分钟过去了

我们可以看到对应于十个数字

它需要产生十个阶乘的对应的全排列

但是即便我们利用STL库里面

提供的next_permutation来计算的话

仍然需要很大的时间量和计算复杂度

所以我们可以看到 对应于全排列的生成

它的规模是急剧地增加的

我们现在如果想要处理

十个字符产生的全排列

没有一个非常有效而快速的解决方案

大家看了程序演示之后肯定会觉得

哎呦 n阶乘的数量级相当之可怕吗

确实如此

那么它到底大到什么程度呢

我们看有这样一个数

我们都知道

n的阶乘它不断地进行的是累乘操作

那么很快它就有可能溢出了

所以我们需要一个比较有效的方法

来对它进行直接的估计

有一个数叫做Stirling数

这个数字的意义就在于它并没有通过

累乘来计算n阶乘

而是用一个近似的解析方法

来能够近似地去逼近n阶乘

那么具体的证明呢

大家可以看一下参考的资料

我们现在给它一个结论

也就是说 n阶乘 当n趋于无穷大的时候

它近似的等于根号2πn (n/e)的n次方

那我们来算一下 到底n阶乘能到多大呢

这是n阶乘对应的一个对数表

我们拿60来看一下

60带到刚才的Stirling数的公式里面算的出来

60的阶乘等于8.34乘以10的81次方

这个数字有多大呢

假如我们要做60个数字的全排列

如果这个计算机它的处理能力能够达到

每秒钟生成10的7次方个全排列的话

需要花多久呢

大家算一算 答案非常的惊人

它达到了2.65乘以10的67次方年

我们才能列举60个数字的全排列

可想而知 n阶乘它的增长速度相当之快

那么意味着

我们需要更加有效的方法

去处理特别的问题

到目前为止

其实全排列生成算法花样繁多

至少有20多种算法

都可以来处理全排列生成算法

当然这并不是最后

我希望同学们呢也去研究一下

可不可以自己做出来更快更好的

全排列生成算法呢

组合数学课程列表:

漫谈组合数学

-什么是组合数学

--什么是组合数学

--讨论题

-最精巧的排列——幻方

--幻方

-漫谈组合数学--最精巧的排列——幻方

-苦难的羊皮纸卷

--羊皮纸卷

-苦难的羊皮纸卷--作业

-你的手机密码安全吗

--你的手机密码安全吗

-漫谈组合数学--你的手机密码安全吗

-暴力枚举和抽象转换

--世界杯引出的问题

--世界杯引出的问题--练习

--一一对应

--七桥问题

--小结

--讨论题

-大家谈组合数学(1)

--采访武永卫老师

-第一周作业

--作业说明

--H

--U

--G

--作业讨论区说明

-第一周演示程序

--程序讨论区说明

--幻方生成器

--换方计数

--屏幕解锁方案数

--欧拉路计数

--共享程序

小乒乓球的组合之旅

-加减乘除来计数

--计数的基本法则

-排列还是组合

--排列还是组合

--小乒乓球的组合之旅--排列还是组合

--格路模型与组合恒等式

-各种各样的排列

--圆排列和项链排列

--圆排列和项链排列--习题

--多重排列

--多重排列--练习

-多样的组合

--可重组合

--不相邻组合

--小乒乓球的组合之旅--多样的组合

-钟声里的全排列

--钟声里的全排列

--钟声里的全排列

--字典序法

--SJT算法

--程序支持与Stirling公式

-第二周作业

--H

--U

--G

--思考题

--公式测试

--作业讨论区说明

-第二周演示程序

--程序讨论区说明

--排列数和组合数的计算

--全排列生成

--组合生成器

--共享程序

-参考资料:Stirling估计式

--Stirling估计式

初识母函数

-母函数是函数的母亲吗

--母函数的定义(1)

--母函数的定义(1)--练习

--母函数的定义(2)

--母函数的定义(2)--练习

-母函数的简单应用

--母函数的简单应用(1)

--母函数的简单应用(2)

--初识母函数--母函数的简单应用

-整数拆分

--整数拆分(1)

--整数拆分(2)

-Ferrers图像

--Ferrers图像

--Ferrers图像--作业

-母函数与递推关系

--母函数能做什么

--Hanoi问题(1)

--Hanoi问题(2)

--偶数个5怎样算

--偶数个5怎样算(2)

--母函数小结

-大家谈组合数学(2)

--科研,找工作与组合数学

-第三周作业

--H

--U

--G

--思考题

--作业讨论区说明

-第三周演示程序

--程序讨论区说明

--整数拆分

--汉诺塔

--共享程序说明

线性常系数递推关系

-Fibonacci数列

--Fibonacci兔子

--Fibonacci恒等式

--线性常系数递推关系--Fibonacci数列

-Fibonacci数列的应用

--桌布魔术

--桌布魔术--练习

--Fibonacci的直接表达式

--Fibonacci优选法

--艾略特波浪曲线

-线性常系数齐次递推关系

--定义

--特征多项式

--母函数与特征多项式

--根据特征多项式求解递推关系通解(1)

--根据特征多项式求解递推关系通解(2)

--线性常系数递推关系--线性常系数齐次递推关系

-说“数”解题

--说“数”解题(1)

--说“数”解题(2)

-第四周作业

--H

--U

--G

--GT思考题

--作业讨论区说明

-第四周演示程序

--程序讨论区说明

--Fibonacci优选法

--Fibonacci数值计算

--程序共享说明

-爆笑花絮

--爆笑花絮

-参考资料:K线分析中的Fibonacci 相关理论

--Fibonacci retracement资料

神奇的序列

-Catalan数

--计算机界的精灵

--Catalan数的直接表达式

--Catalan数的各种实例

--神奇的序列--Catalan数

-指数型母函数

--指数型母函数

--指数型母函数的应用

--神奇的序列--指数型母函数

-错排

--错排1

--错排2

--神奇的序列--错排

-Stirling数

--第一类Stirling数

--神奇的序列--Stirling数

--第二类Stirling数

-母函数小结

--母函数小结

-大家谈组合数学(3)

--采访郭家宝(BYVoid)

-第五周作业

--H

--U

--G

--思考题

--作业讨论区说明

-第五周演示程序

--讨论区说明

--Catalan数

--第二类Stirling数

--程序共享

容斥原理和鸽巢原理

-且容且斥

--容斥原理

--容斥原理的证明

--容斥原理和鸽巢原理--且容且斥

-容斥原理的精妙

--容斥原理的应用(1)

--容斥原理的应用(2)

--容斥原理的应用(3)

-回忆过去,容斥新解

--容斥原理的应用(4)

--容斥原理的应用(5)

--容斥原理的应用(6)

--容斥原理和鸽巢原理--回忆过去,容斥新解

-鸽子抢巢

--鸽巢原理

--鸽巢原理--练习

--鸽巢原理的应用(1)

--鸽巢原理的应用(1)--练习

-看得见摸得着的鸽巢

--鸽巢原理的应用(2)

--韩信点兵

--中国剩余定理

--容斥原理和鸽巢原理--看得见摸得着的鸽巢

-6人行和Ramsey数

--6人行

--Ramsey数

--小结

-第六周作业

--H

--U

--G

--GT

--作业讨论区说明

-第六周演示程序

--讨论区说明

--Find a multiple

--程序共享说明

-可以转的世界

--可以转的世界

--可以转的世界--练习

--伽罗华与群

--群的定义

--群的定义--练习

--群的一些概念

-置换群

--置换群

--群--置换群

--共轭类

--对换

--对换--练习

--置换群的应用

-Burnside引理

--着色问题的等价类

--Burnside引理--作业

--Burnside引理

--Burnside引理的应用

-闲话群

--无处不在的群(1)

--无处不在的群(2)

-第七周作业

--H

--U

--G

--作业讨论区说明

Polya定理

-Burnside引理的困境

--Burnside引理的困境(1)

--Burnside引理的困境(2)

-从Burnside到Polya

--Polya定理

--Polya定理的应用(1)

--Polya定理的应用(2)

-立方体旋转

--立方体旋转(1)

--立方体旋转(2)

--立方体旋转--作业

--立方体旋转(3)

--立方体旋转--作业

--立方体旋转(4)

-母函数型Polya定理

--母函数型Polya定理(1)

--母函数型Polya定理(2)

--母函数型Polya定理(3)

--母函数型Polya定理(4)

--Polya定理--母函数型Polya定理

-图的计数

--图的计数

-总结

--本章小结

-第八周作业

--H

--U

--G

--GT

--作业讨论区说明

-大家谈组合数学(4)

--采访黄连生老师

组合之美

-组合之美

--组合之美之计数

--组合之美之排列组合

--组合之美之多样组合和全排列

-组合之美之线性常系数递推关系

--组合之美之线性常系数递推关系

-组合之美之多样的序列

--组合之美之多样的序列

-组合之美之鸽巢原理

--组合之美之鸽巢原理

-组合之美之转动群与染色

--组合之美之转动群与染色

-采访邹欣

--采访邹欣1

--采访邹欣2

-知识点串串烧

--知识点串串烧

期末测验

-期末测验--期末测验

程序支持与Stirling公式笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。