在分析算法时间效率时不考虑乘法常数因为a)它们在计算效率函数时抵消了B)随着输入大小的增长,常数函数增长非常缓慢(C)它们当输入尺寸小时,效果很小; D)可以通过更快的机器克服它们(E)它们不会影响算法的实际运行时间
我的猜测是" B",但我不知道答案是否正确。所有选项都不正确吗?
答案 0 :(得分:4)
所以这是我的评论扩展到答案:
B)随着输入大小的增长,常数函数增长非常缓慢
这甚至没有意义。一个恒定的功能甚至根本没有增长; 然而,这里我们不是在讨论常规运行时函数,而是关于常数系数,它们在估算实际“步数”时可能会出现“考虑到算法的渐近复杂性。
然而,在渐近分析中,我们并不关心步骤的确切数量,只是输入大小变为无穷大时运行时间与输入大小的函数关系的限制。
电子。 G。 O(n ^ 2)
表示如果您将输入大小加倍,则运行时间约为原始时间的4倍,如果输入大小增加三倍,则为原始值的9倍,等等。不说执行将完全采取“4步”或“9步”。
C)当输入尺寸小时,它们的效果很小
不,当输入尺寸很小时,它们具有相当显着的效果。同样,我们正在考虑限制,因为输入大小接近无穷大。与n
n
的任何非常数单调增长函数相比,任何常数都是渐近可忽略不计的。{/ 1}}无穷大。
当n
很小时,常量会对执行时间产生巨大影响。例如,有各种有趣和聪明的数据结构,但如果我们只有少量数据,我们通常更喜欢e上的数组。 G。二进制树或链表,即使是频繁插入,因为数组的良好缓存局部性使其常数因子如此之小,理论上O(n)
插入可能比O(log n)
快得多。插入树中。
D)更快的机器可以克服它们
这个答案完全忽略了这一点,算法的渐近分析与物理机器的速度有多差距 。是的,机器随着时间的推移变得越来越快,但同样,这只是一个不变因素。如果在更快的机器上运行O(n ^ 2)
算法的程序,则使用双倍输入大小执行它仍需要4倍的CPU时间。
E)它们不影响算法的实际运行时间
这也是错的,他们绝对会这样做。
所以唯一剩下的答案是A,如果按照我上面的解释(与执行时间的比例有关)进行解释,可能是正确的,但我肯定会用完全不同的措辞。< / p>
答案 1 :(得分:1)
我认为答案是D:
在分析算法时间效率时不考虑乘法常数,因为 D)更快的机器可以克服它们
机器变得更快,提供恒定因子加速,克服了乘法常数,因此我们可以忽略乘法常数进行分析。
我宁愿说我们忽略乘法常数,因为它们依赖于特定的机器,但是对于多种选择,我们必须选择所提供的最佳答案。