大O表示法
大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。
不同的输入和数据规模都会影响程序的运行时间!时间复杂度主要考虑的是数据规模的影响!
O(1) 描述了一种无论输入数据集的大小如何总是在相同的时间(或空间)内运行的算法。
bool IsFirstElementNull(IList<String> elements){return elements[0] == null;}
O(N) 描述了一种性能线性增长并且与输入数据集的大小成正比的算法。
bool ContainsValue(IEnumerable<string> elements, string value){foreach (var element in elements){if (element == value) return true;}return false;}
O(N²) 表示一种性能与输入数据集大小的平方成正比的算法,常见于涉及数据集嵌套迭代的算法中。更深的嵌套迭代将导致 O(N³)、O(N⁴) 等。
O(2^N) 表示一种随着对输入数据集的每次加法而增长加倍的算法。O(2^N) 函数的增长曲线是指数 —— 从非常小的开始,然后是急剧上升。O(2^N) 函数的一个例子是 Fibonacci 数的递归计算。
int Fibonacci(int number){if (number <= 1) return number;return Fibonacci(number - 2) + Fibonacci(number - 1);}
O(logn)表示运行时间与数据量规模的变化率成对数。能达到这种事很优秀了,因为随着规模增大,运行时间增加很少。

int sum = 1;while(sum < n) {sum = sum * 2;}
