Functional programming 在相同的空间和时间复杂度类别中,每个命令式算法是否都有一个纯函数等价物?
根据我个人的经验,我想答案是否定的。 以可变数组为例。似乎,通过使用具有随机访问的可变数据结构(即数组),可以最有效地解决某些问题。您可以使用与函数方法兼容的不同数据结构,如字典(F#中的映射),但这样您就不会有随机访问,并且您的算法的效率将因因子logn而降低。 在一些非常罕见的情况下,使用别名以不同的方式访问相同的数据结构不仅方便,而且效率更高。但别名也与函数方法的不变性不兼容Functional programming 在相同的空间和时间复杂度类别中,每个命令式算法是否都有一个纯函数等价物?,functional-programming,f#,time-complexity,space-complexity,Functional Programming,F#,Time Complexity,Space Complexity,根据我个人的经验,我想答案是否定的。 以可变数组为例。似乎,通过使用具有随机访问的可变数据结构(即数组),可以最有效地解决某些问题。您可以使用与函数方法兼容的不同数据结构,如字典(F#中的映射),但这样您就不会有随机访问,并且您的算法的效率将因因子logn而降低。 在一些非常罕见的情况下,使用别名以不同的方式访问相同的数据结构不仅方便,而且效率更高。但别名也与函数方法的不变性不兼容 这样的例子表明,纯功能性方法不可能在所有情况下都像命令式方法那样有效。当然我知道,函数式语言是图灵完备的,但我记不
这样的例子表明,纯功能性方法不可能在所有情况下都像命令式方法那样有效。当然我知道,函数式语言是图灵完备的,但我记不太清楚证明是否也告诉我们时间和空间的复杂性。那么,从理论角度来看,我们对此了解多少呢?我的假设正确吗 简短的回答是肯定的。功能数据结构效率较低:
和Map
是树,依赖于比较,而不是hashcode。因此Set
log(n)
确实提供了与可变数组相同的API,但它是一个链表。因此,List
用于随机访问log(n)
F#
是一种很好的语言,因为它对FP和OOP都有很好的支持。显示了这一点
然而,有一些有趣的问题,对数(n)因子是不必要的,同时也要记住,常数因子在现实世界的用例中可能也很重要。问题很好,但我认为这样问是错误的。不过,通过一些简单的修改,这可能是StackExchange的一个好问题:quora.com可能是解决此类问题的更好地方。