我试图在我的工作中找到正确的找到某些公式的大O符号。这些公式中的每一个都是某些算法中的操作数。这些是公式:
Forumulas
a。)n 2 + 5n
b。)3n 2 + 5n
c。)(n + 7)(n - 2)
d。)100n + 5
e。)5n + 3n 2
f。)2n
中的位数g。)n在低于1.0
之前可以除以10的次数我的回答:
a。)O(n 2 )
b。)O(n 2 )
c。)O(n 2 )
d。)O(n)
e。)O(n 2 )
f。)O(n)
g。)O(n)
我的分析是否正确?
答案 0 :(得分:3)
让我们一次完成这个。
a。)n 2 + 5.您的回答: O(n 2 )
是的!您正确地忽略了低阶词。
b。)3n 2 + 5n。你的答案: O(n 2 )。
是的! Big-O吃午餐的常数因素。
c。)(n + 7)(n - 2)。你的答案: O(n 2 )。
是的!您可以将其扩展为n 2 + 5n - 14并从那里删除低阶项以获得O(n 2 ),或者您可以意识到n + 7 = O(n)和n - 2 = O(n),看这是两个项的乘积,每个项都是O(n)。
d。)100n + 5.你的回答: O(n)。
是的!再次,删除常量和低阶项。
e。)5n + 3n 2 。你的答案: O(n 2 )。
是的!订单无关紧要; 5n仍然是一个低阶词。
f。)2n中的位数。你的答案: O(n)。
这个在技术上正确但不是一个好的约束。请记住,big-O表示法给出了一个上限,你是正确的,数字n有O(n)个数字,但只是在n的数字位数渐近地小于n的意义上。要了解为什么这个界限不是很好,让我们看看数字10,100,1000,10000和100000.这些数字分别有2,3,4,5和6位数字。换句话说,增长十倍只会使位数增加一。如果你所拥有的O(n)是紧的,那么你每次将数字增加十倍时,你的数字会增加十倍,这是不准确的。 / p>
作为这一点的提示,如果一个数字有d个数字,那么它在10 d 和10 d + 1 之间 - 1.这意味着d位数的数值是指数作为d的函数。因此,如果您从一些数字开始,则数值指数会更大。尝试向后运行。如果您知道的数值指数大于位数,那么作为数值函数的位数意味着什么?< / p>
f。)在低于1.0之前n可以除以10的次数。你的答案: O(n)
这个在技术上也是正确的,但不是很好的约束。例如,让我们取数字100,000。在你降到1.0以下之前你可以将它除以10七次,但是给出O(n)的界限意味着你说答案是n的函数线性增长,所以加倍n应该加倍的次数你可以除以10 ......但实际情况是这样吗?
作为提示,在数字低于1.0之前将数字除以10的次数与该数字中的位数密切相关。如果你能弄清楚这个问题,你就会弄清楚(e)部分,反之亦然。
祝你好运!