我知道 n 2 是多项式。对数算法很快。但我对不同的数据输入感到困惑。小投入和大投入的情况是什么?
例如,假设您有两种排序算法:
B是O(n 2 ) 和 Q是O(n lg n)。
Q总是比B快吗?请提供您对这两种情况的看法。
答案 0 :(得分:2)
Big O表示法隐藏乘法常量,因此对于n的一些小值,O(n ^ 2)算法可能更快。
Big O只是保证在x的某个输入大小之后,具有较低增长率的算法将在较短的时间内运行(我假设我们正在做O时间,但它也可以指空间或其他因素)。 / p>
答案 1 :(得分:0)
n ^ 2是多项式 - 2 ^ n是指数
Big-oh处理渐近复杂性,意思是“n”很大;所以你的问题的答案是“错误的”。如果O(n ^ 2)算法具有n ^ 2的精确运行时间,并且O(n lg n)算法具有10 * n lg n的精确运行时间,那么对于小n n ^ n 2算法将更快(例如,n = 5; 5 ^ 2 = 25,10 * 5 * lg(5)约为100)。但是,对于大n,“10 *”因子是无关紧要的。
有时算法会结合两种或多种算法来利用它;例如,insert-sort是O(n ^ 2),但是有一个很小的常数因子,而mergesort是O(n lg n),具有更大的常数因子,所以当mergesort将其子数组拆分成足够小的块时,它将会对它们使用插入排序。