java - 这个执行频率是怎么算的?

查看:151
本文介绍了java - 这个执行频率是怎么算的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看到一段有关于算法分析的代码,带着注释:

public class ThreeSum
{
    public static int count(int[]a)
    {
        // 统计和为0的元组数量
        int N = a.length;
        int cnt = 0;
        for (int i =0;i<n;i++)    //1
            for(int j=i+1;k<n;j++)  //执行频率N
                for(int k =j+1;k<n;k++) //执行频率略等于n^2/2
                    if(a[i]+a[j]+a[k]==0)//执行频率略等于n^3/6
                        cnt++;
        return cnt;            
    }
    public static void main(String[]args)
    {
        int [] a = In.readInts(args[0]);
        StdOut.println(count(a));
    }
}

代码干的事情就是获取一组数字然后去找三个和为0的元组数量。想问的是这个执行频率是怎么计算的?
拿这部分代码说事:

        for (int i =0;i<n;i++)    //1;这里为什么是1?我觉得应该是N啊
            for(int j=i+1;k<n;j++)  //执行频率N;这里应该是N^2
                for(int k =j+1;k<n;k++) //执行频率略等于N^2/2;这里应该是N^3,话说为什么要/2?
                    if(a[i]+a[j]+a[k]==0)//执行频率略等于N^3/6;无法理解。为什么在这里是N^3/6,而且/6是怎么来的?
                        cnt++;

解决方案

for (int i =0;i<n;i++)    //1
            for(int j=i+1;j<n;j++)  //执行频率N
                for(int k =j+1;k<n;k++) //执行频率略等于n^2/2
      

你可以这样来看,如下:
n=1,第一个for循环执行1次,第二个for循环执行0次,第三个for循环不执行,共执行1次。
n=2,第一个for循环执行2次,第二个for循环执行1次,第三个for循环不执行,共执行3次。
n=3,第一个for循环执行3次,第二个for循环执行2次,第三个for循环执行1次,共执行6次。
.....
依次类推:
你看这个就是前n项和的求和公式嘛:(1+n)*n/2 = n^2/2

这篇关于java - 这个执行频率是怎么算的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆