关于big o:在哪种情况下,复杂度为2 ^ n的算法会在n ^ 5上使用?

In which case(s) would an algorithm of complexity 2^n be used over a n^5?

这是教授问的问题。和我交谈过的其他学生都不知道如何回答这个问题。部分原因是这个问题有多奇怪,也因为他几乎没有解释过复杂性。你能帮我们吗?


算法复杂性通常描述在"Big-O"符号中,它涉及算法在输入向无穷大增长时所需的运算次数。这允许以下假设:

  • 较小项(例如n^5算法中的n^4)的贡献可以忽略。
  • 标量因子的贡献可以忽略。

例如,复杂度为2n^5+3n^4+n^2的算法将具有o(n^5)的大o复杂度-忽略标量因子和较小项。

当n很小,或者当标量因子很大时,这些假设就会失效。大O复杂度较小的算法可能具有较大的标量因子或非平凡的较小项,这使得该算法对于较小的输入值更昂贵。


https://www.wolframalpha.com/input/?i=绘图+2%5en+和+n%5e5

根据此图,当~1.2 < n < ~22.5时2n更好。


大O符号只是一个粗略的近似值,用来说明上升"n"的算法的复杂性。这可能非常不准确。

例如:

2^(n)/(n^10)仍然是o(2^n),n^5+n^4+n^3仍然是o(n^5)。在这种情况下,对于较小的n,选择复杂度为o(2^n)的算法显然更可取。