分析如下程序段的时间复杂度

2025-04-13 21:11:55
推荐回答(1个)
回答1:

三重循环,最外层i的循环执行n次,中间一重j的循环执行的次数是,i=1时1次,i=2时2次,i=n时就是n次,所以外层和中间层合起来看,整个循环执行1+2+3+。。。+n=n(n+1)/2次。然后内层循环执行的次数是,i=1,j=1时,执行1次,i=2,j=1时1次,i=2,j=2时2次,也就是i=2时执行了1+2=3次,i=3时,j=1时1次,j=2时2次,j=3时3次,所以i=3时执行了1+2+3=6次,以此类推,i=n时,最内层执行的次数就是1+2+。。。+n=n(n+1)/2次。所以把i取不同值的最内层执行次数全加起来1 + (1+2) + (1+2+3)+(1+2+3+4) + ... +(1+2+...+n)= 1*n +2*(n-1)+3*(n-2)+...+(n-1)*2+n= 1*n +2*(n-1)+...+ n/2*(n-n/2) + (n/2+1)*(n/2-1)+(n/2+2)*(n/2-2)+...+(n-1)*2+n*1(对这个公式前一半每一项的第一个数字,放大为n/2,后一个数字放大为n,对这个公式后一半的每一项第一个数字放大为n,第二个数字放大为n/2,于是这个式子的每一项都是小于n/2*n的,而一共有n项这样的数字,所以)< n/2*n *n=n*n*n/2=O(n*n*n).还要证明它大于某一个O(n*n*n)的表达式,这样就知道他的阶是O(n*n*n)了,不过证明大于这个好像有点难度。。。