加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#需要更快的方法从子数组中找到最大双精度值

发布时间:2020-12-15 23:49:12 所属栏目:百科 来源:网络整理
导读:参见英文答案 What is the best way to get the minimum or maximum value from an Array of numbers?????????????????????????????????????18个 我需要一个更快的方法来从子数组中找到最大的double值. 这是我现在这样做的方式: static double FindMax(doub
参见英文答案 > What is the best way to get the minimum or maximum value from an Array of numbers?????????????????????????????????????18个
我需要一个更快的方法来从子数组中找到最大的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;
}

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读