我很困惑如何从文件中获取输入。在许多黑客攻击网站中,输入的格式为
- 没有测试用例
情形1
情形2
..等等
我的问题是阅读输入的最佳方法是什么。我是否应该在一个循环中读取所有情况,将其存储在一个数组中,然后在单独的循环中对输入执行操作,或者只使用一个循环来读取和执行输入操作。这两种方法之间是否存在任何性能问题?
答案 0 :(得分:2)
你的问题没有明确的答案。基本上,“它取决于”。
在现代硬件平台上应该遵循的一般性能影响原则如下:当您尝试同时执行许多未实现(或松散相关)的事情时,涉及访问几个不相关的内存区域,代码的内存局部性恶化,程序的缓存行为也会恶化。错误的内存位置以及随之而来的不良缓存行为会对代码的性能产生显着的负面影响。出于这个原因,通常最好在后续阶段组织代码,每个阶段在一个或多或少定义良好的本地化内存区域中工作。
这是一个非常一般的原则,与输入/输出没有直接关系。它只是输入/输出可能证明是那些可能使你的代码“同时做太多事情”的事情之一。它是否会对代码性能产生影响实际上取决于代码的具体情况。
如果您的代码由缓慢的输入/输出操作支配,那么它的缓存性能根本不是一个重要因素。另一方面,如果您的代码花费大部分时间进行内存密集型计算,那么尝试从主计算周期中消除I / O操作这样的事情可能是个好主意。
答案 1 :(得分:2)
我说的不是很重要。无论哪种方式,都将执行相同数量的操作,问题是将“同类”操作聚集在一起。就像AndreyT所说的那样,在相同的一般记忆区域上分阶段组织它可能会提高性能。这实际上取决于你所做的输入和输出的种类,以及一些操作系统和编程语言的特定变量。问题基本上归结为“输入输出输入输出”是否慢于“输入输入输出输出”的问题,我认为这在很大程度上取决于编程语言和您正在使用的数据结构。查看如何在某些代码上设置计时器或秒表,您可以自己测试一下。我的预感是它会产生很小的差异,但你可能会使用与我想象的不同的数据结构,所以你只需要测试它。
所以它可能会有所帮助,但根据我的经验,除非你正在进行一些严重的数字运算或需要高度优化的代码,否则有一点不需要获得一秒钟的快速操作。现代计算机的运行速度非常快,以至于您通常需要大量的计算能力。当然,在你正在做一些计算密集的事情的情况下,每一点都有帮助。这都是关于编程时间和运行时间之间的权衡。
答案 2 :(得分:1)
取决于一些变体:
操作类型?输入或输出
并行?同步通话或异步通话
并行度?迭代之间存在依赖关系