C#需要更快的方法来从子数组中找到最大的double值

Eer*_*den 3 c#

我需要一个更快的方法来从子数组中找到最大的double值.

这是我现在这样做的方式:

static double FindMax(double[] x, int startIndex, int endIndex)
{
    int i = startIndex;
    double max = x[i++];
    double value;
    while(i <= endIndex)
    {
        value = x[i++];
        if (value > max) max = value;
    }
    return max;
}
Run Code Online (Sandbox Code Playgroud)

但它有点慢.我需要一个更快的方法.有小费吗?

Ale*_*kov 8

Raw while或者for可能是C#中使用单线程代码可以拥有的最快版本(你唯一支付的是边界检查 - unsafe通过避免边界检查可以给你更多的性能).除此之外的任何LINQ都会减慢速度.

Max是O(n)操作 - 如果您需要更快的速度,则需要使用其他数据结构来存储信息.排序数组将是最快的(最大/分钟为O(1))但是插入,堆积或排序树的成本也很高.

或者,您可以在其上的所有操作上简单地跟踪数组的最大值.你必须包装数组并在每次操作上支付一些费用以使"max"始终保持最新状态,但是你将获得最大的O(1)并保持阵列上的所有其他操作具有相同的性能并保留订购.