Return to Video

如何最有效率地整理書架?- Chand John

  • 0:07 - 0:09
    你是大學圖書館的管理員。
  • 0:09 - 0:11
    正在享受午後的閒暇時光。
  • 0:11 - 0:18
    這時候,突然送來了1280 本書!
  • 0:18 - 0:22
    這些書被排成一行,
  • 0:22 - 0:23
    但是毫無規律。
  • 0:23 - 0:27
    剛好,自動分類系統又發生故障。
  • 0:27 - 0:30
    更糟糕的是,明天就要開學了;
  • 0:30 - 0:32
    也就是說明天一大早,
  • 0:32 - 0:36
    學生們就會湧入圖書館借書。
  • 0:36 - 0:39
    如何才能把所有書籍
    及時整理好?
  • 0:39 - 0:45
    第一種方法:你可以從
    排在最前面的兩本書開始,
  • 0:45 - 0:49
    如果這兩本書的順序正確,
    那麼不做任何變動;
  • 0:49 - 0:51
    否則,互相交換這兩本書的位置。
  • 0:51 - 0:53
    接著再看第二本書和第三本書,
  • 0:53 - 0:55
    不斷重複上述過程,
  • 0:55 - 0:58
    一直到書列的末端為止。
  • 0:58 - 1:01
    在過程中,你可能就會碰到
    應該排在最後的那一本書,
  • 1:01 - 1:05
    你會持續將這本書和後面的書交換,
  • 1:05 - 1:09
    將它不斷往後移動,
    一直到最後面的位置。
  • 1:09 - 1:11
    然後再從頭開始,
  • 1:11 - 1:15
    不斷重複上述的步驟,
    將倒數第二本書歸位,
  • 1:15 - 1:19
    一直持續到所有的書
    都放在正確的位置為止。
  • 1:19 - 1:22
    這種整理的方法
    叫做「氣泡排序法」。
  • 1:22 - 1:24
    原理很簡單,但過程很緩慢。
  • 1:24 - 1:29
    在第一輪過程就需要進行
    1279 次的比較;
  • 1:29 - 1:34
    第二輪要比較 1278 次,
    以此類推……
  • 1:34 - 1:39
    所以總共要比較 818,560 次。
  • 1:39 - 1:41
    如果比較一次需要 1 秒,
  • 1:41 - 1:44
    那麼你需要花費 9.5 天才能完成工作。
  • 1:44 - 1:49
    第二種方法是先將前面兩本書排好,
  • 1:49 - 1:54
    然後將第三本書
    與位於第二位的書進行比較。
  • 1:54 - 1:57
    如果第三本書應該放在第二本之前,
    則互相交換它們的位置,
  • 1:57 - 2:00
    然後再將這本書
    與排在第一位的書比較,
  • 2:00 - 2:02
    如果有需要,就再交換位置。
  • 2:02 - 2:04
    現在,你已經成功安排好了前三本書,
  • 2:04 - 2:08
    接著每次將一本書
    加入之前安排好的隊列中,
  • 2:08 - 2:12
    將新書與前一本作比較,
    如果需要,交換它們的位置,
  • 2:12 - 2:16
    一直到這本新書被安置到
    隊列中的正確位置。
  • 2:16 - 2:18
    這種方法叫做「插入排序法」。
  • 2:18 - 2:20
    與氣泡排序法不同,
  • 2:20 - 2:23
    它通常不需要比較
    所有相鄰的兩本書。
  • 2:23 - 2:27
    平均來說,每本書
    需要進行比較的次數
  • 2:27 - 2:29
    僅有氣泡排序法的一半。
  • 2:29 - 2:36
    這種方法總共需要比較
    409,280 次,
  • 2:36 - 2:38
    大約需要 5 天時間。
  • 2:38 - 2:41
    然而,你需要比較的次數還是太多。
  • 2:41 - 2:43
    更好的辦法是,
  • 2:43 - 2:46
    首先,隨機選取一本書,
    我們稱之為「分割點」;
  • 2:46 - 2:50
    將其他的每一本書
    與分割點作比較,
  • 2:50 - 2:51
    然後根據分割點,
    將這一排書分成兩部分,
  • 2:51 - 2:55
    將所有應該在分割點
    之前的書放在左邊,
  • 2:55 - 2:59
    在分割點之後的書放在右邊,
  • 2:59 - 3:00
    這樣你就節省了大把時間,
  • 3:00 - 3:04
    因為不用再將分割點左半邊的書
  • 3:04 - 3:07
    與右邊的書進行比較。
  • 3:07 - 3:10
    現在,我們只關注分割點左邊的書,
  • 3:10 - 3:13
    你可以再一次隨機選一本書
    作為新的分割點,
  • 3:13 - 3:17
    然後將其他的書分配在
    新的分割點左右兩邊。
  • 3:17 - 3:20
    你可以繼續建立這種「子分割點,」
  • 3:20 - 3:22
    一直到分出了許多小型分支,
  • 3:22 - 3:26
    每一個分支中,
    可以用其他更快的排序法,
  • 3:26 - 3:28
    例如插入排序法。
  • 3:28 - 3:33
    每一輪分割大約需要
    進行 1280 次比較,
  • 3:33 - 3:36
    如果你的分割點分佈的非常均勻,
  • 3:36 - 3:40
    整排書分為 128 個分支,
    每個分支 10 本書,
  • 3:40 - 3:44
    這樣大約需要七輪分割,
    也就是 8960 秒。
  • 3:44 - 3:49
    每個分支當中,
    大約需要再花 22 秒進行排序。
  • 3:49 - 3:49
    總體上來說,
  • 3:49 - 3:52
    這種稱為「快速排序法」的方法,
  • 3:52 - 3:55
    能將所有的書
    在三個半小時內排列整齊。
  • 3:55 - 3:56
    但是這有個陷阱。
  • 3:56 - 3:58
    如果你的分割點非常偏向某一端,
  • 3:58 - 4:00
    就無法節省時間。
  • 4:00 - 4:01
    幸運的是,這種情況幾乎不會發生。
  • 4:01 - 4:03
    這就是為什麼快速分類法
  • 4:03 - 4:07
    在程式設計中
    是最有效率的排序法之一。
  • 4:07 - 4:11
    例如在購物網站上,
    將商品依照價格排序;
  • 4:11 - 4:15
    或是列出某個地點附近的加油站,
  • 4:15 - 4:16
    然後根據距離來排序。
  • 4:16 - 4:20
    在這個排書的例子中,
    快速排序法幫你節省了許多時間。
  • 4:20 - 4:23
    真是多麼驚險刺激的一天啊!
Title:
如何最有效率地整理書架?- Chand John
Speaker:
Chand John
Description:

觀看完整課程: http://ed.ted.com/lessons/what-s-the-fastest-way-to-alphabetize-your-bookshelf-chand-john

想像你在一座大學圖書館裡工作。你正在享受下午的閒暇時光,這時突然送來了1280 本書。這些書毫無規律地排成一行,而自動排序系統又發生了故障。那麼,如何才能在最短的時間內排列好所有的書籍?Chand John 向我們闡述如何利用演算法,來幫助圖書管理員和搜索引擎快速地排序資料。

課程製作: Chand John,動畫製作 Anton Trofimov

more » « less
Video Language:
English
Team:
closed TED
Project:
TED-Ed
Duration:
04:39

Chinese, Traditional subtitles

Revisions Compare revisions