zoukankan      html  css  js  c++  java
  • Algs4-1.4.38 3-sum的初级算法与ThreeSum性能比较

    1.4.38 3-sum的初级算法的实现。通过实验评估以下ThreeSum内循环的实现性能:
    for(int i=0;i<N;i++)
      for(int j=0;j<N;j++)
        for(int k=0;k<N;k++)
           if(i<j && j<k)
              if(a[i]+a[j]+a[k]==0)
                 cnt++;
    为此实现另一个版本的DoublingTest,计算该程序和ThreeSum的运行时间的比例。
    答:
    图片
    public class E1d4d38
    {
        public static int countOfThreeSum(int[] a)
        {
            int N=a.length;
            int cnt=0;
            for (int i=0;i<N;i++)
                for (int j=i+1;j<N;j++)
                   for(int k=j+1;k<N;k++)
                         if(a[i]+a[j]+a[k]==0)
                            cnt++;
            return cnt;
        }//end countOfThreeSum
       
       public static int countOfBasicThreeSum(int[] a)
        {
            int N=a.length;
            int cnt=0;
            for (int i=0;i<N;i++)
                for (int j=0;j<N;j++)
                   for(int k=0;k<N;k++)
                       if(i<j && j<k)
                         if(a[i]+a[j]+a[k]==0)
                            cnt++;
            return cnt;
        }//end countOfBasicThreeSum
      
     
        public static void timeTrial(int N)
        {
            int MAX=1000000;
            int[] a=new int[N];
            for(int i=0;i<N;i++)
                a[i]=StdRandom.uniform(-MAX,MAX);
          
            //
            Stopwatch timerBasicThreeSum=new Stopwatch();
            int cntBasicThreeSum=countOfBasicThreeSum(a);
            double timeBasicThreeSum= timerBasicThreeSum.elapsedTime();
             //
            Stopwatch timerThreeSum=new Stopwatch();
            int cntThreeSum=countOfThreeSum(a);
            double timeThreeSum= timerThreeSum.elapsedTime();
            //
            StdOut.printf("N=%7d BasicTime=%7.1f  ThreeSumTime=%7.1f  Rate=%7.1f ",N,timeBasicThreeSum,timeThreeSum,timeBasicThreeSum/timeThreeSum);
        }
       
        public static void main(String[] args)
        {
            for (int N=250;N<Integer.MAX_VALUE/2;N+=N)
                 {
                     timeTrial(N);
                 }
        }//end main
    }

  • 相关阅读:
    linux---集群架构初探(29) zabbix安装--5.0LTS+nginx+mysql
    linux---集群架构初探(28)常用监控命令
    合并两个有序数组
    从源码了解HashMap和ConcurrentHashMap的基本实现(下)
    从源码了解HashMap和ConcurrentHashMap的基本实现(上)
    从源码了解ArrayList和LinkedList
    从源码了解String,StringBuffer和StringBuilder
    java基本数据类型
    jsp 中 include指令 用法, <%@ include file="..."%> 和 <jsp:include page="..." flush="true" />的区别?
    AWS SAA_C01 考试分享。
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854543.html
Copyright © 2011-2022 走看看