Algorithm _基本算法O(n)答案不';没道理吗?

Algorithm _基本算法O(n)答案不';没道理吗?,algorithm,big-o,Algorithm,Big O,它来自罗德·斯蒂芬斯的《基本算法》 假设我们有两个算法,分别在1500N和30N*N中解决同一个任务,我们希望使用什么算法以及什么时候使用 答案是,如果N小于或等于50,我们更愿意使用1500N算法,如果N大于50,则使用30N*N算法 所以,问题是我们为什么要这样使用它们?假设N为2,那么1500N将比30N*N慢,因为3000大于120,因此当N小于50时,第二个算法更快。我错过了什么?这难道不意味着书中的答案是错误的吗?事实上,答案似乎有不同的选择。当n小于50时,O(n*n)算法将更快。

它来自罗德·斯蒂芬斯的《基本算法》

假设我们有两个算法,分别在1500N和30N*N中解决同一个任务,我们希望使用什么算法以及什么时候使用

答案是,如果N小于或等于50,我们更愿意使用1500N算法,如果N大于50,则使用30N*N算法


所以,问题是我们为什么要这样使用它们?假设N为2,那么1500N将比30N*N慢,因为3000大于120,因此当N小于50时,第二个算法更快。我错过了什么?这难道不意味着书中的答案是错误的吗?

事实上,答案似乎有不同的选择。当n小于50时,O(n*n)算法将更快。如果值大于50,或者无法预测n的值,则应首选O(n)算法。一般的观察结果是,随着n的增加,大oh指数的值越低,扩展性越好


专家们已经注意到了这个错误(附录B,第488页)。

反过来说,这个问题可能是想说明常数的重要性。第一个算法是O(N),常数c=1500,第二个算法是O(N^2),常数c=40。你会说第一种算法更好,你是对的,但只有在一般情况下,当你考虑到大的输入。