c++ - 在非常小的数组中找到最小值

标签 c++ c arrays algorithm performance

我正在处理 long int 数据,我试图确定数组中的最小元素。我知道循环遍历数组以找到最小值的传统方法。本题是检查是否有其他方法可以加速。

这个数组的一些属性可能会帮助我们加快速度,但我不确定如何。

数组恰好有 8 个 long int 整数。每次我们调用该函数时,我们都会从数组中找到一个最小值,并将该数字替换为另一个数字,然后重复此步骤。 (至少80亿次)

我正在考虑以某种方式记住下一次迭代的第二大数字(因为我们将在当前迭代中比较它们)。与遍历数组的线性实现相比,这是否有用?

也允许排序,但我们必须使用临时数组以某种方式记住原始位置。这样会不会更有效。

还有可能以某种方式使用 SIMD 来确定长整数的最小值吗?即使是毫秒级的加速也很有用,因为我要执行此操作数十亿次。

最佳答案

具有 8 个元素的数组的算法的理论复杂性几乎无关紧要。线性搜索很可能是您的最佳选择,考虑到缓存位置和所有因素。

另一种选择是将数组按降序排序一次,然后每次都简单地替换第一个元素,最后将新数字向右移动。

无论如何,请尝试分析。

关于c++ - 在非常小的数组中找到最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510468/

相关文章:

c++ - 在 Visual Studio 中集成 QT 和 OpenCV

c++ - 如何使用 RegOpenKeyEx 创建或查询注册表

c++ - 如何在构造函数中初始化类的成员数组?

CS50 Pset3 函数 "Won"

java - 使用数组计算数字中每个数字的出现次数

c++ - Xcode 调试器静态成员变量

c - 将字符串分配给字符数组

c++ - 使用 Nsight 确定银行冲突和合并

javascript - 我对 For 循环的理解正确吗?我缺少什么? - JavaScript

java - 获取JAVA中数组中数字之差的总和