【发布时间】:2011-06-17 05:03:39
【问题描述】:
我有一个理论问题,如果你在这里给我建议,将不胜感激。
说,我们有这两段代码。 第一个:
For Each cell In rng1
collectionOfValues.Add (cell.Value)
Next
For Each cell In rng2
collectionOfAddresses.Add (cell.Address)
Next
For i = 1 To collectionOfAddresses.Count
Range(collectionOfAddresses.Item(i)) = collectionOfValues.Item(i)
Next i
在这里,我们将一个范围的地址添加到某个集合,并将另一个范围的值添加到第二个集合,然后用这些值填充这些地址上的单元格。
这是第二个代码,它是一样的:
For i = 1 To rng1.Rows.Count
For j = 1 To rng1.Columns.Count
rng2.Cells(i, j) = rng1.Cells(i, j)
Next j
Next i
所以,问题是 - 这两种情况下的执行时间是多少?我的意思是,很明显第二种情况是 O(n^2) (为了更容易,我们假设范围是正方形)。
第一个呢? For Each 是否被视为嵌套循环?
如果是这样,是否意味着第一个代码的时间是 O(n^2) + O(n^2) + O(n^2) = 3*O(n^2)和第二个code time一样吗?
一般来说,这两个代码除了第一个在创建集合时需要额外的内存之外,是否有所不同?
非常感谢。
【问题讨论】:
-
您可以考虑编辑此内容并用问题重新命名。比如,“这两种在 VBA 中使用循环的方式的时间复杂度有区别吗?”...
标签: vba excel time-complexity big-o