偶然发现了一个用于计算数字平方根的(可怕)算法。关于时间复杂性的一个小论点。我断言时间复杂度为O(n ^ 2),因为对于n输入,它将乘以n次。我的朋友声称时间复杂度实际上是O(n)。谁是对的,为什么?
def squareRoot(x):
if x<0:
return "undefined"
elif x==0:
return 0
for i in range(0,x):
if(i*i)==x:
return i
答案 0 :(得分:1)
这是O(n),因为在最坏的情况下,你执行x次乘法和测试,所以你的计算时间随你的输入呈线性增长。
答案 1 :(得分:0)
首先我们需要知道整数乘法的复杂性是什么。
为简单起见,我们将使用Schönhage–Strassen algorithm 。对于带有n位数的数字,复杂度为O(n log n log log n)
。
当然,数字n
实际上有O(log n)
个数字,因此要将数字n的数字相乘,时间复杂度为O(log n log log n log log log n)
最多n个n个数量要乘以,所以总体来说是O(n log n log log n log log log n)
因此O(n^2)
更正确,与O(n!)
正确的方式相同。正确但无益。并且O(n)
是完全错误的,没有做出几个假设。
请注意,使用更好的乘法算法可以做得更好。
答案 2 :(得分:0)
让我们首先看看这个算法是如何运作的。
在最坏的情况下,即x不是正方形,x是素数,时间复杂度为O(n)。
在最好的情况下。那是不。是完美的正方形,那么它将按照SQRT(n)的顺序排列。