Ruby 这个素数正则表达式的复杂性是什么?

Ruby 这个素数正则表达式的复杂性是什么?,ruby,regex,big-o,time-complexity,primes,Ruby,Regex,Big O,Time Complexity,Primes,这行ruby代码检测素数(太棒了!) 详细内容在这篇博文中解释 我很好奇它在大O表示法方面的性能。有人帮忙吗?从经验数据来看,似乎是O(n2) 我在前10000个素数中的每100个上运行一次Ruby代码。结果如下: 蓝点是记录的时间,橙色线是y=2.9e-9*x^2。这条线与数据非常吻合,表明复杂度为O(n2) 这是意料之中的,因为正则表达式检查所有可能的除数,以查看其中任何除数是否在字符串中出现了整数次。博客评论已经谈到了性能,以及即使是稍微大一点的数字,性能如何开始受到严重影响。这句话似乎

这行ruby代码检测素数(太棒了!)

详细内容在这篇博文中解释


我很好奇它在大O表示法方面的性能。有人帮忙吗?

从经验数据来看,似乎是O(n2)

我在前10000个素数中的每100个上运行一次Ruby代码。结果如下:

蓝点是记录的时间,橙色线是
y=2.9e-9*x^2
。这条线与数据非常吻合,表明复杂度为O(n2)


这是意料之中的,因为正则表达式检查所有可能的除数,以查看其中任何除数是否在字符串中出现了整数次。

博客评论已经谈到了性能,以及即使是稍微大一点的数字,性能如何开始受到严重影响。这句话似乎很贴切:
“因此一个32位的数字2147483648将占用半个gig的内存”
就正则表达式的真正巧妙使用而言,就复杂性而言,它比仅使用最简单的素数算法要糟糕得多!无论如何,我想看看这个正则表达式生成的FSM。在我看来,它应该是O(N),其中N是数字的大小,而其他算法通常是O(sqrt(N))IIRC。更不用说它也是O(N)空间方面的,这使得它对于大Ns不可行。(很明显,它是O(n)空间中的Ruby,因为可以实现一个C++中的与ReGEX匹配的范围,但是不会占用N字节‘1’):-n=1时,DThis不工作,这是一个素数。难道不是内存分配而不是regex应用程序导致了速度下降吗?我再次运行了它,内存使用量只有4MB左右。
("1" * n) !~ /^1?$|^(11+?)\1+$/   # where n is a positive integer