基于集合关系对求解闰年数的算法优化
2017-10-07 20:15
281 查看
基于集合关系对求解闰年数的算法优化
前两天在微博上看到一个视频,好像是人民日报转发的,本来想把链接挂上来的,刚刚去翻了半天,没有找到。
视频中一位老师给学生讲为什么有闰年的存在,从而讲到什么是闰年。
我们知道,闰年有两个条件,满足任意一个即为闰年:
1、年份能被4整除但不能被400整除;
2、年份能被400整除。
通常,我求一个区间内的闰年数时,常规方法是会使用一个循环进行遍历,然后依据以上的两个条件对每一个年份进行判断,从而得出给定区间内有多少个闰年,比如0~2017,但是这里就有个问题,如果所求区间较小,还没什么影响。如果所求区间较大,比如0~2017000000,那么使用常规的循环方法就会非常耗时。
-------------------------------下面是集合的方法--------------------------
我们定义三个集合A,B,C。
其中A集合中为区间内所有的4的倍数;
B集合中为区间内所有的100的倍数;
C集合中为区间内所有的400的倍数;
那么,很显然,C包含于B,B包含于A。
这里我们假设A集合中的元素个数为a,B集合中的元素个数为b,C集合中的元素个数为c,那么:
条件1、年份能被4整除但不能被400整除
即为a-b
条件2、年份能被400整除
即为c
区间内闰年的总数即为:a-b+c
示例代码如下:
[java] view
plain copy
public class test{
//常规方法
public static void way_1(){
int count = 0;
int year = 2000000000;
for(int i = 0;i<year;i++){
if(i%400==0)
count++;
else if(i%4==0 && i%100!=0)
count++;
}
System.out.println("way_1 count is:"+count);
}
//集合方法
public static void way_2(){
int count = 0;
int year = 2000000000;
int A=0,B=0,C=0;
A = year/4;
B = year/100;
C = year/400;
count = A-B+C;
System.out.println("way_2 count is:"+count);
}
public static void main(String [] args){
//分别注释其中一个方法,测试另一个的执行时间
way_1();
way_2();
}
}
当区间为0~2000000000时,常规方法的运行时间是集合方法的数十倍~
前两天在微博上看到一个视频,好像是人民日报转发的,本来想把链接挂上来的,刚刚去翻了半天,没有找到。
视频中一位老师给学生讲为什么有闰年的存在,从而讲到什么是闰年。
我们知道,闰年有两个条件,满足任意一个即为闰年:
1、年份能被4整除但不能被400整除;
2、年份能被400整除。
通常,我求一个区间内的闰年数时,常规方法是会使用一个循环进行遍历,然后依据以上的两个条件对每一个年份进行判断,从而得出给定区间内有多少个闰年,比如0~2017,但是这里就有个问题,如果所求区间较小,还没什么影响。如果所求区间较大,比如0~2017000000,那么使用常规的循环方法就会非常耗时。
-------------------------------下面是集合的方法--------------------------
我们定义三个集合A,B,C。
其中A集合中为区间内所有的4的倍数;
B集合中为区间内所有的100的倍数;
C集合中为区间内所有的400的倍数;
那么,很显然,C包含于B,B包含于A。
这里我们假设A集合中的元素个数为a,B集合中的元素个数为b,C集合中的元素个数为c,那么:
条件1、年份能被4整除但不能被400整除
即为a-b
条件2、年份能被400整除
即为c
区间内闰年的总数即为:a-b+c
示例代码如下:
[java] view
plain copy
public class test{
//常规方法
public static void way_1(){
int count = 0;
int year = 2000000000;
for(int i = 0;i<year;i++){
if(i%400==0)
count++;
else if(i%4==0 && i%100!=0)
count++;
}
System.out.println("way_1 count is:"+count);
}
//集合方法
public static void way_2(){
int count = 0;
int year = 2000000000;
int A=0,B=0,C=0;
A = year/4;
B = year/100;
C = year/400;
count = A-B+C;
System.out.println("way_2 count is:"+count);
}
public static void main(String [] args){
//分别注释其中一个方法,测试另一个的执行时间
way_1();
way_2();
}
}
当区间为0~2000000000时,常规方法的运行时间是集合方法的数十倍~
相关文章推荐
- 基于集合关系对求解闰年数的算法优化
- 求解最短路径Bellman_Ford 算法优化版——结合队列
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
- 基于改进萤火虫优化算法的WSN覆盖优化分析
- 基于迪克斯特拉(Dijkstra)算法的物流优化系统(Java语言)
- 深度学习:基于梯度下降不同优化算法的比较总结
- 用 theano 求解 Logistic Regression (SGD 优化算法)
- 内部元素一一相应的集合的算法优化,从list到hashmap
- c++求集合幂集 源代码及算法优化
- sql server的基于日期的算法集合
- MySQL查询优化器源码分析--多表连接优化算法之一,optimize_straight_join()按表的指定顺序求解最优查询计划
- 某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。使用非递归的算法求解满足要求的n值的程序。
- 海量数据库的查询优化及分页算法方案集合1/2第1/2页
- 待更新·优化问题求解算法实现方法·Java版
- 一种基于几何多重映射的地形绘制优化算法(转)
- SSE图像算法优化系列二十三: 基于value-and-criterion structure 系列滤波器(如Kuwahara,MLV,MCV滤波器)的优化。
- 针对新闻标签提取的tf-idf优化算法1.0版本——基于jieba分词实现
- 基于关系数据库的查询优化
- 基于遗传算法优化的神经网络算法
- 一种基于几何多重映射的地形绘制优化算法