Verilen bir 2D nokta kümesini tamamen içine alan en küçük dış bükey çokgeni (Convex Hull) bulan Graham Scan ve Jarvis March (Gift Wrapping) algoritmalarıdır.
Dış Bükey Gövde (Convex Hull) problemi, 2D düzlemdeki bir grup çivinin etrafına geçirilen gergin bir paket lastiğinin oluşturduğu şekli bulma problemi olarak tasvir edilir.
Jarvis March (Package Wrapping), en soldaki noktadan başlayıp her adımda mevcut noktaya göre saat yönünün tersindeki en dıştaki (en geniş ccw açılı) noktayı seçerek bir nevi "paketi sarar". Süreç, başlangıç noktasına dönüldüğünde biter.
Graham Scan ise en alt noktayı pivot seçerek diğer noktaları polar açılarına göre sıralar. Ardından noktaları sırayla ziyaret ederken sol-dönüş (left-turn/ccw) kuralını korur. Eğer sağa dönüş yapılırsa, dış bükeyliği bozan içteki noktalar yığından atılır (backtrack).
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function convexHullGraham(points: [number, number][]): [number, number][] {2 if (points.length < 3) return [...points];3 4 // 1. Pivot bul (y en küçük, eşitse x en küçük)5 let pivot = points[0];6 let pivotIdx = 0;7 for (let i = 1; i < points.length; i++) {8 if (points[i][1] < pivot[1] || (points[i][1] === pivot[1] && points[i][0] < pivot[0])) {9 pivot = points[i];10 pivotIdx = i;11 }12 }1314 // 2. Polar açıya göre sırala15 const copy = [...points];16 copy.splice(pivotIdx, 1);17 copy.sort((a, b) => {18 const orient = ccw(pivot, a, b);19 if (orient === 0) {20 const distA = (a[0] - pivot[0]) ** 2 + (a[1] - pivot[1]) ** 2;21 const distB = (b[0] - pivot[0]) ** 2 + (b[1] - pivot[1]) ** 2;22 return distA - distB;23 }24 return orient > 0 ? -1 : 1;25 });2627 // 3. Graham Scan yığın adımları28 const stack: [number, number][] = [pivot, copy[0], copy[1]];29 for (let i = 2; i < copy.length; i++) {30 while (stack.length >= 2) {31 const top = stack[stack.length - 1];32 const nextToTop = stack[stack.length - 2];33 if (ccw(nextToTop, top, copy[i]) > 0) {34 break; // Sol dönüş bulduk35 }36 stack.pop(); // Sağ dönüş veya doğrusal ise at37 }38 stack.push(copy[i]);39 }40 return stack;41}Modu ve noktaları x,y çiftleri halinde girin. Modlar: GRAHAM, JARVIS. Örnek: GRAHAM; 0,3; 1,1; 2,2; 4,4; 0,0; 1,2; 3,1; 3,3
Modu ve noktaları x,y çiftleri halinde girin. Modlar: GRAHAM, JARVIS. Örnek: GRAHAM; 0,3; 1,1; 2,2; 4,4; 0,0; 1,2; 3,1; 3,3
En İyi Durum: O(N log N) Graham Scan ile
Ortalama Durum: O(N log N)
En Kötü Durum: O(N^2) Jarvis March ile köşe sayısı H ≈ N olduğunda
O(N) sıralanmış noktalar ve yığın için - Bu algoritmanın karmaşıklığı belirtilmemiş.
Yol ve Dış Bükey Gövde (Path & Convex Hull) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: