正则表达式 - 这个正则表达式用于素数检测的复杂性是多少?

时间:2013-06-19 07:49:29

标签: ruby regex big-o time-complexity primes

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

("1" * n) !~ /^1?$|^(11+?)\1+$/   # where n is a positive integer

详情在此博文http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/

中进行了解释

我很好奇它以BIG-O表示法的方式表现。有人帮忙吗?

1 个答案:

答案 0 :(得分:5)

根据经验数据,它似乎是 O(n 2

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

Graph showing time taken to check if a number is prime.

蓝点是记录的时间,橙色线是y = 2.9e-9 * x^2。该线完美地拟合数据,表明复杂度为O(n 2 )。

这是可以预料到的,因为正则表达式会检查所有可能的除数,以查看它们中的任何除数是否在字符串中出现了很多次。