相信大家有时候会经历一些挥之不去的时刻,时常想起那些朦胧的点,
在脑海中徘徊了几个月,始终觉得有必要把它用语言表达出来。
下面是一位设计师的这种经历,让人觉得人生有趣乐观热情开心。
offline problems
存在着一类令人着迷的算法问题,称为离线问题/离线算法。
指您可以收集所有必要的信息,处理它,并立即提供答案的问题。
相比之下,在线问题/在线算法需要在信息到达时进行处理,并在所有信息可用之前输出中间结果。
- 在线算法/插入排序在实现上,是O(1)时间复杂度的排序,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
- 离线算法/插入排序,是O(n平方)时间复杂度的排序,先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
文中的算法详情暂且不表,读者可以查看原文去了解。
作者说,在涉及10,000个条目和1,000个查询的生成测试中,离线解决方案被证明比在线解决方案快大约15倍。
在像[10,1000]、[0,9]、[11,1001] 这样的一系列查询中,
当您只能看到第一个查询时,如何确定最有效的方法是解决范围[10,1000]、[11,1001]和[0,9] ?
为什么在线算法不能达到同样的效率?简而言之,它缺乏对未来的了解。
connect the dots
在了解了这个聪明的技巧很长一段时间后,我一直念念不忘。
直到最近我在玩一个游戏的时候《IMMORTALITY》。
这是一款通过观看三部电影中的一系列视频片段来解开谜团的游戏。
剪辑以非时间顺序呈现,你必须自己拼凑整故事。这是典型的非线性叙述手法。
有趣的是,这些片段的实际拍摄顺序与里面的故事不同。
这让我想到,在现实生活中,一个电影工作人员开始了一个精心策划的电影剧本,
完整的场景,道具,行为,以及其间的一切。
脚本通常按时间排序,以确保事件按时间顺序流动。
但是在拍摄电影时,工作人员根据场景对元素进行分类,以此来组织他们的工作。
他们收集所有必要的元素,如演员,道具,布景设计,每个场景之前的拍摄。
通过一次专注于一个场景,摄制组可以在从一个场景过渡到下一个场景的过程中做出细微的调整,
确保整体设置的一致性,最大限度地减少重复设置和调整的需要。
与离线算法(对查询范围进行排序并随着我们的进展进行调整)相比,这是一种非常有趣的类似技术。
很漂亮吧?
仔细想想,离线算法本质上是一种“永恒的”方法。
时间不再是一种限制,你就拥有了超能力。
There must be something more.
参考
