functional-programming - 每个命令式算法在相同的空间和时间复杂度类中是否有一个纯函数等价物?
问题描述
根据我个人的经验,我想,答案是否定的。以可变数组为例。似乎,通过使用具有随机访问的可变数据结构(即数组)可以最有效地解决某些问题。您可以使用不同的数据结构,例如字典(F# 中的映射),它与函数式方法兼容,但您将无法进行随机访问,并且您的算法效率会因 log n 系数而变差。在一些相当罕见的情况下,使用别名可能不仅方便而且更有效,以便能够以不同的方式访问相同的数据结构。但是混叠也与函数方法的不变性不兼容。
像这样的例子表明,纯函数式方法不可能在所有情况下都像命令式方法那样有效。我当然知道,函数式语言是图灵完备的,但我不记得证明的足够好来判断它是否也告诉我们一些关于时间和空间复杂性的信息。那么从理论的角度来看,我们对此有什么了解呢?我的假设对吗?
解决方案
皮蓬格证明了
- 与以n步操作的纯程序相比,不纯程序最多存在 log( n ) 乘法开销(在 Big-O 意义上)。
- 确实存在需要 log( n ) 因子的某些问题。
但是,在一些有趣的问题中,log( n ) 因子不是必需的,并且请记住,常数因子在现实世界的用例中也可能很重要。
推荐阅读
- jquery - 如何在 JQuery 的选择标记中选择指定选项时编写 if 语句
- php - 使用对象在 PHP 中来自两个 mysql 表的 Json
- json - 我已经安装了 prisma,但是 package.json 中没有 prisma 的规范
- css - 项目处于活动状态时不需要的绿色边框
- pimcore - 如何在产品中编写对象分类存储?
- python - django JSONField 包含大于
- jenkins - kubernetes 上的 jenkins 在加载插件时抛出磁盘空间错误和错误
- ionic-framework - 无法显示来自环回服务器的图像
- java - 如何等待订阅完成?
- c# - 在编辑记录中获取下拉值