如何确定哪一个快速大哦表示法

时间:2015-02-11 05:10:28

标签: data-structures time-complexity

我正在研究下面的一个问题,并尝试在图表中给出答案,我比较了A和B两个步骤,但还有其他方法吗? 对于大小为n的问题,假设算法A需要1000n ^ 3步并且算法B需要2 ^ n步(注意carot符号^意味着增加功率)。问题的大小是算法A比B快(意味着算法A的步骤比B少)?

2 个答案:

答案 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符号的原因是忽略常量。这不是因为可以忽略大的隐藏常数,而是因为常量的估计通常不准确 - 这很大程度上取决于硬件和程序的细节。