The Chasm | Think Like A Coder, Ep 6

459,891 views ・ 2020-01-30

TED-Ed


请双击下面的英文字幕来播放视频。

翻译人员: 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
但奥克塔维亚就没那么幸运了。
关于本网站

这个网站将向你介绍对学习英语有用的YouTube视频。你将看到来自世界各地的一流教师教授的英语课程。双击每个视频页面上显示的英文字幕,即可从那里播放视频。字幕会随着视频的播放而同步滚动。如果你有任何意见或要求,请使用此联系表与我们联系。

https://forms.gle/WvT1wiN1qDtmnspy7


This website was created in October 2020 and last updated on June 12, 2025.

It is now archived and preserved as an English learning resource.

Some information may be out of date.

隐私政策

eng.lish.video

Developer's Blog