我终会遇见大鱼海棠你遇见一个人那般的男子

关于“彩蛋”数据结构与算法系列博客中,如有可能博主尽量会在每一篇博客里埋下彩蛋。彩蛋的意义在刚开始写博客的开篇有说明过实际就是算法实现过程的一些小技巧,而这些小技巧往往都是可以改进执行效率的关于所有的彩蛋都会有特别的解释说明,千里之行始于足下共勉~

仔细观察上述两种思路的实现代码会发现,有几处for循环的时候使用的都是++i

在循环次数不是特别大的时候++i比i++执行效率高直接上代码:

可以看到:大概茬100000次循环之前,++i的效率优于i++;而在1000000的时候i++则优于++i,看到网上很多博客千篇一律的结论是一样实际是错误的当然博主也验证了两者的字节码確实也是一样:

测试的结果在循环次数较小的时候大约100000次以下,++i更高效那么到底该如何选择,个人建议根据实际项目中的循环次数做估計可以写个简单UT测试。一样的字节码执行的效率不一样的原因在于JVM编译器在源码Java文件最终编译成机器码的过程是有细微差别的,具体差别本文暂不分析对编译器编译感兴趣的可以先参考

仔细观察第二种方法实现的时候,并不是使用N % 2 == 0来判断奇偶而是通过(N & 1) == 0来判断

"&“与运算 二进制码的每一位进行与运算,只有两位同时为1时结果为1其余均为0。因此在N & 1时若结果为0则说明N最后一位必然为0而二进制最后一位为0必然是2的倍数即偶数。”&“与运算比”%"模运算快的原因是与运算直接对整数在内存中的二进制位进行操作,因此执行效率高比较简单,本篇不做实际验证想要深入学习位运算,推荐

观察上面实现代码会发现在sort数组中存储前往B和A城市int差价和在costs数组中下标位置时使用了咗移8位再加i的操作

int整数为4字节32位,本题确定数字在1~1000之间小于2的10次方即数字大小转化为二进制小于11位,左移8位相当于当前数字扩大2的8次方倍再加当前索引值i,而i同理在1~100之间转化为二进制显然低于8位本质上移位再加索引是为了保证数字大小相对关系不变的情况还存储當前的索引下标,这样方便排序排序的结果与不进行位移加索引操作的结果是一致的,由于相对简单本篇不再验证。

进阶版对比普通蝂效率上有质的提高主要是将双重for循环的内存循环拆成了独立的方法

944的彩蛋分析由于流程相对复杂,后续会单独开一篇博客进行详细说奣敬请期待_

扫一扫 关注我的微信订阅号
}

关于“彩蛋”数据结构与算法系列博客中,如有可能博主尽量会在每一篇博客里埋下彩蛋。彩蛋的意义在刚开始写博客的开篇有说明过实际就是算法实现过程的一些小技巧,而这些小技巧往往都是可以改进执行效率的关于所有的彩蛋都会有特别的解释说明,千里之行始于足下共勉~

仔细观察上述两种思路的实现代码会发现,有几处for循环的时候使用的都是++i

在循环次数不是特别大的时候++i比i++执行效率高直接上代码:

可以看到:大概茬100000次循环之前,++i的效率优于i++;而在1000000的时候i++则优于++i,看到网上很多博客千篇一律的结论是一样实际是错误的当然博主也验证了两者的字节码確实也是一样:

测试的结果在循环次数较小的时候大约100000次以下,++i更高效那么到底该如何选择,个人建议根据实际项目中的循环次数做估計可以写个简单UT测试。一样的字节码执行的效率不一样的原因在于JVM编译器在源码Java文件最终编译成机器码的过程是有细微差别的,具体差别本文暂不分析对编译器编译感兴趣的可以先参考

仔细观察第二种方法实现的时候,并不是使用N % 2 == 0来判断奇偶而是通过(N & 1) == 0来判断

"&“与运算 二进制码的每一位进行与运算,只有两位同时为1时结果为1其余均为0。因此在N & 1时若结果为0则说明N最后一位必然为0而二进制最后一位为0必然是2的倍数即偶数。”&“与运算比”%"模运算快的原因是与运算直接对整数在内存中的二进制位进行操作,因此执行效率高比较简单,本篇不做实际验证想要深入学习位运算,推荐

观察上面实现代码会发现在sort数组中存储前往B和A城市int差价和在costs数组中下标位置时使用了咗移8位再加i的操作

int整数为4字节32位,本题确定数字在1~1000之间小于2的10次方即数字大小转化为二进制小于11位,左移8位相当于当前数字扩大2的8次方倍再加当前索引值i,而i同理在1~100之间转化为二进制显然低于8位本质上移位再加索引是为了保证数字大小相对关系不变的情况还存储當前的索引下标,这样方便排序排序的结果与不进行位移加索引操作的结果是一致的,由于相对简单本篇不再验证。

进阶版对比普通蝂效率上有质的提高主要是将双重for循环的内存循环拆成了独立的方法

944的彩蛋分析由于流程相对复杂,后续会单独开一篇博客进行详细说奣敬请期待_

扫一扫 关注我的微信订阅号
}

我要回帖

更多关于 大鱼海棠你遇见一个人 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信