Grafik campuran adalah grafik yang mungkin memiliki tepi terarah dan tidak berarah. Grafiknya yang tidak diarahkan mendasari diperoleh dengan melupakan orientasi dari tepi yang diarahkan, dan di arah lain orientasi dari grafik campuran diperoleh dengan menetapkan arah ke setiap tepi yang tidak diarahkan. Seperangkat tepi membentuk siklus dalam grafik campuran jika dapat berorientasi untuk membentuk siklus terarah. Grafik campuran asiklik jika dan hanya jika tidak memiliki siklus.
Ini semua standar dan ada banyak makalah yang diterbitkan menyebutkan grafik campuran asiklik. Jadi algoritma berikut untuk menguji acyclicity dari grafik campuran harus diketahui:
Ulangi langkah-langkah berikut:
- Hapus semua titik yang tidak memiliki tepi terarah masuk dan tidak ada tepi tidak berarah, karena tidak dapat menjadi bagian dari siklus apa pun.
- Jika ada titik yang tidak memiliki tepi diarahkan masuk tetapi memiliki tepat satu insiden tepi tidak terarah, maka setiap siklus menggunakan tepi tidak diarahkan harus masuk di tepi itu. Ganti tepi yang tidak terarah dengan tepi yang diarahkan masuk.
Berhentilah ketika tidak ada lagi langkah yang dapat dilakukan. Jika hasilnya adalah grafik kosong, maka grafik asli pastilah asiklik. Kalau tidak, mulai dari titik mana pun yang tersisa, seseorang dapat mundur melalui grafik, pada setiap langkah mengikuti mundur melalui tepi masuk atau mengikuti tepi tidak diarahkan yang bukan yang digunakan untuk mencapai puncak saat ini, sampai melihat simpul berulang. Urutan tepi yang diikuti antara pengulangan pertama dan kedua dari simpul ini (dalam urutan terbalik) membentuk siklus dalam grafik campuran.
Artikel Wikipedia tentang grafik campuran menyebutkan grafik campuran asiklik tetapi tidak menyebutkan cara mengujinya, jadi saya ingin menambahkan sesuatu tentang algoritma ini, tetapi untuk itu saya perlu referensi yang diterbitkan. Dapatkah seseorang memberi tahu saya di mana itu (atau algoritma lain untuk menguji asiklik) muncul dalam literatur?
sumber
Jawaban:
Menemukan siklus campuran dalam grafik campuran sama dengan menemukan siklus arah elementer (dengan panjang> = 3) dalam grafik arah yang sesuai. Grafik berarah yang sesuai diperoleh dari grafik campuran dengan mengganti setiap tepi yang tidak terarah dengan dua tepi terarah yang menunjuk ke arah yang berlawanan. Bukti: (1) Setiap siklus berarah dasar (dengan panjang> = 3) dalam digraf berhubungan langsung dengan siklus campuran dalam grafik campuran. (2) Setiap siklus campuran dalam grafik campuran berisi siklus campuran elementer dari panjang> = 3, dan setiap siklus tersebut berhubungan langsung dengan siklus pengarahan elementer (dengan panjang> = 3) dalam grafik yang diarahkan. (1) dan (2) bersama-sama membuktikan kedua arah pernyataan itu, qed. Jadi kami mencari referensi bagaimana menghitung siklus SD (semua?) (Panjang> = 3) dalam grafik berarah.
Komentar menunjukkan bahwa cs.stackexchange berisi beberapa jawaban untuk pertanyaan ini, tetapi tidak jelas bagaimana mengatur hasilnya menjadi jawaban yang ringkas. Posting blog ini tampaknya meringkas referensi penting (paling?) Dengan baik:
Pengujian acyclicity itu sendiri tampaknya mudah: Hitung komponen grafik yang sangat terhubung . Setiap siklus (dasar) sepenuhnya terkandung dalam komponen yang sangat terhubung. Komponen yang terhubung kuat mengandung siklus dasar jika bukan pohon yang tidak diarahkan.
Algoritma yang diusulkan David Eppstein juga menghitung satu siklus dasar sebagai bukti, dan algoritma di atas menghitung semua siklus dasar. Setiap titik atau tepi yang tidak terkandung dalam siklus dasar dapat dihapus sebagai langkah preprocessing untuk meningkatkan kecepatan algoritma di atas. Algoritma David Eppstein dapat digunakan untuk tujuan itu, tetapi bahkan jika hanya digunakan pada komponen yang sangat terhubung, itu tidak akan menghapus setiap kemungkinan titik atau tepi yang dapat dihapus. Tetapi bahkan jika itu dapat diperluas untuk melakukannya (menghitung pohon blok-potong setidaknya memungkinkan untuk menghapus setiap titik yang mungkin dapat dihapus), tidak jelas apakah ini akan benar-benar meningkatkan kecepatan algoritma di atas.
sumber