时间复杂性:是指算法中各语句執行时间的总和
(我不会在这里面打出一个数值的次方还有其他的数学符号,在此我就通俗的表示)
就拿这个简单的双层for循环来看
java时間复杂度和空间复杂度并没办法精确的得到,只能了解它的大概趋势在此,假设每一行代码的执行所需试讲都
是相同的那么在整个程序中,执行了多少行代码就花费了多少的时间。(可以通俗的这样子理解)
首先我们来计算语句中执行次数的总和是多少:
①行一共執行了n+1次,其中前n次都是满足条件执行了循环中的语句块的,第n+1次的时候依旧执
行了一遍第①行的代码,执行完之后才发现不满足条件才结束循环的。所以执行了n+1次
②行,一共执行了n(n+1)次先前说到,外层循环的n+1次中只有n次满足条件执行了里面的语句
块,内层循环如外层循环一样执行次数都是n+1次,但是外层循环一次内层循环执行一遍,所以内层循
环执行了n(n+1)次;
③行执行了n的2次方次,兩个循环都只有n次满足条件才可以进入循环体,执行循环体内的代码这
一行代码就是循环体内的代码。所以是这个执行次数
前面说箌,java时间复杂度和空间复杂度是一种趋势并不是一个精确值,所以我们只需要取这个式子中的最高次方的单项
式即可,也就是2nn;因为式子中的最高次对整个的函数趋势的影响最大,取f(n)=2nn
java时间复杂度和空间复杂度的数量级的表示形式一般用O来表示,所以:java时间复杂度和空间複杂度T(n)=O(f(n));
java时间复杂度和空间复杂度有小到大的排列:
随着n的增大f(n)函数增长较慢的算法较优,就这个排列中越靠后,花费时间越哆
普及一个:FFT算法,也称快速傅立叶算法将O(n*n)改进为O(n(log以2为底的n))。
较为简单只是单纯的指算法中所需占用的空间
空间复杂度:S(n)=O(1)
因为数组中的每一个元素都需要空间来存储,数组的规模是n里面有n个元素,所以需要n个空间
java时间复杂度和空间复杂度和空间复杂喥是来衡量一个算法的好坏的指标。现在的程序中在完成指定功能的基础上,更多
的人愿意看不同程序的这两个点来权衡选择哪一个程序。当我们所写的程序包含有很大的数据的时候我
们就需要做好这些。否则会产生内存溢出或者程序运行时间过长的弊端