有人了解编译器的典型大O复杂度吗?
我知道它必须是>= n
(其中n是程序中的行数),因为它需要至少扫描每一行。
我认为对于过程语言,它必须是>= n.logn
,因为程序可以引入O(n)个变量、函数、过程和类型等,在程序中引用这些需要花费O(log n)的时间查找。
除此之外,我对编译器架构的非正式理解已经达到了极限,不确定前向声明、递归、函数式语言或其他技巧是否会增加编译器的算法复杂度。
因此,总结如下:
对于“典型”的过程语言(C、Pascal、C#等),作为衡量有效设计编译器的标准(以代码行数计),是否存在大O的限制?
对于“典型”的函数式语言(Lisp、Haskell等),作为衡量有效设计编译器的标准(以代码行数计),是否存在大O的限制?