c# - 有趣的是,这可能是一个堆栈溢出问题

标签 c# list big-o micro-optimization

以下过程(解释如下)适用于非常小的列表,但当列表包含大量项目(1/2 百万)时,应用程序进入“未响应”状态,大约需要 2.5 分钟才能完成(非常糟糕的时间)。 我可能会添加应用程序需要处理 1 亿个项目的列表 至少(最终)。

这里是有问题的程序的代码:

    public void removeItems(List<long> L, SortedList<long, List<long>> _subLists)
    {
        foreach (KeyValuePair<long, List<long>> kvp in _subLists)
        {
            foreach (long duplicate in kvp.Value)
            {
                int j = L.IndexOf(duplicate);
                L.RemoveRange(j,(int)kvp.Key); 

            }
        }
    }

L 是长值列表。 _subLists 是一个排序列表,其中每个值都是一个列表 L 的值,开始一些差异(不相关)的等差级数。 与该值关联的键是值包含的系列的长度。

例子:

L = {1,2,3,5,6,7,18,20,21} _subLists = {2,<20>} {3,<1,5>}

该过程只是从 L 中删除等差级数。

最佳答案

此过程在大 O 表示法中的运行时间为 n^2,这是相当慢的,如果其中一个列表有 1 亿个条目,您可以预期运行时间会很慢。这里没有堆栈溢出问题,只是遍历这么多数据很慢。我真的没有在这里看到一个问题,你想让它更快吗?如果是这样,嵌套的 for 循环肯定是问题所在。

关于c# - 有趣的是,这可能是一个堆栈溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848490/

相关文章:

java - 数组与字符串的大 O 内存

algorithm - 时间复杂度是 sqrt(n) 但我们如何获得它呢?

c# - PInvoke NetLocalGroupGetMembers 遇到 FatalExecutionEngineError

C# winforms 将 UserID 值保存到类中

c# - 通过坐标获取窗口

list - 如何知道Struts2中的List是否为空?

algorithm - n0 的值是多少?

c# - 装箱/拆箱,更 retrofit 箱值的引用副本不会反射(reflect)到装箱值

python - Itertools 与索引的组合

java - Hibernate 在不删除旧元素的情况下将新元素保存在列表中