通俗理解“以空间复杂度换时间复杂度”的效率提升方法
所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。
直到上周实验室同门在给我讲数组排序时讲到这个问题,听完才发现,复杂度问题并没有想象中的那么复杂。接下来,我们就简单来说一下时间复杂度与空间复杂度。
比如在C语言中,一个for循环的时间复杂度为O(n),那么双重for循环的时间复杂度就是O(n²)。可想而知,如果一个运行时间为1秒的循环,嵌套多层循环之后,其复杂度是呈指数上升的。所以,在这种情况下,我们倾向于以空间复杂度来替换时间复杂度。
所谓空间复杂度,顾名思义,就是程序在运行时所消耗的内存空间。即程序在运行时所消耗的内存容量的多少。拿刚才的for循环例子来说,相比于双重for循环,如果我们能以两个并列的for循环来实现需求,那么所需的时间复杂度只是两个O(n),即2 O(n)。但在描述的时候,我们通常取两个并列循环当中的消耗最大的程序为标准,直接以它的空间复杂度为最终复杂度,也就是O(n)。
这样一来,程序的效率就会提高。但也要注意,以空间复杂度换时间复杂度的效率提升方法只是众多效率提升的方法之一,还需要具体问题具体分析。
和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。
直到上周实验室同门在给我讲数组排序时讲到这个问题,听完才发现,复杂度问题并没有想象中的那么复杂。接下来,我们就简单来说一下时间复杂度与空间复杂度。
比如在C语言中,一个for循环的时间复杂度为O(n),那么双重for循环的时间复杂度就是O(n²)。可想而知,如果一个运行时间为1秒的循环,嵌套多层循环之后,其复杂度是呈指数上升的。所以,在这种情况下,我们倾向于以空间复杂度来替换时间复杂度。
所谓空间复杂度,顾名思义,就是程序在运行时所消耗的内存空间。即程序在运行时所消耗的内存容量的多少。拿刚才的for循环例子来说,相比于双重for循环,如果我们能以两个并列的for循环来实现需求,那么所需的时间复杂度只是两个O(n),即2 O(n)。但在描述的时候,我们通常取两个并列循环当中的消耗最大的程序为标准,直接以它的空间复杂度为最终复杂度,也就是O(n)。
这样一来,程序的效率就会提高。但也要注意,以空间复杂度换时间复杂度的效率提升方法只是众多效率提升的方法之一,还需要具体问题具体分析。