Saya tertarik pada kerumitan dalam memutuskan apakah poligon non-sederhana yang diberikan hampir sederhana, dalam salah satu dari dua pengertian formal yang berbeda: lemah sederhana atau tidak menyilang sendiri . Karena istilah-istilah ini tidak dikenal secara luas, izinkan saya mulai dengan beberapa definisi.
Poligon sederhana jika semua simpul berbeda dan ujung-ujungnya berpotongan hanya pada titik akhirnya. Secara ekivalen, poligon adalah sederhana jika itu adalah homeomorfik untuk sebuah lingkaran dan setiap sisi memiliki panjang positif. Secara umum, bagaimanapun, simpul dan tepi poligon dapat berpotongan sewenang-wenang, atau bahkan bertepatan. 1
Pertimbangkan dua jalur poligonal dan B yang persimpangannya merupakan subpath umum dari keduanya (mungkin satu titik). Kita mengatakan bahwa A dan B lintas jika endpoint mereka A (0), B (0), A (1), B (1) alternatif pada batas lingkungan dari umum subpath A \ topi B . Poligon adalah penyilangan diri jika memiliki dua subpath penyeberangan dan non-penyilangan diri . 2
Poligon lemah sederhana jika itu adalah batas urutan poligon sederhana, atau setara, jika ada gangguan kecil sembarang dari simpul yang membuat poligon sederhana. Setiap poligon sederhana yang lemah bersifat non-self crossing; Namun, beberapa poligon yang tidak bersilangan tidak sederhana.
Sebagai contoh, perhatikan enam poin ditunjukkan di bawah ini.
Poligon sederhana; lihat gambar kiri.
Papbpqyqzq poligon sangat sederhana; gambar tengah menunjukkan poligon sederhana terdekat. Namun, poligon ini tidak sederhana, karena dikunjungi tiga kali.
poligon adalah self-crossing, karena subpath dan cross. Lihat sosok yang tepat untuk intuisi.b p q z y q p a
Akhirnya, poligon (yang dua kali di sekitar poligon tengah) adalah non-self-crossing, tetapi tidak sederhana sederhana. Secara intuitif, angka balik poligon ini adalah , sedangkan angka balik setiap poligon sederhana harus . (Bukti formal memerlukan beberapa analisis kasus, sebagian karena angka balik sebenarnya tidak terdefinisi dengan baik untuk poligon dengan sudut !)± 2 ± 1 0 ∘
Pembaruan (13 Sep): Pada gambar di bawah ini, poligon adalah non-self-crossing dan telah berbalik nomor 1 , tetapi tidak sederhana sederhana. Poligon dapat dikatakan memiliki beberapa penyeberangan sub- jalan yang tidak sederhana , tetapi tidak memiliki penyeberangan sub- jalan yang sederhana . (Saya katakan "bisa dibilang" karena tidak jelas bagaimana cara mendefinisikan ketika dua jalan yang tidak sederhana berjalan!)
Jadi akhirnya, inilah pertanyaan saya yang sebenarnya:
Seberapa cepat kita dapat menentukan apakah poligon yang diberikan adalah non-self-crossing?
Seberapa cepat kita dapat menentukan apakah poligon yang diberikan sederhana sederhana?
Masalah pertama dapat diselesaikan dalam waktu sebagai berikut. Karena ada simpul, ada subpath vertex-ke-vertex ; kita dapat menguji apakah subpath tertentu sederhana dalam waktu (dengan kekerasan). Untuk setiap pasangan sub-simpul vertex-ke-vertex sederhana, kita dapat menguji apakah mereka melintasi dalam waktu . Tetapi ini bukan algoritma terbaik.
Saya tidak tahu apakah masalah kedua dapat diselesaikan dalam waktu polinomial. Saya pikir saya dapat dengan cepat menghitung angka balik yang terdefinisi dengan baik untuk sembarang poligon non-sederhana (kecuali penyatuan ujung-ujung poligon hanya jalan, dalam hal ini poligon harus sederhana sederhana); lihat jawaban saya di bawah ini. Namun, contoh poligon baru di atas menyiratkan bahwa non-self-crossing dan balik nomor 1 tidak menyiratkan lemah sederhana.
Kita bisa menentukan apakah poligon yang diberikan adalah sederhana di waktu dengan memeriksa setiap sepasang tepi untuk persimpangan, atau waktu menggunakan algoritma sweepline standar, atau bahkan di waktu menggunakan algoritma triangulasi Chazelle. (Jika input poligon tidak sederhana, algoritma triangulasi apa pun akan melempar pengecualian, infinite-loop, atau menghasilkan output yang bukan triangulasi yang valid.) Tetapi tidak satu pun dari algoritma ini yang menyelesaikan masalah yang saya tanyakan. O ( n log n ) O ( n )
1 Branko Grünbaum. Poligon: Meister benar dan Poinsot salah tetapi menang . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Lihat, misalnya: Erik D. Demaine dan Joseph O'Rourke. Algoritma Lipat Geometris: Tautan, Origami, Polyhedra . Cambridge University Press, 2007.