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

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

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

8578 次点击
所在节点    程序员
85 条回复
murmur
2020-03-27 22:27:07 +08:00
京东啊,满地都是仓库,所以发货快
yangzhezjgs
2020-03-27 22:58:18 +08:00
为什么空间换时间?
把计算结果存储起来,就节省了下次计算的时间
为什么时间换空间?
典型例子虚拟存储,程序具有局部性,所以可以只装载部分程序到内存中。
yangzhezjgs
2020-03-27 23:22:24 +08:00
详细来说,空间换时间,时间换空间相通的点在于 程序中存在某种重复。

空间换时间 是计算过程存在重复, 如果预测到了计算结果会重复使用,就可以提前计算好,把结果存下来,节省了每次计算的时间。

时间换空间 是程序中普遍存在顺序存储和循环结构而导致时间和空间上存在局部性,换句话说 cpu 花在一部分代码上的时间比其他部分多,用 28 法则来说,百分之二十的代码占用百分之八十的 CPU 时间,但是这部分代码存储空间只占百分之二十,所以只用保存百分之二十的重要程序就可以保证百分之八十的时间 CPU 都能正常运行。
yangzhezjgs
2020-03-27 23:27:24 +08:00
补充一下,空间换时间的重复应该是 程序在逻辑和功能上存在重复,时间换空间的重复应该是 程序在物理分布上存在重复。
hoyixi
2020-03-28 00:46:53 +08:00
这还用找例子,你用小卡车搬家运 3 次,用大卡车运一次
Blacate
2020-03-28 01:42:24 +08:00
比方说有一副扑克你要其中的某一张 一种是你吧所有的抓在手里一张张过 一种是所有的全都铺在桌面上 你一下子就能找到
Cielsky
2020-03-28 01:49:13 +08:00
@22yune 分类摆放不是需要更大的空间吗,不分类全堆一块
这不就是空间换时间吗
ruxuan1306
2020-03-28 03:07:42 +08:00
网上常见的行李箱收纳技巧,本质上是加大存取的时间复杂度,换取更小的空间复杂度。
wshwwl
2020-03-28 07:31:27 +08:00
如果你一定要这么问,那就是不能换或者没有换。
1. 空间换时间只是人们对于选择不同解决方案习惯性的表达而已,并不是真的产生了概念上的转换。实际上是,解决方案有多种,有的方案花的时间长,但是需要更少空间,而有的方案则相反,人们在不同的方案之间做选择,有取舍,类似于做出了交换。
2.如果你还要继续钻牛角尖,那其实所谓空间换时间也并没有换,只是时间成本转移了。生产更多的内存也需要时间,你在 cpu 上省的时间或者说成本全转换到内存生产上去了。你的空间也是你用生产内存的时间或成本换来的。只不过你(cpu)花费的时间少了,别人花费的时间更多了。但这种转移也是有限制的,即使你有无限的内存空间,你也不可能把时间压缩到零。
oneisall8955
2020-03-28 08:57:15 +08:00
钻牛角尖
cwek
2020-03-28 09:13:28 +08:00
更适合的比喻是桌面(内存)和柜子(外存)。
桌面是触手可及的(小空间但用时短),柜子够大胆查找需要翻箱倒柜的(大空间胆用时长),如果桌面够大,将工作所有需要用的东西都放在桌面上,就能随手拿来用,不用翻柜子。(空间换时间)
如果桌面不够大,部分工作东西只能放到柜子里来节省出必要的桌面空间,但需要时需要花时间找(时间换空间)
22yune
2020-03-28 09:47:44 +08:00
@www5070504 #33 我也觉得,就是突然有个念头,随便问问。

@xiaobai332 #36 就是这个 style

@favourstreet #37 没怎么看懂。门电路在时空不同位置没有区别,并没有回答问题吧?是 a 和 b 两种可能吗?(我没理解)

@cmdOptionKana #39 这个例子和#9 图书馆的列子类似。书不像衣服需要折叠。但也达到同样效果了。折叠不是问题点。

@yangzhezjgs #43 这个针对计算机好理解。你的意思是因为‘重复’。

@hoyixi @Blacate 这些列子直观的我没有一点疑问。但我对应不起来。我要对这些例子问‘为什么’。会不会有人想打我?_(:з」∠)_
aneureka
2020-03-28 09:49:37 +08:00
你肯定没学过动态规划..
22yune
2020-03-28 09:53:39 +08:00
@wshwwl
1 、观点是 选择。
2 、观点是 转移。这个部分认同。前面图书馆的例子,是因为分类整理的时间转移了后面查找的时间还是制作书架的时间?

是我钻牛角尖了。
jackchao7432
2020-03-28 09:53:40 +08:00
您就是带哲学家?
22yune
2020-03-28 09:59:46 +08:00
@jackchao7432 我感觉到被你嘲讽了。这个问题不能问吗?我是随便问问,有兴趣参与讨论下,没兴趣可以不用回复。
cmdOptionKana
2020-03-28 10:38:48 +08:00
@22yune 我明白了!

你以为计算机中、书柜、衣柜等等,空间时间互换的背后有一个共通的原因,所以你一直问“为什么”。

我觉得你就是这里想错了,没有共通原因,每一个能换的案例都是特殊的。

比如一个比较深的书柜,放在深处的书会被放在外层的书遮挡。但如果把书柜做成只有一本书的深度,然后相应的扩大书柜的宽度,注意,书柜的总空间大小并没有变,但找书就方便多了,这样不需要空间就能换时间(加快速度)。

也就是说,用空间换时间或时间换空间,其实只是做事方法之一,注意,它本质上是做事方法,即,本质上就是“怎么做”,因此在这种情况下“怎么做等同于为什么”。
oshio
2020-03-28 10:44:40 +08:00
这里时间指的是执行效率,空间指的是存储效率,结果你理解成了相对论。
janus77
2020-03-28 10:45:47 +08:00
我来回答吧
因为所有一切的计算任务都是可拆分的,大的拆成小的,小的拆成更小的。而他们又是互相独立,组合起来才成为最后结果。
于是,可以换=可以拆分。只要你能拆出一个小任务,我们就可以用另外的成本来实现这个任务。比如时间成本换成空间成本。你还要问为什么可以换?因为他是互相独立的啊,我把他当做两种东西分别用不同成本去做这不行吗
takato
2020-03-28 10:49:23 +08:00
说到修路- -以前看到过这个

Traffic flow measured on 30 different 4-way junctions

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

https://www.v2ex.com/t/656831

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

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

© 2021 V2EX