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

Linq OrderBy().ThenBy()方法序列的时间复杂度是多少?

如何解决《LinqOrderBy().ThenBy()方法序列的时间复杂度是多少?》经验,为你挑选了1个好方法。

我在我的项目中使用Linq和Lambda Operations,我需要根据类的两个属性对List进行排序.因此,我使用了OrderBy().ThenBy()方法如下:

class ValueWithIndex{
    public long Value;
    public int Index;
}
...

List valuesWithIndex = new List();

for (int i = 0; i < A.Length; i++){
    ValueWithIndex vi = new ValueWithIndex();
    vi.Value = A[i];
    vi.Index = i;
    valuesWithIndex.Add(vi);
}
var orderedValues = valuesWithIndex.OrderBy(v => v.Value).ThenBy(v => v.Index);

...

在这个答案中,我们解释说,OrderBy()使用Quicksort,因此即使它具有O(N*logN)平均时间复杂度,对于最坏的情况,时间复杂度约为O(N 2).如果ThenBy()方法的时间复杂度最差为O(N 2),那么使用这些方法毫无意义.

ThenBy()方法也使用Quicksort吗?如果是,那是否意味着对于相同的"v.Value","v.Index"会被排序为O(N 2)最差的时间复杂度?



1> Ivan Stoev..:

LINQ OrderBy(...).ThenBy(...)...ThenBy(...)方法链通过多个排序键(使用多键比较器)形成单个排序操作.

因此,无论ThenBy(Descending)您在链中包含多少方法,排序操作的时间复杂度仍然是QuickSort O(N*logN)平均值/ O(N 2)最差情况的典型时间.当然,您添加的更多键,比较两个对象将花费更多时间,但排序操作的复杂性不会改变.


你已经做对了:)实际上它不一定会增加排序的时间,因为通常对于多键比较器,第二个,第三个等,只有先前的比较器返回相等才会调用比较器,即取决于如何您在第一,第二等级别拥有的许多重复键.在你的例子中,`Index`将仅与具有相同`Value`的项目进行比较.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有