找到数字对的时间复杂度,当立方数加起来达到某个值时?

时间:2015-03-09 00:27:31

标签: algorithm

问题如下:

  

给定一个整数n,找到所有在立方时加起来为n的对。 (即1 ^ 3 + 12 ^ 3 = 1729,9 ^ 3 + 10 ^ 3 = 1729等)

我找到了两个解决方案:

1)

k = ceiling(cube root of n)
for i = 1 to k
    if (cube root of (n - i^3) % 1 == 0)
        print [i, j]
    end
end

2)

i = 1
j = ceiling(cube root of n)
while (i <= j)
    if (i^3 + j^3 == n)
        print [i++, j--]
    else if (i^3 + j^3 < n)
        i++
    else if (i^3 + j^3 > n)
        j-- 
    end
end

我相信这两个都在O(n)运行,一个优于另一个吗?

1 个答案:

答案 0 :(得分:1)

一般来说,计算根和类似的奇异函数是一项昂贵的操作,并且提供精确的数值结果,因此您无法始终进行直接的相等测试,因此您需要进行额外的测试以确定是否已经提出一个精确的整数解决方案。所以你的第二段代码更可取。从技术上讲,它应该从I = 0开始。

此外,您的最佳运行时间范围是O(n ^(1/3)),而不是O(n)。