代數、離散與計算幾何及前沿

凸包(convex hull)

在一塊板子上隨意釘進一把釘子,然後拉一條橡皮筋把它們全部圈住,放手讓它繃緊。繃緊的橡皮筋描出一個緊貼最外圈釘子的多邊形,其餘釘子全收在裡面。那個繃緊的形狀就是這些點的凸包:包含它們全部的最小凸集。它是你能套在一組點外、毫無凹陷的最省的「包裝」。

精確地說,集合 S 的凸包是包含 S 的每一個凸集的交集——而既然凸集的交集仍是凸的,這確實就是包住 S 的最小凸集。還有一個同樣好用的構造性圖像:凸包是 S 中各點所有「加權平均」所成的集合,也就是所有形如 t_1 P_1 + t_2 P_2 + ... + t_k P_k 的組合,其中權重 t_i 非負且加總為 1(這些稱為凸組合)。對平面上一組有限點,凸包是一個凸多邊形,其角點(頂點)是某些原始點——正是橡皮筋上的釘子——而其餘每個點都落在內部或邊上。最終成為角點的,正是那些無法寫成其他點的平均的點。

計算凸包是計算幾何的基礎課題,平面上 n 個點可在與 n log n 成正比的時間內解出(即排序的代價),靠的是 Graham 掃描法與禮品包裝法(Jarvis 行進)等經典演算法。它是無數流程的第一步:碰撞偵測、模式辨識、找出最極端的資料點、形狀分析。一個常見的混淆是把凸包當作「邊界」(多邊形的輪廓)還是「填實的區域」(內部的實心部分);兩種用法都存在,所以說清楚你指的是哪一個是值得的。另要注意凸包丟棄了所有內部結構——它只告訴你輪廓,永不告訴你點在其中如何聚集。

取五個點:四個在正方形的角上,一個正中央。凸包就只是那個正方形——它的四個角是頂點,而中央那點是內部點,對輪廓毫無貢獻。即使再加一百個散佈在正方形內的點,凸包仍然不變:只有最極端的點,那些任何平均都搆不到的點,才會成為角點。

內部點對凸包是隱形的;只有極端點才塑造輪廓。

凸包只保留外緣的輪廓。兩堆完全不同的點雲可以共用同一個凸包,所以單憑凸包對你說不出任何關於密度、聚集、或內部任何情況的事。

又稱
convex enveloperubber-band shape凸殼