Perl foreach对哈希键的复杂性

时间:2013-05-12 17:53:41

标签: perl complexity-theory

这段代码的复杂性是什么?

foreach $var (keys %varset) { 
  print "${var}\n";
}

是O(n ^ 2)还是O(n),也就是说,每次迭代都会调用键操作还是只调用一次?

2 个答案:

答案 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())。