值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
2010-11-23 14:45
183 查看
今天玩topcoder, 发现“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒。下面是例程。
package practice;
import java.util.Calendar;
public class GuessinNextElement {
public int guessSlow(int[] A)
{
boolean flag=true;
if ((A[1]-A[0])==(A[2]-A[1]))
flag=false;
if (flag)
return A[A.length-1]*(A[2]/A[1]);
else
return A[A.length-1]+(A[2]-A[1]);
}
public int guessFast(int[] A)
{
boolean flag=true;
if ((A[1]*2)==(A[2]-A[0]))
flag=false;
if (flag)
return A[A.length-1]*(A[2]/A[1]);
else
return A[A.length-1]+(A[2]-A[1]);
}
public static void main(String[] args) {
int[] A={13,117,1053,9477,85293};
GuessinNextElement gne=new GuessinNextElement();
long total = System.currentTimeMillis();
for (long l=0;l<1000000000;l++)
gne.guessSlow(A);
total = System.currentTimeMillis()-total;
System.out.println("guessSlow: "+total);
total = System.currentTimeMillis();
for (long l=0;l<1000000000;l++)
gne.guessFast(A);
total = System.currentTimeMillis()-total;
System.out.println("guessFast: "+total);
}
}
结果:
guessSlow: 17594
guessFast: 16422
package practice;
import java.util.Calendar;
public class GuessinNextElement {
public int guessSlow(int[] A)
{
boolean flag=true;
if ((A[1]-A[0])==(A[2]-A[1]))
flag=false;
if (flag)
return A[A.length-1]*(A[2]/A[1]);
else
return A[A.length-1]+(A[2]-A[1]);
}
public int guessFast(int[] A)
{
boolean flag=true;
if ((A[1]*2)==(A[2]-A[0]))
flag=false;
if (flag)
return A[A.length-1]*(A[2]/A[1]);
else
return A[A.length-1]+(A[2]-A[1]);
}
public static void main(String[] args) {
int[] A={13,117,1053,9477,85293};
GuessinNextElement gne=new GuessinNextElement();
long total = System.currentTimeMillis();
for (long l=0;l<1000000000;l++)
gne.guessSlow(A);
total = System.currentTimeMillis()-total;
System.out.println("guessSlow: "+total);
total = System.currentTimeMillis();
for (long l=0;l<1000000000;l++)
gne.guessFast(A);
total = System.currentTimeMillis()-total;
System.out.println("guessFast: "+total);
}
}
结果:
guessSlow: 17594
guessFast: 16422
相关文章推荐
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- 大数据的加法、减法、乘法以及阶乘的计算问题(源代码附上)
- 三元组创建矩阵 一次定位快速转置 矩阵的加法、减法、乘法
- 大数据的加法、减法、乘法以及阶乘的计算问题
- 大数模板 大数加法,大数减法,大数乘法,大数除法,大数比较等操作
- 一个基础而奇怪的问题:算法运行加法、乘法、除法性能无差别?
- 贪心算法-大整数乘法/加法/减法
- C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
- struts2_day02_09-属性封装操作_10-模型驱动封装操作_11-使用属性封装和模型驱动封装注意问题
- [.net中]数据操作应该注意的问题
- 【算法导论】动态规划之“矩阵链乘法”问题
- PHP/Yii2操作Cookie,常见问题以及注意事项
- 大整数运算之 大整数加法、减法、乘法
- 基于官方库的STM32操作U盘注意的问题
- pymongo 对游标进行for循环操作需要注意的问题
- 浮点加法、减法, 乘法、除法运算
- Hive 数据操作需要注意的问题(一)
- ubuntu 亮度 调节 按一次按键跳两次的问题,以及系统自动设置初始亮度
- Linux上添加udev规则使adb可以操作Android设备的注意问题