这段代码的复杂性是什么?
foreach $var (keys %varset) {
print "${var}\n";
}
是O(n ^ 2)还是O(n),也就是说,每次迭代都会调用键操作还是只调用一次?
答案 0 :(得分:9)
是O(n)。当foreach
循环开始时,表达式在列表上下文中计算,然后循环遍历该列表。首先,不能保证对keys
的后续调用将以相同的顺序返回键,或者甚至是相同的键,那么如果重新评估表达式,它将如何确定下一个元素是什么?
答案 1 :(得分:4)
您没有指定哪种资源,如果您对最佳,平均或最差情况感兴趣,那么我就是全部提供这些资源。
最佳和最差情况下for (keys %hash)
的CPU使用率为:Θ(N)获取密钥+Θ(N)迭代它们=Θ(N)
最佳和最差情况下for (keys %hash)
的内存使用情况为:Θ(N)获取密钥+Θ(1)迭代它们=Θ(N)
一些foreach循环已经过优化,无法使用内存。
最佳和最差情况下for (NON_CONST_EXPR..NON_CONST_EXPR)
的内存使用情况为:Θ(1)
for (@a)
的内存使用情况(最佳和最差情况)为:Θ(1)
Θ(f())比O(f())更具特异性。如果某事是Θ(f()),则它是O(f())和Ω(f())。