Skip to content

Latest commit

 

History

History
19 lines (11 loc) · 2.11 KB

算法.md

File metadata and controls

19 lines (11 loc) · 2.11 KB

算法

时间空间复杂度

什么时间复杂度

时间复杂度是一个函数,它定性描述该算法的运行时间,在软件开发中,时间复杂度就是用来方便开发者估算出程序运行时间,通常用算法的操作单元数量来代表程序消耗的时间,这里默认CPU的每个单元运行消耗的时间都是相同的。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率呈现一定的关系,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n)),其中n指的是指令集的数目。

什么是大O

大O用来表示算法执行时间的上界,也可以理解为最差情况下运行的时间,数据量和顺序等情况对算法的执行时间有非常大的影响,这里假设的是某个输入数据用该算法运行的时间,比其他数据的运算时间都要长。

插入排序的时间复杂度我们都说是O(n^2) ,但是插入排序的时间复杂度和输入数据有很大的关系,假如输入数据是完全有序的,则插入排序的时间复杂度是O(n),假如输入的数据是完全倒序的,则时间复杂度是O(n^2),所以最坏是O(n^2) 的时间复杂度,我们说插入排序的时间复杂度为O(n^2)。

快速排序是O(nlogn),快速排序的在最差的情况下时间复杂度是O(n^2) ,一般情况下是O(nlogn),所以严格从大O的定义来讲,快速排序的时间复杂度应该是O(n^2),但是我们依然说快速排序的时间复杂度是O(nlogn),这是业内默认的规定。

二分查找的时间复杂度是O(logn),每次二分数据规模减半,直到数据规模减少为 1,最后相当于求2的多少次方等于n,相当于分割了logn次。

归并排序的时间复杂度是O(nlogn),自顶而下的归并,从数据规模为n分割到1,时间复杂度是O(logn),然后不断向上归并的时间复杂度是O(n),总体时间复杂度是O(nlogn)。

树的遍历复杂度一般是O(n),n是树的节点个数,选择排序时间复杂度是O(n^2)