在分析算法时间效率时,不考虑乘法常数,因为A)当计算效率函数时,乘法常数被抵消B)常数函数随着输入大小的增长而增长得很慢C)当输入大小很小时,乘法常数的影响很小D)它们可以被速度较快的机器克服E)它们不影响实际的运行时间算法的
我猜是“B”,但我不知道正确答案所有选项都不正确吗?
最佳答案
所以我的评论延伸到了一个答案:
b)常数函数随着输入尺寸的增长增长非常缓慢
这根本没有道理。一个常量函数甚至根本不增长;然而,这里我们不是在讨论恒定的运行时函数,而是关于在给定算法的渐近复杂性时估计“步骤”的实际数目时可能发生的常系数。
然而,在渐近分析中,我们并不关心步数的精确性,只关心运行时间的比值随输入量的变化趋于无穷大的极限。
例如,“cc>”意味着,如果输入的大小增加了一倍,则运行时间将是原来的4倍,如果输入了三倍的大小,它将是原件的9倍。
C)当输入尺寸较小时,它们的影响很小
不,当输入大小很小时,它们有相当显著的效果。同样,当输入大小接近无穷大时,我们考虑的是极限。当O(n ^ 2)
趋于无穷大时,任何常数与n
的任何非常数单调增长函数相比都是渐近可忽略的。
当n
很小时,常量会对执行时间产生巨大影响。例如,有各种有趣和聪明的数据结构,但如果我们只有少量的数据,我们通常更喜欢数组而不是二叉树或链表,即使是频繁插入因为数组良好的缓存局部性属性使其常数因子非常小,所以理论上的n
插入可能比树中的O(n)
插入快得多。
d)它们可以被更快的机器克服
这个答案完全没有抓住要点,算法的渐近分析与物理机器的速度无关是的,随着时间的推移,机器变得越来越快,但这只是一个不变的因素如果在速度更快的计算机上运行O(log n)
算法的程序,则在输入大小翻倍的情况下执行该程序仍需要4倍的CPU时间。
e)它们不影响算法的实际运行时间
这也是错误的,他们绝对是错的。
因此,剩下的唯一答案是A,如果按照我上面的解释(关于执行时间的比率)来解释,这可能是正确的,但我肯定会用完全不同的措辞。
关于algorithm - 为什么在算法效率分析中不考虑常数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31096401/