时间复杂度、空间复杂度
什么是算法? 计算机是人的大脑的延伸,它的存在主要是为了帮助我们解决问题。 而算法在计算机领域中就是为了解决问题而指定的 一系列简单的指令集合 。不同的算法需要不同的资源,例如:执行时间或消耗内存。 如果一个算法执行时间需要好几年或者需要占用非常大的内存,那么这算法几乎毫无用处,即使有价值使用场景也非常有限。 因此,一般上我们讨论一个算法的优劣的时候可以通过 时间 和 空间 两个维度来衡量,也就是常说的: 1、时间复杂度; 2、空间复杂度; 我们当然希望执行时间和消耗内存都越少越好,但很多时候其实我们无法同时兼顾,需要在时间和空间之间做一定的取舍达到平衡。 时间复杂度 一般上,如果我们要衡量一个程序片段的执行时间,我们会把程序运行一次并打印时间,这是最常见也是最简单的方式。 这种方式存在一些问题: 1、不同的计算机会产生不同的执行时间,甚至于相同的计算机也会产生不同的时间,根据计算机当前的情况而定; 2、通常可能我们使用很小的数据量来测量,但一个算法随着数据量的不同性能变化是不同的,所以小数据量衡量的时间不见得适用于大数据量; 3、甚至于有时候一个算法压根无法直接通过运行来测试时间。 为了解决这些问题,引入了数学领域中的 “大O标记法” 大O标记法 T(N)=O(f(N)) 数学概念看起来有些费解,我们可以把T(N)=1000N把f(N)=N 2 ,当N=1000,c=1的时候