Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335189
  • 博文数量: 79
  • 博客积分: 2466
  • 博客等级: 大尉
  • 技术积分: 880
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-07 16:47
文章分类

全部博文(79)

文章存档

2014年(3)

2012年(7)

2011年(14)

2010年(2)

2009年(2)

2008年(2)

2007年(18)

2006年(31)

分类: C/C++

2011-10-23 22:31:16

在spoj上做The Shortest Path,不断的TLE,郁闷之极,又找不到测试数据。
无奈之下求助google,结果发现spoj网站论坛的一个帖子《Read this before posting!》里面说:

Check your input/output methods. In C++, using cin and cout is too slow. Use these, and you will guarantee not being able to solve any problem with a decent amount of input or output. Use printf and scanf instead. In java, a Scanner is even worse. Using a BufferedReader is your best bet for most problems. If you code in other languages, check the specific language forum to see if you can find any pointers there.

联想起题目中的提示“Warning: large Input/Output data, be careful with certain languages”,难道是……我中招了?赶紧动手把cin, cout请出去,把scanf, printf请进来。运行结果:
cin,cout的版本6.7秒
换成scanf,printf:3.2秒

再提交,通过。我就凌乱了啊。
困扰了几个月的程序性能问题,竟然只是因为C++的std::cin和std::cout。
iostream你用不用慢成这样啊?

两个教训:
第一,不管干什么,说明一定要细读,磨刀不误砍柴工;
第二,慎用C++的iostream...

(这道题的best solutions前20名有19个是C/C++实现。后来又看到有人在说,他用C++写的代码运行了11秒多,用C#直接超过25秒。我在想,我们学算法和数据结构的时候反复强调,问题规模够大以后,渐进复杂度会淹没其他一切因素,最终决定一个程序的性能;但我们是不是过分地强调了这一点?这容易让我们自己忘记一个事实:在同等的渐进复杂度下,尤其是完全相同的算法和数据结构下,不同语言的性能差距还是很大的。)
阅读(451) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~