“Careercup Cracking Coding Interview”(CCIS)一书中有一个示例问题。
将所有正整数解决方案打印到等式中 a 3 + b 3 = c 3 + d 3 和d是1到1000之间的整数。
他们给出了三个解决方案,其中两个我将在这里展示。
示例1
1 n = 1000
2 for a from 1 to n
3 for b from 1 to n
4 for c from 1 to n
S for d from 1 to n
6 if a^3 + b^3 == c^3 + d^3
7 print a, b, c, d
示例2
1 n = 1000
2 for a from 1 to n
3 for b from 1 to n
4 for c from 1 to n
5 d = pow(a3 + b3 - c3 , 1/3) // Will round to int
6 if a^3 + b^3 == c^3 + d^3 / / Validate that the value works
7 print a, b, c, d
该书指出,第一个问题是O(n 4 ),第二个问题是O(n 3 )。我的问题是他们为什么忽略pow
答案 0 :(得分:1)
Big O表示函数如何随n增长。 pow函数,特别是第二个参数为1/3,不随n增长。也就是说pow是O(1)。您可以将O(1)视为身份函数。 O(n)+ O(1)= O(n)就像2 + 0 = 2。
答案 1 :(得分:1)
你可以说他们并没有忽略它,但假设复杂性是O(1)
。理由如下:
您需要创建一个函数来计算从0
到1000^3
的某个数字的立方根(整数值)。你会如何实现它?一种简单的方法是二元搜索(存在更好的方法,如数值方法)。你需要多少次迭代:log2(1000^3)
大约是30. O(1)
。