What's the fastest way to alphabetize your bookshelf? - Chand John

3,894,455 views ・ 2016-11-28

TED-Ed


請雙擊下方英文字幕播放視頻。

譯者: kejia chen 審譯者: 庭芝 梁
00:06
You work at the college library.
0
6911
2266
你是大學圖書館的管理員。
正在享受午後的閒暇時光。
00:09
You're in the middle of a quiet afternoon
1
9177
2220
00:11
when suddenly a shipment of 1,280 different books arrives.
2
11397
6614
這時候,突然送來了1280 本書!
這些書被排成一行,
00:18
The books have been dropped of in one long straight line,
3
18011
3679
00:21
but they're all out of order,
4
21690
1598
但是毫無規律。
00:23
and the automatic sorting system is broken.
5
23288
3743
剛好,自動分類系統又發生故障。
更糟糕的是,明天就要開學了;
00:27
To make matters worse, classes start tomorrow,
6
27031
2636
00:29
which means that first thing in the morning,
7
29667
2338
也就是說明天一大早,
00:32
students will show up in droves looking for these books.
8
32005
4552
學生們就會湧入圖書館借書。
00:36
How can you get them all sorted in time?
9
36557
2936
如何才能把所有書籍 及時整理好?
00:39
One way would be to start at one end of the line with the first pair of books.
10
39493
5286
第一種方法:你可以從 排在最前面的兩本書開始,
00:44
If the first two books are in order, then leave them as they are.
11
44779
3847
如果這兩本書的順序正確, 那麼不做任何變動;
00:48
Otherwise, swap them.
12
48626
2294
否則,互相交換這兩本書的位置。
00:50
Then, look at the second and third books,
13
50920
2296
接著再看第二本書和第三本書,
00:53
repeat the process,
14
53216
1663
不斷重複上述過程,
00:54
and continue until you reach the end of the line.
15
54879
3056
一直到書列的末端為止。
00:57
At some point, you'll come across the book that should be last,
16
57935
3250
在過程中,你可能就會碰到 應該排在最後的那一本書,
01:01
and keep swapping it with every subsequent book,
17
61185
3525
你會持續將這本書和後面的書交換,
01:04
moving it down the line until it reaches the end where it belongs.
18
64710
4570
將它不斷往後移動, 一直到最後面的位置。
01:09
Then, start from the beginning and repeat the process
19
69280
2945
然後再從頭開始,
不斷重複上述的步驟, 將倒數第二本書歸位,
01:12
to get the second to last book in its proper place,
20
72225
3285
01:15
and keep going until all books are sorted.
21
75510
3311
一直持續到所有的書 都放在正確的位置為止。
01:18
This approach is called Bubble Sort.
22
78821
3041
這種整理的方法 叫做「氣泡排序法」。
01:21
It's simple but slow.
23
81862
2294
原理很簡單,但過程很緩慢。
01:24
You'd make 1,279 comparisons in the first round,
24
84156
5175
在第一輪過程就需要進行 1279 次的比較;
01:29
then 1,278, and so on,
25
89331
4292
第二輪要比較 1278 次, 以此類推……
01:33
adding up to 818,560 comparisons.
26
93623
4919
所以總共要比較 818,560 次。
01:38
If each took just one second, the process would take over nine days.
27
98542
5731
如果比較一次需要 1 秒,
那麼你需要花費 9.5 天才能完成工作。
01:44
A second strategy would be to start by sorting just the first two books.
28
104273
4296
第二種方法是先將前面兩本書排好,
01:48
Then, take the third book and compare it with the book in the second spot.
29
108569
5164
然後將第三本書 與位於第二位的書進行比較。
01:53
If it belongs before the second book, swap them,
30
113733
3440
如果第三本書應該放在第二本之前, 則互相交換它們的位置,
01:57
then compare it with the book in the first spot,
31
117173
2468
然後再將這本書 與排在第一位的書比較,
01:59
and swap again if needed.
32
119641
2041
如果有需要,就再交換位置。
02:01
Now you've sorted the first three books.
33
121682
2198
現在,你已經成功安排好了前三本書,
02:03
Keep adding one book at a time to the sorted sub-line,
34
123880
3852
接著每次將一本書 加入之前安排好的隊列中,
02:07
comparing and swapping the new book with the one before it
35
127732
4077
將新書與前一本作比較, 如果需要,交換它們的位置,
02:11
until it's correctly placed among the books sorted so far.
36
131809
4195
一直到這本新書被安置到 隊列中的正確位置。
這種方法叫做「插入排序法」。
02:16
This is called Insertion Sort.
37
136004
2209
與氣泡排序法不同,
02:18
Unlike Bubble Sort, it usually doesn't require comparing every pair of books.
38
138213
4731
它通常不需要比較 所有相鄰的兩本書。
02:22
On average, we'd expect to only need to compare each book
39
142944
4010
平均來說,每本書 需要進行比較的次數
02:26
to half of the books that came before it.
40
146954
2460
僅有氣泡排序法的一半。
02:29
In that case, the total number of comparisons
41
149414
2709
這種方法總共需要比較 409,280 次,
02:32
would be 409,280,
42
152123
3860
02:35
taking almost five days.
43
155983
2152
大約需要 5 天時間。
然而,你需要比較的次數還是太多。
02:38
You're still doing way too many comparisons.
44
158135
2489
02:40
Here's a better idea.
45
160624
1891
更好的辦法是,
02:42
First, pick a random book.
46
162515
2370
首先,隨機選取一本書, 我們稱之為「分割點」;
02:44
Call it the partition and compare it to every other book.
47
164885
4721
將其他的每一本書 與分割點作比較,
02:49
Then, divide the line
48
169606
1909
然後根據分割點, 將這一排書分成兩部分,
02:51
by placing all the books that come before the partition on its left
49
171515
4151
將所有應該在分割點 之前的書放在左邊,
02:55
and all the ones that come after it on its right.
50
175666
3159
在分割點之後的書放在右邊,
02:58
You've just saved loads of time
51
178825
1590
這樣你就節省了大把時間,
03:00
by not having to compare any of the books on the left
52
180415
3430
因為不用再將分割點左半邊的書
03:03
to any of the ones on the right ever again.
53
183845
3400
與右邊的書進行比較。
03:07
Now, looking only at the books on the left,
54
187245
2420
現在,我們只關注分割點左邊的書,
03:09
you can again pick a random partition book
55
189665
2877
你可以再一次隨機選一本書 作為新的分割點,
03:12
and separate those books that come before it from those that come after it.
56
192542
4724
然後將其他的書分配在 新的分割點左右兩邊。
03:17
You can keep creating sub-partitions like this
57
197266
2470
你可以繼續建立這種「子分割點,」
03:19
until you have a bunch of small sub-lines,
58
199736
2648
一直到分出了許多小型分支,
03:22
each of which you'd sort quickly using another strategy, like Insertion Sort.
59
202384
5380
每一個分支中, 可以用其他更快的排序法,
例如插入排序法。
03:27
Each round of partitioning requires about 1,280 comparisons.
60
207764
5162
每一輪分割大約需要 進行 1280 次比較,
03:32
If your partitions are pretty balanced,
61
212926
2540
如果你的分割點分佈的非常均勻,
03:35
dividing the books into 128 sub-lines of ten would take about seven rounds,
62
215466
5790
整排書分為 128 個分支, 每個分支 10 本書,
這樣大約需要七輪分割, 也就是 8960 秒。
03:41
or 8,960 seconds.
63
221256
2691
03:43
Sorting these sub-lines would add about 22 seconds each.
64
223947
4789
每個分支當中, 大約需要再花 22 秒進行排序。
03:48
All in all, this method known as QuickSort
65
228736
3081
總體上來說,
這種稱為「快速排序法」的方法,
03:51
could sort the books in under three and a half hours.
66
231817
3066
能將所有的書 在三個半小時內排列整齊。
03:54
But there's a catch.
67
234883
1114
但是這有個陷阱。
03:55
Your partitions could end up lopsided, saving no time at all.
68
235997
3578
如果你的分割點非常偏向某一端,
就無法節省時間。
03:59
Luckily, this rarely happens.
69
239575
1902
幸運的是,這種情況幾乎不會發生。
04:01
That's why QuickSort is one of the most efficient strategies
70
241477
3433
這就是為什麼快速分類法
在程式設計中 是最有效率的排序法之一。
04:04
used by programmers today.
71
244910
2006
04:06
They use it for things like sorting items in an online store by price,
72
246916
3931
例如在購物網站上, 將商品依照價格排序;
04:10
or creating a list of all the gas stations close to a given location
73
250847
4011
或是列出某個地點附近的加油站,
04:14
sorted by distance.
74
254858
1521
然後根據距離來排序。
04:16
In your case, you're done quick sorting with time to spare.
75
256379
4028
在這個排書的例子中, 快速排序法幫你節省了許多時間。
04:20
Just another high-stakes day in the library.
76
260407
2261
真是多麼驚險刺激的一天啊!
關於本網站

本網站將向您介紹對學習英語有用的 YouTube 視頻。 您將看到來自世界各地的一流教師教授的英語課程。 雙擊每個視頻頁面上顯示的英文字幕,從那裡播放視頻。 字幕與視頻播放同步滾動。 如果您有任何意見或要求,請使用此聯繫表與我們聯繫。

https://forms.gle/WvT1wiN1qDtmnspy7