我正在研究下面的一个问题,并尝试在图表中给出答案,我比较了A和B两个步骤,但还有其他方法吗? 对于大小为n的问题,假设算法A需要1000n ^ 3步并且算法B需要2 ^ n步(注意carot符号^意味着增加功率)。问题的大小是算法A比B快(意味着算法A的步骤比B少)?
答案 0 :(得分:0)
答案是24,您可以通过编写如下所示的程序找到它
public static void main(String[] args) {
for (int i=1; i<100; i++){
double b = pow(2, i);
double a = 1000 * pow(i, 3);
if (b> a){
System.out.println(" i is " + i + " as a result a is " + a + " and b is " + b);
break;
}
}
这是输出: 我是24,结果a是1.3824E7,b是1.6777216E7
答案 1 :(得分:0)
如果您尝试使用O符号:
1000*n^3 = O(n^3)
,2^n = O(2^n)
,理论上O(n ^ 3)远小于(2 ^ n)。
但是如果你想使用精确的表达式,那么它就变成了一个纯粹的数学问题:任何可以绘制函数的数学软件都可以告诉你何时以及哪个函数更大。
我们使用O符号的原因是忽略常量。这不是因为可以忽略大的隐藏常数,而是因为常量的估计通常不准确 - 这很大程度上取决于硬件和程序的细节。