yuange1975 发表于 2023-11-26 06:34:19



取了前20位显示
500,323秒
100,1秒

过几天用Julia编写一个直接编译执行的,和python解释执行的对比一下,看看执行时间如何。


=============wayne编辑,没必要上传图片,已经删除, 并补充更详细的答案
$(32243281478661245117275486119293967823731<<697226>>837906321426336396254777203086925844822511)/(30806209830441890018345910868023659832515<<697222>>000000000000000000000000000000000000000000)$

wayne 发表于 2023-11-26 23:40:17

PARI/Gp代码,跟前面的Mathematica代码的算法复杂度一样,$O(n*n*m)$, 但是运行速度好像比Mathematica慢不少.

default(parisize, 1000000000)
func(x,y) =
{
    y^(-1 - x)*x!;
}

nm(n,m) =
{
    g=0;
    p = 0;
    for(i=0,m-1,p+=1/i!*x^i);
    p = 1-(1-y*p)^n;
    for(j=1,n,cf=polcoef(p,j,y);
      for(xx=0,j*(m-1),g+=polcoef(cf,xx,x)*func(xx,j)));
    n*g
}

nmp(n,m) =
{
    g=0;
    p = 0;
    for(i=0,m-1,p+=1/i!*x^i);
    p = 1-(1-y*p)^n
}

yuange1975 发表于 2023-11-27 09:03:33

这个正常,这就是MMA平台的速度。

大致就是O(M*N*N)=c*M*N*N,不同平台不同实现代码大致有不同的c。

前面大致你的100和500的时间对比,以及我的时间对比,已经看出你的算法基本上也是N*N*M的复杂度了,只是实现代码和平台之间的c的差距。其实这个代码优化对c的影响也不小。

nyy 发表于 2023-11-27 10:05:59

挑战个啥?连注释都没有的代码,谁愿意看
页: 1 [2]
查看完整版本: 算法挑战