当前位置:  开发笔记 > 编程语言 > 正文

C#聚合在一个更好的时间复杂性

如何解决《C#聚合在一个更好的时间复杂性》经验,为你挑选了1个好方法。

假设我们有这样一个数组:

var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

我想执行聚合:

var sum = arr.Aggregate((a, b) => a + b);

当然,这只是简化它的一个例子.我没有处理int,但需要合并的更复杂的对象(它们是树).但是,这种聚合效果非常糟糕,因为它从左向右迭代,添加了两个相互对立的元素.在int的情况下,这没有任何区别,但是在复杂对象的情况下,更好的解决方案是以树的方式执行聚合.这是什么意思?

                   55
              36         19
      10             26      19
  3       7      11      15      19
1   2   3   4   5   6   7   8   9   10

我希望这个架构能够说清楚.

如何在C#的LINQ中实现这一目标?



1> Nikolay Kost..:

您可以使用PLINQ(并行LINQ).

Parallel Aggregation模式使用在计算结束时合并的非共享局部变量来给出最终结果.对于部分的,局部计算的结果,使用非共享局部变量是循环的步骤如何彼此独立.

如果调用AsParallel扩展方法,则指示编译器绑定到PLINQ而不是LINQ.该程序将使用表达式中所有进一步查询操作的并行版本.

在您的情况下,代码将是:

var sum = arr.AsParallel().Aggregate((a, b) => a + b);

在这里您可以找到更多信息:https://msdn.microsoft.com/en-us/library/ff963547.aspx

在此输入图像描述

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有