2

我很困惑如何从文件中获取输入。在许多黑客挑战网站中,输入将采用以下格式

- 没有测试用例

情况1

案例2

..很快

我的问题是阅读输入的最佳方式是什么。我是否应该在一个循环中读取所有案例,将其存储在一个数组中,然后在单独的循环中对输入执行操作,或者只使用一个循环来读取和执行输入操作。这两种方法之间是否存在任何性能问题?

4

3 回答 3

2

我会说不是很明显。无论哪种方式,将执行相同数量的操作,问题是将“相同类型”的操作聚集在一起。就像 AndreyT 说的那样,将其组织在作用于相同一般内存区域的阶段可能会提高性能。这实际上取决于您所做的输入和输出类型,以及一些操作系统和编程语言特定的变量。问题基本上归结为“输入输出输入输出”是否比“输入输入输出输出”慢的问题,我认为这在很大程度上取决于您使用的编程语言和数据结构。查看如何在某些代码上设置计时器或秒表,您可以自己测试一下。我的预感是它几乎没有影响,

所以它可能会有所帮助,但根据我的经验,除非你正在做一些严肃的数字运算或需要高度优化的代码,否则在某些情况下获得更快的操作速度是不必要的。现代计算机运行得如此之快,以至于您通常有大量的计算能力可供使用。当然,如果你正在做一些计算密集型的事情,每一点都会有所帮助。这完全是关于编程时间和运行时间之间的权衡。

于 2013-06-04T05:51:16.070 回答
2

你的问题没有明确的答案。基本上,“这取决于”。

在现代硬件平台的许多情况下应该遵守的一个影响性能的一般原则如下:当您尝试一次执行许多未实现(或松散相关)的事情时,涉及访问多个不相关的内存区域时,您的代码会恶化,程序的缓存行为也会恶化。糟糕的内存局部性和随之而来的糟糕的缓存行为会对代码的性能产生显着的负面影响。出于这个原因,在后续阶段组织代码通常是个好主意,每个阶段都在或多或少定义良好的本地化内存区域内工作。

这是一个非常普遍的原则,与输入/输出没有直接关系。只是输入/输出可能被证明是可能使您的代码“一次做太多事情”的事情之一。它是否会对代码的性能产生影响实际上取决于代码的细节。

如果您的代码以缓慢的输入/输出操作为主,那么它的缓存性能根本就不是一个重要因素。另一方面,如果您的代码将大部分时间花在内存密集型计算上,那么尝试从主计算周期中消除 I/O 操作等事情可能是一个好主意。

于 2013-06-04T05:36:34.223 回答
1

取决于一些变体:

  • 操作类型 ? 输入或输出

  • 平行 ?同步调用或异步调用

  • 并行度 ? 迭代之间是否存在依赖关系

于 2013-06-04T09:32:10.070 回答