Javascript 惰性评价的渐近复杂性

Javascript 惰性评价的渐近复杂性,javascript,algorithm,Javascript,Algorithm,在严格求值中,程序的渐近复杂性更容易推理,因为要求值的子表达式以及求值的时间在语法上是明显的。对于惰性计算语言来说,情况并非如此。我发现很难推测表达式是O(n)、O(logn)还是O(nlogn) 用惰性评估解决渐进复杂性的最佳方法是什么? 如果有人能给我解释一下,让我明白这一点,他会对我有很大帮助,因为他需要严格的评估,计算成本=使用成本 如果您使用xs.map(cos),您需要支付cos*长度(xs)的成本 使用惰性评估时,使用成本(便宜(x)|昂贵(x)) 它的计算成本在很大程度上取决于便

在严格求值中,程序的渐近复杂性更容易推理,因为要求值的子表达式以及求值的时间在语法上是明显的。对于惰性计算语言来说,情况并非如此。我发现很难推测表达式是
O(n)、O(logn)还是O(nlogn)

用惰性评估解决渐进复杂性的最佳方法是什么?
如果有人能给我解释一下,让我明白这一点,他会对我有很大帮助,因为他需要严格的评估,计算成本=使用成本

如果您使用
xs.map(cos)
,您需要支付
cos
*长度(
xs
)的成本

使用惰性评估时,使用成本<计算成本。具体来说,它有多低,在很大程度上取决于计算的形状

延迟计算的最简单形式之一是布尔表达式的短路。看看
(x)=>(便宜(x)|昂贵(x))

它的计算成本在很大程度上取决于
便宜(x)
的正确率,因此
昂贵(x)
不会被调用。这同样适用于其他惰性计算,例如使用缓存/记忆、使用生成器等

在我看来,big-O方法并不适用于这样的问题,除非你能在问题的大小(big-O是关于什么的)和实际执行的延迟计算的速率之间找到一个明确的依赖关系