Big o 对于内有对数运算的循环,对数的O-难度是多少?

Big o 对于内有对数运算的循环,对数的O-难度是多少?,big-o,Big O,代码的大O表示法是什么,其中有一些对数for cycle,其中包含对数运算,例如: for (int i = 1; i < n; i = i*2) { binarySearchTree.add(i); } for(int i=1;i

代码的大O表示法是什么,其中有一些对数for cycle,其中包含对数运算,例如:

 for (int i = 1; i < n; i = i*2) {
    binarySearchTree.add(i);
 }
for(int i=1;i

O(log(n))*O(log(n))=O(log(n)*log(n)),可以进一步简化吗?

如果您记住O(n)是一个未指定的线性函数,那么大O符号的行为与正则数学表达式相同,因此允许您将其组合为:

O(log(n)) * O(log(n)) = O(log(n)²)
在数学方面,这几乎是你所能做的。当涉及到评估某事物的性能时(这正是Big-O表示法的优点),您可能需要更进一步:

与O(log(n))和O(n)相比,您的算法比后者更接近前者。对于n的高值(例如1e10),您可以得到:

  • O(log(n))=O(10)
  • O(对数(n)²)=O(100)
  • O(n)=O(1000000000)

因此,除非您的操作是使用较小的n,否则与线性操作O(n)相比,O(log(n))和O(log(n)²)的操作非常相似。类似于这样一种方式,即每个操作的计算工作量的差异可能超过它。

你至少可以将
log(n)*log(n)
表示为
(log(n))^2
这是O(无穷大),因为
i
永远不会增加。你的意思是写
inti=1相反?是的,我错了。它应该是int i=1;