WEBVTT 00:00:31.587 --> 00:00:37.288 Ethic 和 Hedge 站在巨大塔楼的底层。 00:00:37.288 --> 00:00:41.945 能量屏障把他们与第二个目标隔开了: 00:00:41.945 --> 00:00:43.945 创造之结。 00:00:52.667 --> 00:00:57.409 为了拿到它, Ethic 要用三束能量流爬上塔楼。 00:00:57.409 --> 00:01:03.359 一旦她开始前进, 计时器就会启动 60 秒倒计时。 00:01:07.359 --> 00:01:11.659 在房间后部, 有个由隐形柱子组成的容器, 00:01:11.659 --> 00:01:14.735 可以储存能量。 00:01:14.735 --> 00:01:18.865 一分钟后,能量会从上方倾泻而下, 00:01:18.865 --> 00:01:21.015 一次填满一个单位, 00:01:21.015 --> 00:01:25.495 力场确保它不会向前或向后流动。 00:01:25.495 --> 00:01:27.625 在 60 秒的冷却时间里, 00:01:27.625 --> 00:01:32.723 Ethic 和 Hedge 必须确定 有多少能量会流下来。 00:01:32.723 --> 00:01:34.423 对于这三个挑战, 00:01:34.423 --> 00:01:38.088 他们必须使能量正好填满底座。 00:01:38.088 --> 00:01:41.938 如果他们做对了, 能量会助他们更进一步。 00:01:41.938 --> 00:01:46.558 但如果他们弄错了, 能量就会泄漏出来, 00:01:46.558 --> 00:01:48.048 落向他们。 00:01:48.048 --> 00:01:51.348 墙上的图是一个例子。 00:01:51.348 --> 00:01:55.618 这个结构能容纳 2 个单位的能量。 00:01:55.618 --> 00:02:00.735 这个可以容纳 4 个单位—— 左边 3 个,右边 1 个。 00:02:00.735 --> 00:02:03.275 这个结构也可以容纳 4 个单位的能量, 00:02:03.275 --> 00:02:06.688 因为如果右边有能量 ,就会泄漏。 00:02:06.688 --> 00:02:08.908 能量落下的方法 00:02:08.908 --> 00:02:13.538 让它只会在空间容纳量不够时泄漏。 00:02:13.538 --> 00:02:18.865 Hedge 每次能让一个能量柱现形 并数出它的高度, 00:02:18.865 --> 00:02:22.725 但他不能一次看全整个结构。 00:02:22.725 --> 00:02:25.530 Ethic 要怎样让 Hedge 计算出 00:02:25.530 --> 00:02:29.340 这个容器可以容纳多少能量呢? 00:02:29.340 --> 00:02:33.235 现在暂停来自己试试。 00:02:38.805 --> 00:02:41.635 有一种方法来思考这个问题: 00:02:41.635 --> 00:02:44.550 对于一个空的单元格, 当且仅当它左边有墙, 00:02:44.550 --> 00:02:48.790 右边也有墙时, 00:02:48.790 --> 00:02:51.517 才可以容纳能量。 00:02:51.517 --> 00:02:56.322 但 Hedge 一个个检查 这些单元格会耗费很多时间。 00:02:56.322 --> 00:03:01.185 如果他一次考虑一整个纵列呢? 00:03:01.185 --> 00:03:05.025 比如这个结构可以容纳多少能量? 00:03:05.025 --> 00:03:07.039 暂停来自己试试。 00:03:10.389 --> 00:03:13.759 我们可以通过这个例子 来分析一下问题。 00:03:13.759 --> 00:03:15.914 这里有 5 纵列单元格。 00:03:15.914 --> 00:03:20.484 最左边的不能容纳任何能量, 因为没有比它更高的了。 00:03:20.484 --> 00:03:23.118 第二列能容纳3个单元格的能量, 00:03:23.118 --> 00:03:27.244 这两个四格高的纵列 可以把能量夹在中间。 00:03:27.244 --> 00:03:32.186 我们得出 3 格的结论,因为能量 最终会等于最高纵列——4, 00:03:32.186 --> 00:03:36.346 再减去这列的高度 —— 就是 4 减 1。 00:03:36.346 --> 00:03:41.808 第三列同理——左边 4 格, 右边 4 格,这列高 3 格, 00:03:41.808 --> 00:03:46.537 所以 4 减 3 等于 1 个单位。 00:03:46.537 --> 00:03:50.957 第四、第五列右边没有更高的, 00:03:50.957 --> 00:03:53.427 所以它们无法容纳任何能量。 00:03:53.427 --> 00:03:57.245 我们可以把这个方法 转变成一种算法。 00:03:57.245 --> 00:04:01.025 每次选择一个纵列作为参考点, 00:04:01.025 --> 00:04:05.436 Hedge 由此向左一点点检查, 找到最高的纵列, 00:04:05.436 --> 00:04:08.156 再检查右边并找出最高的纵列, 00:04:08.156 --> 00:04:12.833 两个高度中较小的 就是最终能量可以填满的高度。 00:04:12.833 --> 00:04:15.963 如果这个结果高过某列原高度, 00:04:15.963 --> 00:04:18.537 那么减去这列的原有高度, 00:04:18.537 --> 00:04:22.824 就能得出这个纵列的容纳量。 00:04:23.634 --> 00:04:27.194 如果低于某列的原有高度, 00:04:27.194 --> 00:04:29.397 能量就会泄漏。 00:04:29.397 --> 00:04:32.917 Hedge 可以对整个底座 依次这样操作, 00:04:32.917 --> 00:04:38.662 从左到右,一次一列。 00:04:38.662 --> 00:04:43.671 对于每一纵列都重复同样的操作—— 向左找到最高的, 00:04:43.671 --> 00:04:47.231 右边也是, 取两个高度中较小的一个, 00:04:47.231 --> 00:04:49.318 减去原纵列原有的高度, 00:04:49.318 --> 00:04:53.178 如果得到正数就算进总容量里。 00:04:53.178 --> 00:04:56.848 这一流程的运行次数和纵列数相等。 00:04:56.848 --> 00:05:00.798 这样的确可行,但如果底座很大, 这样做会耗费很多时间。 00:05:00.798 --> 00:05:05.328 每一步,Hedge 都要反复地左看右看。 00:05:05.328 --> 00:05:10.280 如果有 N 个纵列, 他就需要把每个纵列都看 N 遍。 00:05:10.280 --> 00:05:12.260 有没有更快的方法呢? 00:05:12.260 --> 00:05:15.608 有个节省时间的方法: 00:05:15.608 --> 00:05:17.468 首先,Hedge 从左边开始, 00:05:17.468 --> 00:05:21.338 并连续记录最高纵列的高度。 00:05:21.338 --> 00:05:25.098 这样就是 2,然后还是 2, 因为第一个更高, 00:05:25.098 --> 00:05:27.848 然后是 4,4,4。 00:05:27.848 --> 00:05:30.628 然后他可以找到最高纵列的右端, 00:05:30.628 --> 00:05:36.882 只要同样从右到左再做一遍: 1,3,4,4,4。 00:05:36.882 --> 00:05:40.722 最终,他会记下这样一个表格。 00:05:40.722 --> 00:05:45.961 现在 Hedge 可以再扫描一次, 00:05:45.961 --> 00:05:50.001 按照之前的等式计算每个纵列 可以容纳多少能量: 00:05:50.001 --> 00:05:53.638 在存储的左右最高值中选较小的, 00:05:53.638 --> 00:05:56.708 再减去当前纵列的高度。 00:05:56.708 --> 00:06:02.293 与把 N 个纵列每个看 N 遍相比, 他只需把每个纵列看三遍—— 00:06:02.293 --> 00:06:04.573 这就是我们所说的线性时间。 00:06:04.573 --> 00:06:07.814 还有很多更优解决方法, 00:06:07.814 --> 00:06:10.564 但这个已经够好了。 00:06:10.564 --> 00:06:12.334 Ethic 和 Hedge 配合默契。 00:06:14.992 --> 00:06:18.836 他们轻而易举地通过了 第一个瀑布,塔楼地板上升了。 00:06:21.573 --> 00:06:23.583 第二个难一些。 00:06:33.051 --> 00:06:36.911 第三个容器非常大, 每列有数十个单元格。 00:06:36.911 --> 00:06:41.344 计时器显示出 0, 但 Ethic 的动作很快。 00:06:41.344 --> 00:06:44.308 她在最后时刻找到了正确位置, 00:06:49.015 --> 00:06:51.935 能量让他们上升至创造之结。 00:06:55.640 --> 00:07:01.067 和第一次一样,它显现出了幻象: 多年前的记忆。 00:07:01.067 --> 00:07:03.187 世界机器改变了一切, 00:07:03.187 --> 00:07:06.856 Ethic 作为首席机器人工程师, 00:07:06.856 --> 00:07:08.906 对她目击到的现象感到不安。 00:07:08.906 --> 00:07:11.946 当 Brad 障碍升起并围住人群时, 00:07:11.946 --> 00:07:14.586 她知道大事不妙了。 00:07:14.586 --> 00:07:16.676 于是她造出了三个物品, 00:07:16.676 --> 00:07:21.221 它们拥有修复人们的力量、 创造力以及记忆的能力, 00:07:21.221 --> 00:07:24.131 并把它们偷运到了三个社区里。 00:07:24.131 --> 00:07:26.449 在她告诉人们如何使用之前, 00:07:26.449 --> 00:07:29.959 政府发现了她的成果, 并派出机器人 00:07:29.959 --> 00:07:31.889 抓捕她以及其他程序员。 00:07:31.889 --> 00:07:35.209 Ethic 用世界机器创造的 最后一件物品是个机器人, 00:07:35.209 --> 00:07:37.999 它可以把古老的装置 00:07:37.999 --> 00:07:42.329 围在大型迷宫中, 使它远离愚昧的力量。 00:07:42.329 --> 00:07:44.743 她给这个物品起名叫 Hedge。 00:07:51.801 --> 00:07:55.631 在没有任何警告的情况下, 能量电梯开始闪烁,然后消散了。