c# - 我认为这个片段是 O(n^3) 是对的吗?

标签 c# big-o

collection.Where(i => i.condition)
.ToList()
.ForEach(i => SomeComplicatedOpInvolving_i);

我不是在寻找答案告诉我有更简单的方法来做这件事,只是把它当作一个思想实验。

首先,我认为这是三个循环是否正确? Where()ToList()ForEach()?
其次,(假设它是三个循环)我认为这是大 O 表示法中的 n 的 3 次方是否正确?

谢谢大家

最佳答案

不,实际上。我觉得应该是O(n)。

Where() 在 O(n) 中运行(假设 condition 是常量)

ToList() 也遍历 Where 的所有结果,所以也是 O(n)

ForEach() 遍历 ToList 生成的整个列表一次,O(n) 也是如此。我假设 SomeComplicatedOpInvolving_i 不随 i 的数量变化......

这里的关键点是循环不是嵌套的,它们一个接一个地运行 - 所以总运行时间是 3*O(n),与 O(n) 相同。

关于c# - 我认为这个片段是 O(n^3) 是对的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268727/

相关文章:

algorithm - 以下大 O 表示法函数的时间复杂度是多少?

c# - System.Drawing 对象非托管资源处理

c# - 哪个定时器类用于节拍器?

algorithm - i^k 的循环复杂度

Java从数组时间复杂度中找到最大值

O(n.m^2) 的算法运行时间

python - Word2Vec 时间复杂度

c# - 如何在 C# 中通过用户交互运行注册表文件

c# - itextsharp 和图像大小

c# - 如何根据 DataAnnotation 中的另一个属性验证一个属性