时间复杂度
时间复杂度就是程序运行一遍所消耗的时间和输入的数据量(n)之间的函数关系。通常有 :O(1), O(n), O(logn), O(nlogn), O(n²), O(n^k)
当数据的输入量与运行时间没有关系时,则时间复杂度为O(1)。像是经验公式,一般没有复杂的数据结构。
当程序拥有单一的循环,并且没有相应的循环检索函数(如count函数)时,时间复杂度为O(n)
当程序为二分检索类型,即每寻找一次就排除一半的可能,则时间复杂度为O(logn)。这个程序外有一个循环则时间复杂度即为O(nlogn)
当有n层循环时,则时间复杂度为O(n^k)
一般来说,我们需要寻找一个在特定复杂度下的解决方案。例如,如果。
- n小于等于1 000 000,预期的时间复杂度是O(n)或O(n log n)。
- n小于等于10 000,预期的时间复杂度是O(n2)。
- n.小于等于500,预期的时间复杂度是O(n3)。
当然,这些限制并不精确。它们只是近似值,而且会根据具体任务的不同而变化。
空间复杂度
空间复杂度是程序运行一遍临时占用的存储空间与输入的数据量(n)之间的关系。
当程序所占用的存储空间不随程序数据量变化而变化时,像是定义了一个常量,系统为这个常量分配了一块空间,无论他的值是多少,他所消耗的空间大小是不变的。这时的空间复杂度为O(1)
当程序所占用的存储空间随程序数据量呈线性变化时,像是定义了一个数组,为他赋值越多,那么系统为这个数组分配的空间也就呈比例的增多。这时的空间复杂度为O(n)
参考: