需要有助于判断实验中矩阵nxn的行列式的计算复杂性
我的代码:
导入编号为NP
导入时间it
t0=time.time (
forninrange (1,10 ) :
a=NP.random.rand(n,n ) ) ) ) ) ) ) )。
det=NP.LinaLG.slogdet(a ) )。
t=timeit.timeit(lambda:det ) )。
是打印(t )
但是,因为我每n得到了相同的时间,所以计算的复杂性: o(n )是不正确的。 那意味着是o(n^3)。 我非常感谢你的任何帮助。
最佳答案是其价值,而有意义的基准测试通常需要足够大的n来让计算机咀嚼东西。 1010矩阵不足以看到复杂性。 开始扔100、1010、1010等数字,可以看到变焦。
例如,如果我稍微修改一下你的代码
forninrange (1,14 ) :
t0=time.time (
p=2**n
a=NP.random.rand(p,p ) ) ) ) ) ) ) )。
det=NP.LinaLG.slogdet(a ) )。
print (n={ :04 d } :65:2 e } s ).format(p,time.time ) (- t0 ) ) ) ) ) ) ) ) ) 633606
这就是原因
N=0002 : 4.35e-02s
N=0004 : 0.00e 00s
N=0008 : 0.00e 00s
N=0016 : 5.02e-04s
N=0032 : 0.00e 00s
N=0064 : 5.02e-04s
N=0128 : 5.01e-04s
N=0256 : 1.50e-03s
N=0512 : 8.00e-03s
N=1024 : 3.95e-02s
N=2048 : 2.05e-01s
N=4096 : 1.01e 00s
N=8192 : 7.14e 00s
正如您所看到的,对于非常小的n值,一些小值优化和技巧会使o ()的复杂性变得不明显,但随着n值的增加,比例会开始出现。