基于执行时间的时间复杂度经验估计

big_O的Python项目详细描述


===
big_o
=


big_o是一个python模块,用于根据其执行时间估算python代码的时间复杂性。它可用于分析函数如何随着输入大小的增加而扩展。


big撸o对大小为"n"的输入执行python函数,并测量其执行时间。从测量结果来看,big_o适合一组时间复杂度
的类,并返回最适合的类。这是计算"big-o"中函数渐近类的经验方法。表示法。(严格地说,我们是在经验计算大θ类。)

>;定义查找最大值(x):
…""在正整数列表中查找最大元素。""
…最大值=0
…对于x中的el:
…如果el>;最大值:
…最大值=el
…返回max_


,10000)
>;>;best,others=big_o.big_o(find_max,正整数发生器,n_repeats=100)
>;>;print(best)
线性:time=-0.00035+2.7e-06*n(sec)

"big_o"推断"find_max"函数的渐近行为为
线性,并返回n对象,包含
复杂度类的拟合系数。第二个返回参数"others"包含所有fitted类的字典
,其中fit的残差作为键:

>;>;对于class_u,残差位于others.items():
…打印({!s:<;60s}(res:{.2g})。格式(类残差))

指数:时间=-5*4.6e-05^n(秒)(res:15)
线性:时间=-0.00035+2.7e-06*n(秒)(res:6.3e-05)
二次:时间=0.046+2.4e-11*n^2(秒)(res:0.0056)
线性度:时间=0.0061+2.3e-07*n*log(n)(秒)(res:0.00016)
立方:时间=0.067+2.3e-16*n^3(秒)(res:0.013)
对数:时间=-0.2+0.033*log(n)(秒)(res:0.03)
常数:time=0.13(秒)(res:0.071)
多项式:time=-13*x^0.98(秒)(res:0.0056)


或者简单地返回n(`datagen.n`),以及返回长度为n
(`datagen.integers`)的随机整数列表的数据
生成器。

-`big\u.complexties`:此子模块定义适合执行时间的复杂度类。除非您想定义新类,否则不需要担心它。





rs(n,10000,50000))
(位于0x031da9d0>;处的大o.complexties.linearithmic对象,…)


在列表开头插入元素是o(n):

>lst.insert(0,0)

>;>print(big_o.big_o(insert_0,big_o.datagen.range_n,n_measures=100)[0])
线性:时间=-4.2e-06+7.9e-10*n(秒)

定义插入队列(队列):
…队列。插入(0,0)

>;>>定义队列生成器(n):
…return deque(range(n))

>>>gt>gt;print(big_o.big_o.big_o(insert_0_队列,队列发生器,n_度量值=100[0 0])
常量:time=2.2e-06(sec)


`numpy示例
>>
>>>>>
>



>>>






>>





>;大O大O大O(NP.0,大O.Datagen.N,max=100000,n重复次数=100)
(<;class'big_o.big_o.big o.o.线性大O.linear'gt;,…)


>>
-`numpy.empty`而只分配内存,因此O(1):

>>>>br>>>>>gt;big大O大O大O大O大O大O(NP.empt,big_o.o大O大O大O大O大O大O大O大O大O大O大O大O大O大O大O大O大.datagen.n_u,最大值n=100000,n_repeats=100)
(<;class"big_o.big_o.constant">;…)


其他示例
----


我们可以比较不同fibonacci数实现的估计时间复杂度。原始实现是指数o(2^n)。因为这个
实现非常低效,我们将减少测试的最大n:

>;>;def fib_u naive(n):
…如果n<;0:
…返回-1
…如果n<;2:
…返回n
…return-fib-naive(n-1)+fib-naive(n-2)


>gt>gt>gt;打印(big_o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o u u u u n,n重复次数=20,min_n=2,max_n=25[0])

指数:时间=-11*0.47^n(sec)



>寻找斐波纳契数的更高效的实现方法涉及使用动态规划和线性规划,动态规划(n):
>br/>
>;>;定义光纤dp(n):
…如果n<;0:
…返回-1
…如果n<;2:
…返回n
…A=0
…B=1
…对于范围(2,n+1)内的i:
…a,b=b,a+b
…返回b

>;>print(big_o.big_o(fib_dp,big_o.datagen.n_,n_repeats=100,min_n=200,max_n=1000)[0])
线性:时间=-1.8e-06+7.3e-06*n(秒)


license
----

big_o在bsd-3下发布。参见license.txt.


版权所有(C)2011-2018,Pietro Berkes。保留所有权利。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
静态函数中局部变量的java垃圾收集   java向ImageView添加投掷手势   java spring引导未根据配置文件读取正确的属性   主屏幕小部件中的java自定义布局   java JSP:具有相对路径的FileReader引发FileNotFoundException   java Hibernate在集合上循环时删除会话   java无法建立到jdbc:oracle:thin:@localhost:1521:XE的连接   java我可以使用Hibernate对特定的整数大小进行验证吗?   批处理文件如何注意Java中不同语言环境中的文件名   用于IntelliJ中声纳、PMD、Findbugs和Checkstyle的Java 8   在PIG程序中找不到java类分布式文件系统   Java游戏引擎中动态ZOrdering的绘制   java处理线程工作者的多个错误   带有MariaDB驱动程序的java MySQL服务器产生日期排序错误   java终止线程的正确方法   java Android在手机睡眠时发送udp   java如何将文档添加到事务内部的Firebase集合?