Algoritme apa yang akan Anda gunakan untuk menemukan jalur terpendek dari grafik, yang tertanam dalam bidang euclidean, sehingga jalur tersebut tidak boleh mengandung persimpangan-sendiri (dalam penyematan)?
Misalnya, dalam grafik di bawah ini, Anda ingin beralih dari . Biasanya, algoritma seperti algoritma Dijkstra akan menghasilkan urutan seperti:
Grafik lengkap:
Jalur terpendek:
Jalur non-berpotongan terpendek:
Namun, jalur ini memotong dirinya pada bidang euclidean, oleh karena itu saya ingin algoritma yang akan memberi saya urutan non-berpotongan terpendek, dalam hal ini:
Jalur ini lebih panjang dari jalur terpendek, tetapi merupakan jalur non-berpotongan terpendek.
Apakah ada algoritma (efisien) yang dapat melakukan ini?
Jawaban:
Ini NP-complete untuk bahkan memutuskan apakah ada jalur.
Jelas dimungkinkan untuk memverifikasi setiap jalur yang diberikan adalah jalur yang valid dalam grafik yang diberikan. Jadi masalah panjang-terikat adalah dalam NP, dan begitu juga subsetnya, masalah any-path.
Sekarang, untuk membuktikan NP-hardness dari masalah any-path (dan dengan demikian dari masalah panjang-terikat), mari kita kurangi SAT-CNF untuk masalah ini:
Struktur global adalah kisi-kisi potongan kawat yang disatukan oleh kolom potongan klausa. Rumus logika memuaskan jika ada jalur non-berpotongan melalui grafik.
Tidak mungkin untuk melewati dua bagian dari jalan, tetapi perlu untuk melewati dua kabel logika. Alih-alih, alur jalur diberikan secara ketat: titik kawat diberikan oleh dua simpul. Urutan titik kawat yang dilalui jalur dipaksa oleh reduksi. Logika diwakili oleh simpul mana yang dipilih. Setiap jalur dapat dipilih selama melewati semua titik kawat.
Dalam diagram ini, jalan diwakili oleh kurva merah dan aliran logika diwakili oleh kabel hitam:
Sekarang mari kita membangun setiap komponen.
Pengkabelan menggunakan tiga ubin: persimpangan, titik cabang, dan kabel vertikal. Mari kita mulai dengan yang paling sulit:
Ide dasar di balik persimpangan adalah untuk menyiapkan jalur untuk setiap pasangan titik kawat dan menekuk jalur yang mungkin sehingga semua pasangan kecuali mereka yang menyandikan logika yang sama (jalur yang kompatibel) saling bersilangan. Tentu saja kita tidak bisa hanya mengatakan dua tepi paralel berpotongan, tetapi kita dapat memperkenalkan node pesanan-2 tambahan untuk membuat dua jalur berpotongan.
Seandainya jalur datang dari utara ke barat dan dari selatan ke timur, kita dapat: mengumpulkan setiap jalur dari utara dengan jalurnya yang kompatibel dari timur pada sebuah garis (beberapa jalur yang tidak kompatibel akan saling bersilangan); silangkan setiap pasangan dengan satu sama lain dengan membalik urutan pasangan; mendistribusikan jalur ke titik akhir selatan dan barat. Ini paling baik dijelaskan dengan diagram. Di sini, setiap pasangan node mewakili titik kawat. Jalur dengan kode warna yang sama (membawa logika yang sama) tidak berpotongan, jalur yang kode warna berbeda lakukan:
Titik cabang dan kabel vertikal bekerja sama, tetapi ada lebih sedikit jalur untuk dikorelasikan:
Dimungkinkan untuk menggeneralisasi reduksi ini untuk menyandikan pohon gerbang AND dan OR yang sewenang-wenang dengan cara mencabangkan kabel pembacaan dengan cara yang berbeda. Secara khusus, SAT-CNF dan SAT-DNF keduanya mungkin untuk mengurangi masalah jalur non-berpotongan dengan cara yang dijelaskan di atas.
sumber
<sub>
)?masalahnya tampaknya berasal dari Turan 1944. ini tampak seperti survei teori dan algoritma yang bagus, Crossing Number of Graphs: Theory and Computation by Mutzel. wikipedia memiliki beberapa info dengan jumlah grafik yang banyak
sumber