理解Big Oh Careercup Cracking Coding Interview

时间:2016-06-10 19:49:50

标签: algorithm big-o

“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

的复杂性

2 个答案:

答案 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)。理由如下:

您需要创建一个函数来计算从01000^3的某个数字的立方根(整数值)。你会如何实现它?一种简单的方法是二元搜索(存在更好的方法,如数值方法)。你需要多少次迭代:log2(1000^3)大约是30. O(1)