Dalam kasus grafik yang tidak berlabel, masalah grafik isomorfisme dapat diatasi dengan sejumlah algoritma yang berkinerja sangat baik dalam praktiknya. Artinya, meskipun waktu berjalan terburuk adalah eksponensial, biasanya ada waktu menjalankan polinomial.
Saya berharap bahwa situasinya serupa dalam kasus grafik berlabel. Namun, saya memiliki waktu yang sangat sulit untuk menemukan referensi yang mengusulkan algoritma "praktis efisien".
Catatan: Di sini, kami mensyaratkan bahwa isomorfisme mempertahankan label. Yaitu, isomorfisme antara dua istilah aljabar automata / proses terbatas akan menyiratkan bahwa automata / istilah pada dasarnya "sama dengan mengubah nama node".
Satu-satunya referensi yang saya temukan adalah yang ada di Wikipedia yang menyatakan bahwa masalah isomorfisme pada grafik berlabel dapat direduksi secara polinomi menjadi pada grafik biasa. Makalah yang mendasari, bagaimanapun, lebih banyak tentang teori kompleksitas daripada algoritma praktis.
Saya kehilangan sesuatu, atau apakah memang benar bahwa tidak ada algoritma "heuristik" yang efisien untuk memutuskan apakah dua grafik berlabel adalah isomorfik?
Setiap petunjuk atau referensi akan sangat bagus.
Jawaban:
Anda mungkin tertarik dengan makalah ini:
Aidan Hogan: Skolemising Nodes Kosong sambil Memelihara Isomorfisme. WWW 2015: 430-440
Ini memiliki algoritma (berdasarkan Nauty) untuk menguji isomorfisme grafik RDF, yang pada dasarnya diarahkan grafik berlabel yang mungkin berisi label tetap. Algoritme memperhitungkan label untuk mempersempit ruang pencarian.
Jika Anda dapat merepresentasikan grafik berlabel input Anda sebagai grafik RDF, Anda dapat mencoba menggunakan paket perangkat lunak terkait "
blabel
" untuk menguji isomorfisma.sumber
Saya menemukan bahwa algoritme tersebut termasuk dalam kategori algoritma k-dimensi Weisfeiler-Lehman, dan gagal dengan grafik biasa. Untuk lebih lanjut di sini:
http://dabacon.org/pontiff/?p=4148
Pos asli berikut:
Bertahun-tahun yang lalu, saya membuat algoritma yang sederhana dan fleksibel untuk masalah ini (grafik isomorfisme dengan label).
Saya menamainya "Powerhash", dan untuk membuat algoritma itu diperlukan dua wawasan. Yang pertama adalah algoritma grafik iterasi daya, juga digunakan dalam PageRank. Yang kedua adalah kemampuan untuk menggantikan fungsi langkah dalam iterasi daya dengan apa pun yang kita inginkan. Saya menggantinya dengan fungsi yang melakukan hal berikut pada setiap iterasi, dan untuk setiap node:
Pada langkah pertama, hash sebuah node dipengaruhi oleh tetangga langsungnya. Pada langkah kedua, hash sebuah node dipengaruhi oleh lingkungan 2-hop darinya. Pada langkah ke-N, hash node akan dipengaruhi oleh lingkungan N-hop di sekitarnya. Jadi Anda hanya perlu melanjutkan menjalankan Powerhash untuk N = langkah-langkah graph_radius. Pada akhirnya, hash simpul pusat grafik akan dipengaruhi oleh seluruh grafik.
Untuk menghasilkan hash terakhir, urutkan hash simpul langkah terakhir dan menyatukannya. Setelah itu, Anda dapat membandingkan hash terakhir untuk menemukan apakah dua grafik isomorfik. Jika Anda memiliki label, kemudian tambahkan label (pada iterasi pertama) di hash internal yang Anda hitung untuk setiap node.
Untuk lebih lanjut tentang ini, Anda dapat melihat posting saya di sini:
https://plus.google.com/114866592715069940152/posts/fmBFhjhQcZF
Algoritma di atas diimplementasikan di dalam database relasional fungsional "madIS". Anda dapat menemukan kode sumber algoritme di sini:
https://github.com/madgik/madis/blob/master/src/functions/aggregate/graph.py
sumber