Big o 对于内有对数运算的循环,对数的O-难度是多少?
代码的大O表示法是什么,其中有一些对数for cycle,其中包含对数运算,例如: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
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;