python 求组合数最快方法_python求二项式系数的几种方法及性能对比
最近研究了python求二项式系数的几种方法,对比了一下他们的速度
1. 利用阶乘简洁求
#普通阶乘
def fact(n):
if n == 0:
return 1
else:
return n*fact(n-1)
#普通Cmn
def Cmn(n,m):
return fact(n)/(fact(n-m)*fact(m))
2. 直接递归求解
def Cnk0(n,k):
if k==0: return 1
if n==0: return 0
return Cnk0(n-1,k)+Cnk0(n-1,k-1)
3. 动态规划求解
(1)带备忘录的
def memo(func):
cache={}
@wraps(func)
def wrap(*args):
if args not in cache:
cache[args]=func(*args)
return cache[args]
return wrap
@memo
def Cnk(n,k):
if k==0: return 1
if n==0: return 0
return Cnk(n-1,k)+Cnk(n-1,k-1)
(2)迭代求解
def CnkD(n,k):
C=defaultdict(int)
for row in range(n+1):
C[row,0]=1
for col in range(1,k+1):
if col <= row:
C[row,col]=C[row-1,col-1]+C[row-1,col]
return C[n,k]
速度对比:
n = 100k = 5 用时(秒):
1: 0.0
2:64.45168709754944
3(1):0.0019998550415039062
3(2):0.0
发现直接递归求解的速度是最慢的,这个容易想见,因为其做了很多重复运算
去掉它,再进一步对比剩下三个的速度
n = 100k = 80
用时(秒):1: 0.03(1):0.0109999179840087893(2):0.007001161575317383
n = 500k = 100
这时发现1,和3(1)都出现了maximum recursion depth exceeded in comparison错误
这是由于栈深度引起的问题
只有3(2)不存在这个问题仍能计算出结果
python 求组合数最快方法_python求二项式系数的几种方法及性能对比相关推荐
- python中质数的表达方式_python求质数的3种方法
本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下 题目要求是求所有小于n的质数的个数. 求质数方法1: 穷举法: 根据定义循环判断该数除以比他小的每个自然数(大于1),如果 ...
- python求二项式系数的几种方法及性能对比
最近研究了python求二项式系数的几种方法,对比了一下他们的速度 1. 利用阶乘简洁求 #普通阶乘 def fact(n):if n == 0:return 1else:return n*fact( ...
- 如何用计算机求最小公倍数的方法,快速求最小公倍数的四种方法(小学的题目额!) 假如用C求呢??...
快速求最小公倍数的四种方法 最近,在教学国标本五年级下册关于求最小公倍数时,从学生反映的作业情况来看,学生还是很容易做错的,为此我总结出了四种如何求最小公倍数的方法. 如果两个数是互质数(即两数的最大 ...
- python安装模块方法_Python安装模块的几种方法
一.方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行: python setup.py ...
- python urllib下载文件怎么停止_python下载文件的三种方法
Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...
- python 获取csv的列数_Python读取excel的两种方法
excel是什么 Microsoft Excel是一个使用非常广泛的电子表格程序.它的用户友好性和吸引人的功能使其成为数据科学中常用的工具.对于excel来说,整个excel文件称为工作簿,工作簿中的 ...
- python向上取整的方法_python 取整的两种方法,python向上取整的方法,问题简介: 要把一...
python 取整的两种方法,python向上取整的方法,问题简介: 要把一 问题简介: 要把一个浮点数(float)整数部分提取出来.比如把"2.1"变成"2" ...
- python导入模块方法_Python导入模块的3种方法(非常详细)
许多初学者经常遇到这样的问题: 自定义Python模板后,在其他文件中使用带有import(或从... import)语句导入文件时,Python解释器还会出现以下错误: ModuleNotFound ...
- python开发的系统有哪些_Python web开发=几个模板系统的性能对比
Python web 开发:几个模板系统的性能对比 对比目标, jinja2 , cheetah , mako , webpy , bottle , tornado , django 的性能. 方法, ...
最新文章
- 人工智能将会如何影响和服务医疗行业?未来十年会有哪些值得期待的应用?
- Win7 SP1语言包微软官方下载地址及使用方法 2
- 中国「人造太阳」刚刚再破纪录:运行时间突破千秒,负责人:为稳态的聚变工程堆奠定基础...
- 多维数组的索引与切片_「GCTT 出品」Go 系列教程——11. 数组和切片
- gvim在windows下中文乱码的终极解决方案
- gdc2011一些“其他”
- 项目管理(2):管理过程二
- 计算机二级选择题40分,2017年计算机二级选择题及答案
- Linux查找(find)指令的使用
- 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
- Nvidia GPU 最新计算能力表(CUDA Compute Capability)
- MacBook 安装win7双系统、2013款MacBook air安装双系统教程
- Html5实现的语音搜索功能
- 考研大作文模板与实战(图表为主+部分图画新题型)
- 群晖+picgo搭建私有图床
- 几种软件设计模式简述以及示例
- 安全防御(三)--- IDS、防火墙入侵防御
- CDH 的Kerberos认证配置
- 微博登录和session恢复过程
- linux和华为云计算区别,华为云计算HCIE-Cloud面试宝典(九)
热门文章
- 【无人驾驶系列四】 基于Spark与ROS分布式无人驾驶模拟平台
- 【第一个MRC程序 Objective-C语言】
- LLVM学习笔记(43-2)
- 第一部用计算机虚拟现实,“通过计算机虚拟现实﹐而不去进行昂贵的度假"是利用了40个发明原理中的( ) 。...
- 高中生都能读懂的手机中RAM与ROM及闪存的知识
- ansible剧本如何写_我学过的3课:写Ansible剧本
- mysql的数据表同步工具 canal的使用
- ESXI6.7打补丁升级至17700523版本
- 苹果助手开发随笔系列:4、获取应用列表以及访问应用内共享目录
- Go语言基础-数据类型-整型