【发布时间】:2015-08-08 12:23:15
【问题描述】:
以下函数计算 a^b。 假设我们已经有一个 prime_list 包含所有需要的素数并且从小到大排序。 代码是用python写的。
def power(a,b):
if b == 0:
return 1
prime_range = int(sqrt(b)) + 1
for prime in prime_list:
if prime > prime_range:
break
if b % prime == 0:
return power(power(a, prime), b/prime)
return a * power(a, b-1)
如何确定它的时间复杂度? p.s.代码并不完美,但正如您所见,这个想法是使用素数来减少算术运算的次数。 我仍在寻找一个理想的实现,所以如果你想出一些东西,请帮忙。谢谢!
【问题讨论】:
-
您使用什么语言?您可以以编程方式测量运行时间。
-
即使您的语言的 sqrt() 也是基于实现的。除非您提供所需的详细信息,否则无法找到此功能的整体复杂性。
-
您真的要测量时间复杂度吗?反对“如何确定时间复杂度”或“如何测量运行时间”?
-
您使用的语言似乎是 Python。所描述的算法具有 O(n) 复杂度。但是,要测量时间运行时间,您可以导入 timeit,正如您在 stackoverflow.com/questions/2662140/… 中看到的那样。
-
@Stef 对不起英语不好:-(
标签: algorithm time-complexity number-theory