algorithm - 忽略样式偏好,拥有一个强大的循环与许多轻量级循环相比有什么优势吗?

标签 algorithm performance runtime

例如,以下在任何语言中是否存在任何实际1 性能差异:

for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i
for i=1 to 10:
    print i

对比

for i=1 to (10 * 5):
    print i%10

显然,任务通常不会那么琐碎,但重点仍然存在。如果您必须遍历一个数据集,那么与重复遍历该数据集相比,一次性对该数据执行所有操作有什么优势吗?

1:我了解反复重新分配空间可能会产生相关费用。但是,如果与任何现实生活任务相比时间微不足道,那么我们暂时忽略它。

最佳答案

简短的回答是视情况:

  • 根据执行的实际任务,一种方法可能会比另一种方法提高可读性。这是一个影响正确性和可维护性的实际问题。 这应该是您主要关心的问题。

  • 将大循环分解成较小的循环可能会提高缓存效率。但是如今缓存大小相当大。

  • 将大循环分解为更小的循环可能会产生更简单的表达式(如您的示例中所见)或更少的测试。您可能会看到 for 多循环情况下的改进,但如此之小不应成为令人信服的理由。

  • 将小循环组合成一个更大的循环可能会产生更少的比较和跳转,就像您的示例中的情况一样,以获得微小的改进。但对于您的示例,完全展开小循环可能更有利。

与往常一样,对于性能调整,您必须执行基准测试并比较实际数据的时间。除非你看到很大的改进,否则选择最简单、最易读和可维护的解决方案。请注意,最优性是暂时的情况,环境、技术、数据量和特性的任何变化都可能影响任何解决方案的性能。

关于algorithm - 忽略样式偏好,拥有一个强大的循环与许多轻量级循环相比有什么优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449286/

相关文章:

java - unirest - java.lang.ClassNotFoundException : org. apache.http.nio.reactor.IOReactorException 异常

C++:字符串结构的相等性

c - 如何在C中中断覆盖文件时避免丢失数据

c# - 十进制的分钟到小时 + C# 中的舍入

python - 为什么在 Python 中处理排序的数组并不比处理未排序的数组快?

c++ - 为什么这个 Rcpp 代码比字节编译的 R 慢?

c# - 在排序列表中搜索值时如何节省 CPU 周期?

algorithm - 旅行推销员的特例(他周末休息)

php - 提高性能、PHP/JSON 解析和 MySQL 编写的建议 - 多个 JSON

algorithm - 以输入大小 N 表示的 big-Theta 运行时间