计算机中 为何可以时间换空间或空间换时间?

2020-03-27 16:20:51 +08:00
 22yune

如图,突然想到了这个问题。现实世界也有这种列子吗?(我不知道我在问什么)

8639 次点击
所在节点    程序员
85 条回复
qwertqwert12345
2020-03-28 11:04:48 +08:00
wingzhingling
2020-03-28 11:10:28 +08:00
民科不请自来。
如果一个结构的发展依赖于某种行为,而这种行为依赖于某种属性,那么提高这种属性就能加速结构发展。
如水池泄水,在不改变水量的条件下,泄水这一行为取决于泄水孔大小,增大泄水孔面积就能加速泄水速度。
至于为什么算法中空间成本和时间成本可以互换,粗略的来讲,是因为完成一个功能时,基本操作依赖于空间。如果算法能利用更多的空间,效率就会更高。
liuzhedash
2020-03-28 11:44:00 +08:00
想一下实体书形式的字典,字典前几十页纸的内容是对所有字的索引(占用了额外的空间),这部分空间可以提高你找到特定字的速度(换取了时间)。
charlie21
2020-03-28 11:50:52 +08:00
本来就是一个个 solution 而已,每个 solution 需要不同的资源,你手上有一些时间资源、一些空间资源,然后 你选择了某个 solution 就献祭了一份它所需的资源。你只是在一次一次做 “拿 solution 并献祭资源” 这件事。最后,有一个人为你设定了一个衡量标准 ( 时间复杂度 / 空间复杂度 ),然后他拿着这个标准说,这是 时间复杂度换空间复杂度,即时间换空间。

时间复杂度 看 语句的执行次数

空间复杂度 看 临时变量的数量

http://www.ehcoo.com/complexity.html

你完全可以对这个标准不买账,设立你自己的标准,并且为此标准建立硬件设备,比如 算盘
Trim21
2020-03-28 11:59:27 +08:00
不是物理意义上的两种不同东西的转换(重力势能转换为动能)
只是在处理问题时通过占用更多的空间来换取时间的节约。花费的时间和空间本身在不处理问题的时候都是不存在的,而不像物理上某个能量在没有物理过程中依旧存在。

这个所谓的“换”是相对于相对于另一个算法的时间 /空间复杂度有所不同,而不是真的拿出某样东西来进行转换。

举个例子,你把垃圾算法同时优化了时间和空间,这个新算法是什么换什么?
Yain
2020-03-28 12:43:35 +08:00
退役竞赛生答一波

时空转换是众多前人通过解决问题总结出的规律和手段。在算法竞赛中,它特指“降低时间复杂度或常数因子,但增大空间开销”和“降低空间复杂度或常数因子,但增大时间开销”。

由于储存空间有限和人为对时间的要求,我们常常需要调整算法,折衷两种资源的开销。

现实中的例子其实有很多,不必局限于“时间”和“空间”,大可以是“时间”和“钱”的相互转换等等,只要是资源开销,都可能相互转换。但是要注意,“开销”的转换,和直接用钱买时间还是有区别的。
yukiloh
2020-03-28 12:59:14 +08:00
曹德旺卖玻璃,别人玻璃只能存半年,我可以存存到你倒闭
GeruzoniAnsasu
2020-03-28 13:22:45 +08:00
#19 @l30n 的回答简短准确,咋都没人看到


y = f(x),把从 x 计算得到 y 的过程转化成查表
loading
2020-03-28 13:29:15 +08:00
现实中也可以空间换时间。
离公司更近的房子,类似于 cpu 缓存和内存的区别。
两台一直同步的电脑分别放工位和家里,类似于数据库冗余数据。
cmdOptionKana
2020-03-28 13:40:27 +08:00
@GeruzoniAnsasu 楼主看到了,但楼主认为这是 “怎么做”,不是“为什么”。
GeruzoniAnsasu
2020-03-28 13:46:13 +08:00
@cmdOptionKana 并没有看到

前面的例子,书放书架上根本不是恰当的比喻,书不管放哪空间都没变,衣柜不管怎么整理,空间也没变

唯独#19 说的打表是“空间换时间”的正确场景,换个更快的算法 On 变 Ologn 并没有用空间来换时间
epicnoob
2020-03-28 13:48:29 +08:00
辩证思维
cmdOptionKana
2020-03-28 13:54:43 +08:00
@GeruzoniAnsasu 衣柜的例子是我提出的,所以我有必要说明,一个小衣柜,如果只能容纳一百件折叠后的衣服(无法容纳更多,也无法容纳一百件摊开的衣服),那么,使用一个更大的衣柜(足以容纳一百件摊开的衣服),这就是用更大的空间来换取了更快的速度。

这里把折叠衣服摊开的过程非常像一个函数的计算过程(都需要经过一些花费时间的操作步骤)。
22yune
2020-03-28 14:10:13 +08:00
@GeruzoniAnsasu #68 查表也是一个更简单的 y=f(x).
Jabin
2020-03-28 14:15:35 +08:00
问的是 为什么能这样
答的是 可以这样

通常别人问用这种方法怎么解决问题
我们给的答案往往是使用另一种方法解决
kamilic
2020-03-28 14:20:31 +08:00
我的理解是这样的。
计算机完成一个纯计算任务,用到的资源无非只有存储空间和 CPU 资源使用时间。
你也只能在这两者中倒腾了。。。

给出一个纯计算任务,如果直接使用 CPU 计算,则要用到 CPU 时间去处理任务,但它没有用到存储空间。
如果你事先计算好了,直接在内存去找就行了,这样没有利用到 CPU 时间就能完成任务。

前提:
不要考虑说你的时间也是时间。
也不要考虑说 CPU 运行过程中会载入内存的代码段,以及读内存需要 CPU 参与这些事。

我们只讨论这个任务结果在计算机部件中的存在。
johnkiller
2020-03-28 14:43:27 +08:00
若一个文件内容是:aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

若只保存对这个文件内容的描述,

如:a*20+b*20,

这样子,空间少了,

但是需要 CPU 进行计算得出结果,时间增加了。
GeruzoniAnsasu
2020-03-28 14:51:53 +08:00
@22yune

难到你认为计算的时间量是 0 ?
或者你没意识到所有方案的总“功耗”其实是一样的?


预计算替换掉耗时只是把时间消耗提到关注的时间窗口外而已
diubo
2020-03-28 15:16:35 +08:00
看来老板给你安排的活有点不够,都开始思考这些终极问题了
p1gd0g
2020-03-28 15:40:09 +08:00
因为空间和时间都不是无节制的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/656831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX