我在在线评判网上注册,其中预定义测试存在不同的问题以计算执行时间.
我已经提交了两次相同的代码,但有一点不同:
if(x1 < x2 || y1 < y2)
//code
Run Code Online (Sandbox Code Playgroud)
第二次提交:
if(x1 < x2 ||y1 < y2)
//code
Run Code Online (Sandbox Code Playgroud)
正如你在第二次提交中看到的那样,我之间没有空格||,y1而且我的结果是:
如何在第一次提交中获得更短的时间?代码是一样的,唯一的变化就是空格.
编辑:法官使用"gcc"编译器,测试总是相同的.
这两个代码片段将生成完全相同的可执行文件,因此空白是无关紧要的.它可能产生任何影响的唯一地方是编译时间(因为要解析的字节少一个字节),但如果它显而易见,我会非常惊讶.
如此短的运行时间,任何数量的环境变量都可能使结果产生偏差 - 临时内存加载,某个页面在错误的时刻交换到磁盘,您可以命名.底线 - 这可能是一个糟糕的基准.这个程序应该执行一个gazilion时间和平均值进行比较.执行一次给人方式太大的重量,无趣的噪音.
空格与C(以及大多数其他语言)无关.在任何体面的编译器中,两个版本将生成完全相同的机器语言指令输出.
速度的差异取决于测量的一些随机性,而不是间距.
要获得更快的代码,您需要考虑更好的算法,或者,如果抽象算法已经是最优的,则需要考虑缓存一致性等问题.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |