资源换时间
2017-11-28

公司办了一个 MOBA 主题的黑客马拉松,写代码让两个阵营的英雄在地图上对战。游戏地图长这样:

经过抽象以后,成这样:

白色是路,黑色是障碍不能通行,然后问题就来了,如何知道白色区域任意两点间的距离?如果不知道远近,怎么部署战斗啊。

谷歌了一下寻路算法,快速看了两篇文章,蛮复杂的样子。然后花不到一分钟找到一个寻路算法库,好用的不得了(还好没有傻到自己去实现)。但我马上就担心起寻路的效率来,因为如果实时对战,英雄 N 对 N,再加上好几个建筑,情况真有点复杂。拿某一个英雄来说,战场上的他每一刻与其他英雄之间、各个建筑之间都有距离,每条路的距离都算出来还挺耗时的。

为减少对战时用于判断距离的计算损耗,我把任意两个点的距离都事先算好,存到一个巨大的数组里,到时候直接取下标就可以了,时间复杂度 O(1)。缺点呢,就是要多占用一些空间,但也仅仅只有 20M,完全可以承受。

不知不觉写了十几年代码,遇到过算法上的挑战,最后大多都用空间换时间解决了。云计算兴起之前,那个要自己搬服务器到机房托管的年代,还是可以很任性的。内存不够了就买条加上,不像现在选个大内存的云主机都不敢看价格。

以上写的虽然是跟 IT 相关,其实我想说,人在处理算法问题的时候,基本都能保持理性,该拿资源(硬盘内存)换取时间的时候,毫不犹豫。但是处理生活问题,就远没有那么理性了。生活里最常见的资源就是钱,拿金钱换时间很多人做不到。

花钱买比特币不如花钱买时间,比特币在过去一年涨了十倍,但时间带来的收益可以更大。大胆地用资源去换时间吧。当你真的花钱去换时间了,就会埋下一个潜意识:这段时间是用钱换来的,我要让它有意义。

END