Seperti @TsuyoshiIto sarankan, ada algoritma -waktu untuk masalah ini, karena Edelsbrunner dan Preparata. Bahkan, algoritma mereka menemukan poligon cembung dengan jumlah tepi minimum yang memungkinkan yang memisahkan dua set titik. Mereka juga membuktikan Ω ( n log n ) batas bawah untuk masalah yang lebih umum dalam model pohon keputusan aljabar; Namun, tidak jelas apakah batas bawah ini berlaku untuk kasus segitiga.O(nlogn)Ω ( n logn )
Penjelasan lengkap tentang algoritme terlalu panjang untuk dikirim di sini, tetapi inilah ide dasarnya. Biarkan menjadi cembung lambung dari poin positif. Untuk setiap titik negatif q , mempertimbangkan garis melalui q yang bersinggungan dengan C . Garis-garis ini membagi pesawat menjadi empat irisan, salah satunya berisi CCqqCC ; biarkan menjadi irisan berlawanan salah satu yang berisi C . Akhirnya, misalkan F ("wilayah terlarang") menjadi penyatuan semua irisan W ( q ) . Segitiga pemisah harus memisahkan C dari FW( q)CFW(q)CF. Baik dan F dapat dibangun dalam waktu O ( n log n ) .CFO(nlogn)
Beri label pada tepi searah jarum jam dan berlawanan arah jarum jam. Edelsbrunner dan Preparata lanjut membuktikan bahwa jika sebuah segitiga memisahkan ada, maka ada segitiga yang memisahkan yang ujung-ujungnya adalah collinear dengan tepi searah jarum jam dari F . Dalam O ( n ) waktu tambahan, kita dapat menemukan tepi (harus searah jarum jam) dari F yang pertama kali terkena sinar dari setiap tepi searah jarum jam e ; sebut tepi ini sebagai "penerus" dari e . Pointer penerus membagi tepi searah jarum jam menjadi siklus; jika ada segitiga pemisah, salah satu siklus penerus ini memiliki panjang 3 (dan tidak ada yang memiliki panjang lebih dari 4).FFO(n)Fee
Lihat kertas asli untuk lebih jelasnya: