最近研究了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求二项式系数的几种方法及性能对比相关推荐

  1. python中质数的表达方式_python求质数的3种方法

    本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下 题目要求是求所有小于n的质数的个数. 求质数方法1: 穷举法: 根据定义循环判断该数除以比他小的每个自然数(大于1),如果 ...

  2. python求二项式系数的几种方法及性能对比

    最近研究了python求二项式系数的几种方法,对比了一下他们的速度 1. 利用阶乘简洁求 #普通阶乘 def fact(n):if n == 0:return 1else:return n*fact( ...

  3. 如何用计算机求最小公倍数的方法,快速求最小公倍数的四种方法(小学的题目额!) 假如用C求呢??...

    快速求最小公倍数的四种方法 最近,在教学国标本五年级下册关于求最小公倍数时,从学生反映的作业情况来看,学生还是很容易做错的,为此我总结出了四种如何求最小公倍数的方法. 如果两个数是互质数(即两数的最大 ...

  4. python安装模块方法_Python安装模块的几种方法

    一.方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行: python setup.py ...

  5. python urllib下载文件怎么停止_python下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  6. python 获取csv的列数_Python读取excel的两种方法

    excel是什么 Microsoft Excel是一个使用非常广泛的电子表格程序.它的用户友好性和吸引人的功能使其成为数据科学中常用的工具.对于excel来说,整个excel文件称为工作簿,工作簿中的 ...

  7. python向上取整的方法_python 取整的两种方法,python向上取整的方法,问题简介:  要把一...

    python 取整的两种方法,python向上取整的方法,问题简介: 要把一 问题简介: 要把一个浮点数(float)整数部分提取出来.比如把"2.1"变成"2" ...

  8. python导入模块方法_Python导入模块的3种方法(非常详细)

    许多初学者经常遇到这样的问题: 自定义Python模板后,在其他文件中使用带有import(或从... import)语句导入文件时,Python解释器还会出现以下错误: ModuleNotFound ...

  9. python开发的系统有哪些_Python web开发=几个模板系统的性能对比

    Python web 开发:几个模板系统的性能对比 对比目标, jinja2 , cheetah , mako , webpy , bottle , tornado , django 的性能. 方法, ...

最新文章

  1. 人工智能将会如何影响和服务医疗行业?未来十年会有哪些值得期待的应用?
  2. Win7 SP1语言包微软官方下载地址及使用方法 2
  3. 中国「人造太阳」刚刚再破纪录:运行时间突破千秒,负责人:为稳态的聚变工程堆奠定基础...
  4. 多维数组的索引与切片_「GCTT 出品」Go 系列教程——11. 数组和切片
  5. gvim在windows下中文乱码的终极解决方案
  6. gdc2011一些“其他”
  7. 项目管理(2):管理过程二
  8. 计算机二级选择题40分,2017年计算机二级选择题及答案
  9. Linux查找(find)指令的使用
  10. 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
  11. Nvidia GPU 最新计算能力表(CUDA Compute Capability)
  12. MacBook 安装win7双系统、2013款MacBook air安装双系统教程
  13. Html5实现的语音搜索功能
  14. 考研大作文模板与实战(图表为主+部分图画新题型)
  15. 群晖+picgo搭建私有图床
  16. 几种软件设计模式简述以及示例
  17. 安全防御(三)--- IDS、防火墙入侵防御
  18. CDH 的Kerberos认证配置
  19. 微博登录和session恢复过程
  20. linux和华为云计算区别,华为云计算HCIE-Cloud面试宝典(九)

热门文章

  1. 【无人驾驶系列四】 基于Spark与ROS分布式无人驾驶模拟平台
  2. 【第一个MRC程序 Objective-C语言】
  3. LLVM学习笔记(43-2)
  4. 第一部用计算机虚拟现实,“通过计算机虚拟现实﹐而不去进行昂贵的度假"是利用了40个发明原理中的( ) 。...
  5. 高中生都能读懂的手机中RAM与ROM及闪存的知识
  6. ansible剧本如何写_我学过的3课:写Ansible剧本
  7. mysql的数据表同步工具 canal的使用
  8. ESXI6.7打补丁升级至17700523版本
  9. 苹果助手开发随笔系列:4、获取应用列表以及访问应用内共享目录
  10. Go语言基础-数据类型-整型