一條規則:裝得下自己所有弦的集合
在一個集合內部任意取兩點,畫出它們之間的線段。若這整條線段都留在集合裡——無論你選的是哪兩點——這個集合就是凸集。這就是全部的定義,值得在堆疊任何東西之前先讓它沉澱下來。實心圓盤是凸的;實心三角形、正六邊形、實心立方體、半平面也都是。一彎新月不是凸的,因為橫跨兩角的弦會從缺口溜出去。五角星也不是,理由相同:連接相鄰兩個尖端的線段會切過它們之間那塊空缺。
前面的階段早已把多邊形情形的詞遞給了你:一個多邊形是凸的或凹的,恰好取決於它的每一條對角線是否都留在內部。凸性不過是把這項測試從多邊形上提起,套用到任何形狀、任何維度,不需要直邊或角點。而它在交集下表現得極為漂亮:若你把兩個凸集疊在一起,公共部分仍是凸的,因為一條同時困在兩者內的弦,也就困在重疊區裡。半平面是凸的;把一疊半平面相交,你恰好雕出凸多邊形與凸多面體——那些「由平板切割而成」的形狀。
凸包:點集的收縮包膜
把一把釘子撒在板上,繞著它們全部撐開一條橡皮筋;放手,它便緊繃地卡在最外圈的釘子上,用可能的最小凸區域圈住每一個點。那條繃緊的輪廓就是這個點集的凸包。說精確些,凸包是所有包含你那些點的凸集的交集——而既然凸集的交集仍是凸的,結果本身就是包住它們的最小凸集。在平面中它是一個凸多邊形;在空間中是一個凸多面體;橡皮筋變成一層收縮包膜。
還有第二種、對偶的方式來看凸包,它在往後回報極豐。凸包上的每一點都能寫成原始各點的加權平均——一個凸組合——其中權重非負且總和為 1。兩點給你它們之間的整條線段(權重 t 與 1 - t);三個不共線的點給出它們張成的實心三角形;n 個點給出你用總和為一的非負權重去混合它們所能抵達的一切。所以凸包既是最小的凸容器,又是資料所有誠實平均的集合。兩種描述都重要,而有個醒目的事實調和了它們:在平面中,凸包上的每一點都已是至多三個原始點的平均,從不需要更多。
支撐超平面:把一面平牆靠上凸體
凸性還有第二張面孔,與弦的規則同等根本,也是最佳化賴以為生的那一張。取一個凸體,把一面平牆——平面中的一條直線、空間中的一個平面、更高維中的一個超平面——筆直推靠上去,直到牆剛好碰到、無法再進。整個凸體於是完全落在那面牆的一側。一面碰到凸集、又把它全部留在同一側的牆,就是支撐超平面。凸體的每一個邊界點上都至少靠著一面這樣的牆;在光滑的點上那面牆是唯一的切面,而在尖角上則可以有一整把扇形的牆停靠在那裡。
由支撐牆衍生出關於凸集最有用的一條定理:分離超平面定理。若兩個凸集互不重疊,你總能在它們之間插進一面平牆,使一個集合完全落在一側、另一個完全落在對側。想像桌上兩團不相連的麵團;凸性保證有一道乾淨的刀切——一條直線——把它們無重疊地分開。對兩個圓來說這聽來理所當然,但它在每個維度、對每一對不相交的凸集都成立,而其後果極為深遠:一個關於是否重疊的是非問題,化成了一面分離牆的存在性,這正是支撐線性分類器、支援向量機,以及線性規劃核心對偶性的那個念頭。
這兩張面孔——內視(每條弦都留在內部)與外視(每個邊界點都有牆靠著)——並非兩樁巧合,而是同一個事實由內、由外兩面看去的結果。一個凸體恰好就是它所有支撐牆所截出的半空間之交集。這就是為什麼一個凸多面體能以兩種完全等價的方式描述:列出它的角點再取凸包,或列出它的界牆再對半空間取交集。在這兩種描述——頂點圖像與面圖像——之間互譯,是計算幾何反覆出現的勞役之一;而且老實說,它可能代價高昂,因為一個頂點不多的多胞形可能擁有天文數字般多的面,反之亦然。
多胞形:被釋放進任意維度的多邊形與多面體
一條線段、一個多邊形、一個多面體——每一個都是邊界由平片拼成的凸形狀,每一個都比前一個高出一維。多胞形就是你拒絕在三維停步時所得到的東西:有限多個點的凸包,或等價地,有限多個半空間的有界交集,落在任何你喜歡的維度 d。在二維中,多胞形不過是凸多邊形;在三維中是凸多面體;在四維以上它是一個你雖無法完整想像、卻能據以計算的貨真價實的物件。整套機制——頂點、稜、平面、凸包觀點與半空間觀點——原封不動地往上承接。
要在不想像高維的情況下看見它,改用數的。正方形有 4 個角、4 條邊;立方體有 8 個角、12 條稜、6 個正方形面。再上一層樓到四維立方體,也就是超立方體:它有 16 個角、32 條稜、24 個正方形面,以及作為三維邊界塊的 8 個立方體「胞」。你無法把超立方體捧在手上,但你能捧著它各部件的清點數,而生成這些數的規律(每多一維就讓舊的角數加倍,再添一份舊立方體)完全嚴謹。這就是整個課題悄然的解放:維度不再是你必須去看見的地方,而成了你拿來計算的一個數。
Counting the parts (the f-vector), dimension by dimension: shape dim vertices edges 2D-faces 3D-cells segment 1 2 - - - square 2 4 4 - - cube 3 8 12 6 - tesseract 4 16 32 24 8 Euler check (must equal 2 for a convex polyhedron): cube: V - E + F = 8 - 12 + 6 = 2
歐拉公式與高維的種種驚奇
清點部件並非閒散的記帳;這些數遵守法則。最古老的是歐拉多面體公式,對任何凸多面體都有 V - E + F = 2,其中 V、E、F 分別是頂點、稜、平面的個數。在立方體上驗證:8 - 12 + 6 = 2。在四面體上:4 - 6 + 4 = 2。對凸立體它從不失手,而那頑固的 2 並非巧合——它正是球面的歐拉示性數 chi = V - E + F,而每一個凸多面體在拓樸上就是一個球面。這條公式是你從長度與角度的度量世界,通往本階最後幾篇那個「形狀要緊、大小無關」的拓樸世界的第一座橋。
高維不只是延伸我們的直覺——它伏擊我們的直覺,而誠實要求我們把這點說出來。在三維中恰好有五個柏拉圖立體,那些完美正則的凸多面體:四面體、立方體、八面體、十二面體、二十面體。你或許會猜這數目隨維度一路攀升。它卻反其道而行:在四維中有六個正多胞形,但在五維以及其上的每一個維度中,永遠只有三個——單體、超立方體,以及它的對偶。正則形狀的豐富多樣,是低維才有的奢侈,被高維悄悄收走。把這點直白說出,比任何「規律總是成長」的整齊寓言都更有用。
為什麼凸性是這一章的樞紐
凸性之所以坐上中央那把椅子,靠的是一樁實用的奇蹟:在凸集上,局部的好消息自動就是全域的好消息。若你在一個凸區域上最小化一個合理的(凸的)成本,走到一個無法再以任何小步改善的點,你就完成了——那點就是真正的最小值,別處沒有暗藏更低的山谷潛伏著。拿掉凸性,這道保證便蒸發了:一片非凸的地景能把你困在一處淺凹裡,而更深的那處正在山脊另一邊等著。這正是凸問題之所以能被我們可靠且大規模求解的確切緣由,也是為什麼大量的應用數學會費盡心力,一開始就把問題表述成凸的。
回望這一路。弦的規則給了我們凸集;橡皮筋給了我們凸包及其作為資料平均的對偶身分;倚靠的牆給了我們支撐與分離超平面;拒絕在三維停步給了我們多胞形,以及清點看不見之物的紀律。每個念頭單獨看都很基本,合起來卻是最佳化、幾何演算法,以及我們這個世紀那種資料形狀幾何的工作語言。下一篇把這一切兌現:它把凸包及其親族交給電腦,並追問機器究竟能多快地把它們建構出來。