三种最大子数组和算法的Java实现和比较。
(1)Java代码
package com.sau.five.algorithmAnalysis; public class MaxSubsequenceSum { public static int maxSubsequenceSum01(int[] a) //方法1:时间复杂度n(o^3) { int maxSum=0; //记录最大子数组和 for(int i=0;i<a.length;i++) for(int j=i;j<a.length;j++) { int thisSum=0; //临时记录 for(int k=i;k<=j;k++) { thisSum+=a[k]; } if(thisSum>maxSum) { maxSum=thisSum; } } return maxSum; } public static int maxSubsequenceSum02(int[] a) //方法2:时间复杂度n(o^2) { int maxSum = 0; for (int i=0; i<a.length;i++) { int thisSum = 0; for (int j =i; jmaxSum ) { maxSum = thisSum; } } } return maxSum; } public static int maxSubsequenceSum03(int[] a) //方法3:时间复杂度n(o) { int maxSum=0; int thisSum=0; for(int i=0;imaxSum) { maxSum = thisSum; } else if(thisSum<0) { thisSum = 0; } } return maxSum; } public static void main(String[] args) //main方法 { int L = 1000; //数组长度 long startTime00=System.nanoTime(); //获取程序开始时间 MaxSubsequenceSum mss = new MaxSubsequenceSum(); int[] a = new int[L]; for(int i=0;i<L;i++) { a[i]=(int) (L-(Math.random()*2*L)); //随机L个-L~L之间的数 } long startTime01=System.nanoTime(); //获取开始时间 System.out.println(mss.maxSubsequenceSum01(a)); long endTime01=System.nanoTime(); //获取结束时间 System.out.println("程序01运行时间: "+(endTime01-startTime01)+"ns"); long startTime02=System.nanoTime(); //获取开始时间 System.out.println(mss.maxSubsequenceSum02(a)); long endTime02=System.nanoTime(); //获取结束时间 System.out.println("程序02运行时间: "+(endTime02-startTime02)+"ns"); long startTime03=System.nanoTime(); //获取开始时间 System.out.println(mss.maxSubsequenceSum03(a)); long endTime03=System.nanoTime(); //获取结束时间 System.out.println("程序03运行时间: "+(endTime03-startTime03)+"ns"); long endTime00=System.nanoTime(); //获取程序结束时间 System.out.println("程序总运行时间: "+(endTime00-startTime00)+"ns"); } }
(2)三种算法运行结果比较
① 数组长度为1000时,运行结果如下图。比较三种算法的运行时间(单位:豪秒)约为 96.23:2.86:0.07,可见第三种算法的运行效率远高于前两种算法。
② 数组长度为10000时,运行结果如下图。比较三种算法的运行时间(单位:秒)约为 98.85:0.03:0.0003,而程序总运行时间也不过98.88秒,可见第一种算法几乎占用了程序运行的全部时间。
③ 数组长度为100000时,运行结果如下图。调换一下程序的运行顺序,比较三种算法的运行时间(单位:秒)约为 ∞:2.16:0.003,可见当数组长度达到10^6数量级时,第一种算法已经没有实用价值了。
最大子数组和算法(Java实现)
猜你喜欢
转载自blog.csdn.net/aaricyang/article/details/72579538
今日推荐
周排行