Can you summarize the following document?
        
  第一步:找到最下邊的點,如果有多個點縱座標相同的點都在最下方,則選取最左邊的。在右圖中這個點是P。這一步只需要掃描一遍所有的點即可,時間複雜度為formula_2。  第二步:將所有的點按照相對於第一步中的得到的點P的極角大小進行排序。注意這一步並不需要真的通過計算反三角函式來獲取與x軸夾角的大小。可以直接使用該點與P點連線的斜率,或者由P點到該點向量的與沿x軸單位向量的點積來減少計算量。可以使用諸如快速排序、堆排序之類的演算法進行排序,時間複雜度為formula_1。  第三步:維護一個棧,以儲存當前的凸包。按第二步中排序得到的結果,依次將點加入到棧中,如果正在考慮的點與棧頂的兩個點不是“向左轉”的,就表明當前棧頂的點並不在凸包上,而我們需要將其彈出棧,重複這一個過程直到正在考慮的點與棧頂的兩個點是“向左轉”的。右邊的圖解給出了“向左轉”和“向右轉”的示意: 另外,如果發現三點共線的情況,演算法可以考慮將其視為左轉或者右轉。這取決於究竟只是要求凸包的邊界,還是要找到在凸包邊界上所有的點。  我們需要簡單地計算兩個向量的有向面積,即兩個向量的叉乘的結果來判斷兩個向量的相對位置。  假設三個點分別是 formula_4,則它們的有向面積為 formula_5 。如果其結果為0,這三個點是共線的;如果其結果為正,這三個點是向左轉的;如果其結果為負,則它們是向右轉的。

  排序的複雜度為formula_1。儘管它的主迴圈看起來是formula_7的時間複雜度,但由於每個點要多次在棧中查詢當且僅當其相對與棧頂的點是“向右轉”的,這個過程實際上是formula_2的時間複雜度,並且每一個點至多被考慮兩次,而每個點只在點formula_9產生一個“向左轉”時被訪問一次(因為演算法進行到點formula_10之後,點formula_9由於產生了一個“右轉”而被刪去),因此,總的時間複雜度由排序時間決定,即formula_1

  定義:  然後結果存在codice_1陣列內:  上面的這段虛擬碼摘抄自Sedgewick and Wayne's "Algorithms, 4th edition".  在迴圈中應該檢查以避免共線的情況
葛立恆掃描法(Graham's scan)是一種計算一組的平面點的凸包的演算法,時間複雜度為formula_1。以在1972年發表該演算法的葛立恆命名。