我需要一个更快的方法来从子数组中找到最大的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)
但它有点慢.我需要一个更快的方法.有小费吗?
Raw while或者for可能是C#中使用单线程代码可以拥有的最快版本(你唯一支付的是边界检查 - unsafe通过避免边界检查可以给你更多的性能).除此之外的任何LINQ都会减慢速度.
Max是O(n)操作 - 如果您需要更快的速度,则需要使用其他数据结构来存储信息.排序数组将是最快的(最大/分钟为O(1))但是插入,堆积或排序树的成本也很高.
或者,您可以在其上的所有操作上简单地跟踪数组的最大值.你必须包装数组并在每次操作上支付一些费用以使"max"始终保持最新状态,但是你将获得最大的O(1)并保持阵列上的所有其他操作具有相同的性能并保留订购.
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |