基于执行时间的时间复杂度经验估计
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。保留所有权利。
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示例
>>
>>>>
>
>
>>
(<;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。保留所有权利。