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
根据此图,当
大O符号只是一个粗略的近似值,用来说明上升"n"的算法的复杂性。这可能非常不准确。
例如:
2^(n)/(n^10)仍然是o(2^n),n^5+n^4+n^3仍然是o(n^5)。在这种情况下,对于较小的n,选择复杂度为o(2^n)的算法显然更可取。