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)并保持阵列上的所有其他操作具有相同的性能并保留订购. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |