请双击下面的英文字幕来播放视频。
翻译人员: Yizhuo He
校对人员: Yanyan Hong
[ 像程序员一样思考 ]
[ 地点:198 森林 ]
[ 第六集 峡谷 ]
00:21
Ethic, Hedge, and Octavia
stand on the edge of a bottomless ravine.
0
21937
4675
艾斯克、海吉和奥克塔维亚
站在无底峡谷的边缘。
00:26
It’s the only thing between
them and the tower
1
26612
2690
峡谷是他们与塔之间的唯一阻碍,
00:29
that houses the second
of three powerful artifacts.
2
29302
3648
塔里藏有三个强大神器中的第二个。
00:32
They’ve got a brief window of time
to get across before the guards return.
3
32950
4980
他们在警卫回来前
只有一小段时间可以跨越这个峡谷。
00:37
With Hedge’s fuel gauge on empty
he won’t be able to fly Ethic across,
4
37930
4705
海吉的燃料箱空了,
无法带艾斯克飞越过去,
00:42
so the only option is to make a bridge.
5
42635
3630
所以,唯一选择是建一座桥。
00:46
Fortunately, the floating stacks of stones
nearby are bridge components—
6
46265
4655
幸运的是,附近漂浮的石头堆
可以用来搭一座桥,
00:50
invented by Octavia herself—
called hover-blocks.
7
50920
4026
石头堆是奥克塔维亚
自己发明的——
叫作“飘浮块”。
00:54
Activate a pile with a burst of energy,
8
54946
2552
他们可以用一股能量
激活一堆飘浮块,
00:57
and they’ll self-assemble
to span the ravine as Ethic walks across.
9
57498
4516
这样在这些飘浮块自动组装时,
艾斯克就能跨越峡谷。
01:02
But there is, of course, a catch.
10
62014
3578
但现在存在一个问题。
01:05
The hover-blocks are only stable
when they’re perfectly palindromic.
11
65592
4659
这些飘浮块只有在组合成
完美的回文结构时才能保持稳定。
01:10
Meaning they have to form
a sequence
12
70251
2260
也就是说,它们得被组合成
01:12
that’s the same when viewed
forwards and backwards.
13
72511
4263
正序看和倒序看都一致的结构才行。
01:16
The stacks start in random orders,
14
76774
2170
飘浮块最初是随机排列的,
01:18
but will always put themselves
into a palindromic configuration
15
78944
3660
但如果可行,
它们随后会自动拼装成回文结构。
01:22
if they can.
16
82604
1290
01:23
If they get to a point
where a palindrome isn’t possible,
17
83894
2880
但如果它们无法被拼成回文结构,
01:26
the bridge will collapse,
18
86774
1551
桥就会坍塌掉,
01:28
and whoever’s on it
will fall into the ravine.
19
88325
3489
走在上面的人就会坠入深谷。
01:31
Let’s look at an example.
20
91814
1638
让我们来看一个例子。
01:33
This stack would make itself stable.
21
93452
2460
这堆飘浮块能被组成稳定的结构。
01:35
First the A blocks
hold themselves in place.
22
95912
3000
首先,A 型方块
能被排列在左右两侧。
01:38
Then the B’s.
23
98912
1070
接着是 B 型方块。
01:39
And finally the C
would nestle right between the B’s.
24
99982
3690
最后,C 型方块正好
能被放在两块 B 之间。
01:43
However, suppose there was one more A.
25
103672
3450
但假设多一块 A 型方块的话。
01:47
First two A blocks form up, then two B’s,
26
107122
3120
首先两块 A 排列好,
然后两块 B 也排列好,
01:50
but now the remaining C and A
have nowhere to go,
27
110242
3370
但剩下的 A 块
和 C 块就没地方放了,
01:53
so the whole thing falls apart.
28
113612
2460
因此整座桥都会塌掉。
01:56
The Node of Power enables Hedge
to energize a single stack of blocks.
29
116072
4670
力量节点晶石只够海吉
激活一堆飘浮块,
02:00
What instructions can Ethic give Hedge
to allow him to efficiently find
30
120742
4334
艾斯克要给海吉什么指令,
才能让它有效地找到并激活
一堆稳固且为回文结构的飘浮块呢?
02:05
and power a stable palindromic stack?
31
125076
3051
02:08
Pause now to figure it out for yourself.
32
128127
9970
[ 可暂停播放自行解题 ]
02:18
Examples of palindromes include ANNA,
RACECAR, and MADAM IM ADAM.
33
138097
5461
回文排列的例子如:ANNA、RACECAR、
以及 MADAM IM ADAM。
02:23
Counting the number of times
a given letter appears in a palindrome
34
143558
3730
通过数一个字母
在回文中出现的次数,
02:27
will reveal a helpful pattern.
35
147288
2532
你会发现一个有用的模式。
02:29
Pause now to figure it out for yourself.
36
149820
4831
[ 可暂停播放自行解题 ]
02:34
Let’s first look at a naïve solution
to this problem.
37
154651
3490
我们先来看一个简单的方案。
02:38
A naïve solution is a simple,
brute-force approach that isn’t optimized—
38
158141
4708
简易方案是一种
简单的、未被优化的粗暴方法,
02:42
but will get the job done.
39
162849
1980
但是它可以达成目标。
02:44
Naïve solutions are helpful ways
to analyze problems,
40
164829
3491
简单方案是分析问题的有用方法,
02:48
and work as stepping stones
to better solutions.
41
168320
3434
是更优方案的铺路石。
02:51
In this case, a naïve solution
is to approach a pile of blocks,
42
171754
3770
在这种情况下,一个简单方案是:
尝试这堆飘浮块的所有可能组合,
02:55
try all the arrangements,
43
175524
1500
02:57
and see if one is a palindrome
by reading it forward and then backwards.
44
177024
4727
并通过正向,反向阅读
来确定其是否为回文结构。
03:01
The problem with this approach
45
181751
1480
但这种方法有个缺陷,
03:03
is that it would take
a tremendous amount of time.
46
183231
2493
它需要大量的时间。
03:05
If Hedge tried one combination
every second,
47
185724
2850
如果海吉每秒
能判断一种组合可不可行,
03:08
a stack of just 10 different blocks
would take him 42 days to exhaust.
48
188574
5198
那么只有 10 块的飘浮块堆,
需要 42 天才能算完。
03:13
That’s because the total time
is a function of the factorial
49
193772
3830
这是因为总时间
是总块数的阶乘。
03:17
of the number of blocks there are.
50
197602
2142
03:19
10 blocks
have over 3 million combinations.
51
199744
3600
10 个飘浮块就有
超过 300 万种组合方式。
03:23
What this naïve solution shows
is that we need a much faster way
52
203344
4280
这个简单的解决方案表明,
我们需要一种更快的方法
03:27
to tell whether a pile of blocks
can form a palindrome.
53
207624
3593
来判断一堆飘浮块
是否可以形成回文。
03:31
To start, it may be intuitively clear
that a pile of all different blocks
54
211217
4716
首先,很明显的是,
一堆各不相同的飘浮块
03:35
will never form one.
55
215933
1420
永远不可能形成回文结构。
03:37
Why?
56
217353
790
为什么?
03:38
The first and last blocks
can’t be the same if there are no repeats.
57
218143
5281
因为如果没有重复,
第一块和最后一块就不可能相同。
03:43
So when can a given sequence
become a palindrome?
58
223424
5012
那么什么时候一个给定的
序列可以形成回文呢?
03:48
One way to figure that out
is to analyze a few existing palindromes.
59
228436
4480
一种方法是分析
一些现有的回文。
03:52
In ANNA,
there are 2 A’s and 2 N’s.
60
232916
3254
ANNA 有两个 A 和两个 N,
03:56
RACECAR
has 2 R’s, 2 A’s, 2 C’s, and 1 E.
61
236170
4886
RACECAR 有两个 R、
两个 A、两个 C 和一个 E,
04:01
And MADAM IM ADAM
has 4 M’s, 4 A’s, 2 D’s, and 1 I.
62
241056
6730
MADAM IM ADAM 中,
有四个 M、四个 A、两个 D 和 一个 I。
04:07
The pattern here
is that most of the letters occur
63
247786
3140
模式是,大多数字母
04:10
an even number of times,
64
250926
1774
会出现偶数次,
04:12
and there’s at most 1
that occurs just once.
65
252700
3280
最多只有一个字母
可以只出现一次。
04:15
Is that it?
66
255980
1110
这就完了吗?
04:17
What if RACECAR had 3 E’s instead of 1?
67
257090
3260
如果 RACECAR
有3个 E 而不是1个呢?
04:20
We could tack the new E’s onto the ends
and still get a palindrome,
68
260350
3710
我们可以把新的两个 E 钉在两端,
仍能得到一个回文,
04:24
so 3 is ok.
69
264060
1840
所以字母出现 3 次是可以的。
04:25
But make that 3 E’s and 3 C’s,
and there’s nowhere for the last C to go.
70
265900
6064
但如果有 3 个 E 和 3 个 C ,
最后一个 C 就没有地方放了。
04:31
So the most generalized insight is that
71
271964
2720
让我们来概括一下思路,
04:34
at most one letter can appear
an odd number of times,
72
274684
4096
最多只有一个字母能出现奇数次,
04:38
but the rest have to be even.
73
278780
3066
但其他字母必须出现偶数次。
04:41
Hedge can count the letters in each stack
and organize them into a dictionary,
74
281846
4314
海吉可以数每个字母
在飘浮堆中出现的次数,
把这些信息存放到
字典这种数据结构中,
04:46
which is a tidy way
of storing information.
75
286160
2725
这是一种储存信息的简洁方式。
04:48
A loop could then go through and count
how many times odd numbers appear.
76
288885
4579
可以通过一个循环遍历这个字典,
数有几个字母出现了奇数次。
04:53
If there are less than 2 odd characters,
the stack can be made into a palindrome.
77
293464
5500
如果有少于两个字母出现了奇数次,
那么这堆飘浮块
就能被组成回文结构。
04:58
This approach is much, much faster
than the naïve solution.
78
298964
3720
这种方法比之前的
那个简单解决方案要快得多。
05:02
Instead of factorial time,
it takes linear time.
79
302684
3420
它只需线性时间,
而不是阶乘时间。
05:06
That’s where the time increases
80
306104
1570
线性时间指的是
05:07
in proportion to
the number of blocks there are.
81
307674
2710
程序运行时间与方块数量成正比。
05:10
Now write a loop for Hedge
to approach the piles individually,
82
310384
3990
现在,请你为海吉编写一个循环,
来分别处理这些飘浮块堆,
05:14
and stop when he finds a good one,
and you’ll be ready to go.
83
314374
4155
当它找到可行的方案时,
暂停程序,这样就成功了。
05:18
Here’s what happens:
84
318529
1389
接下来会发生的是:
05:19
Hedge is fast, but there are so many piles
it takes a long time.
85
319918
4046
虽然海吉的速度很快,
但有很多的飘浮块堆,
要花很长的时间,
05:23
Too long.
86
323964
1356
很长很长的时间。
06:17
Ethic and Hedge are safe.
87
377897
1680
艾斯克和海吉现在安全了,
06:19
But Octavia is not so lucky.
88
379577
2423
但奥克塔维亚就没那么幸运了。
New videos
关于本网站
这个网站将向你介绍对学习英语有用的YouTube视频。你将看到来自世界各地的一流教师教授的英语课程。双击每个视频页面上显示的英文字幕,即可从那里播放视频。字幕会随着视频的播放而同步滚动。如果你有任何意见或要求,请使用此联系表与我们联系。