Saya ingin menghitung semua grafik ukuran tidak diarahkan , tetapi saya hanya perlu satu instance dari setiap kelas isomorfisma . Dengan kata lain, saya ingin menghitung semua grafik non-isomorfik (tidak terarah) pada simpul. Bagaimana saya bisa melakukan ini?
Lebih tepatnya, saya ingin algoritma yang akan menghasilkan urutan grafik tidak langsung , dengan properti berikut: untuk setiap grafik tidak diarahkan pada simpul, terdapat indeks sedemikian rupa sehingga isomorfik untuk . Saya ingin algoritma menjadi seefisien mungkin; dengan kata lain, metrik yang saya pedulikan adalah waktu berjalan untuk menghasilkan dan beralih melalui daftar grafik ini. Tujuan kedua adalah alangkah baiknya jika algoritme tidak terlalu rumit untuk diterapkan. G n i G G i
Perhatikan bahwa saya perlu memiliki setidaknya satu grafik dari masing-masing kelas isomorfisma, tetapi tidak apa-apa jika algoritma menghasilkan lebih dari satu contoh. Secara khusus, tidak apa-apa jika urutan output mencakup dua grafik isomorfik, jika ini membantu membuatnya lebih mudah untuk menemukan algoritma seperti itu atau memungkinkan algoritma yang lebih efisien, selama itu mencakup semua grafik yang mungkin.
Aplikasi saya adalah sebagai berikut: Saya memiliki program yang ingin saya uji pada semua grafik ukuran . Saya tahu bahwa jika dua grafik isomorfis, program saya akan berperilaku sama pada keduanya (itu akan benar pada keduanya, atau salah pada keduanya), sehingga cukup untuk menyebutkan setidaknya satu perwakilan dari setiap kelas isomorfisme, dan kemudian menguji program pada input tersebut. Dalam aplikasi saya, cukup kecil.n
Beberapa kandidat algoritma yang saya pertimbangkan:
Saya bisa menghitung semua matriks adjacency yang mungkin, yaitu, semua matriks simetris 0-atau-1 yang memiliki semua 0 pada diagonal. Namun, ini membutuhkan enumerasi matriks . Banyak dari matriks tersebut akan mewakili grafik isomorfik, jadi ini sepertinya menghabiskan banyak usaha.2 n ( n - 1 ) / 2
Saya bisa menghitung semua matriks kedekatan yang mungkin, dan untuk masing-masing, menguji apakah isomorfik untuk salah satu grafik yang sebelumnya saya hasilkan; jika tidak isomorfik dengan output apa pun sebelumnya, output itu. Ini akan sangat mempersingkat daftar keluaran, tetapi masih membutuhkan setidaknya langkah-langkah perhitungan (bahkan jika kita mengasumsikan grafik cek isomorfisma super cepat), jadi tidak jauh lebih baik dengan metrik saya.
Dimungkinkan untuk menghitung subset dari matriks kedekatan. Secara khusus, jika adalah grafik pada simpul , tanpa kehilangan generalitas, saya dapat mengasumsikan bahwa simpul disusun sehingga . Dengan kata lain, setiap grafik isomorfik ke satu di mana simpul disusun dalam urutan derajat yang tidak menurun. Jadi, cukup untuk menghitung hanya matriks kedekatan yang memiliki properti ini. Saya tidak tahu persis berapa banyak matriks kedekatan seperti itu, tetapi jumlahnya jauh lebih sedikit dari , dan mereka dapat dihitung dengan jauh lebih sedikit darin V = { v 1 , … , v n } deg v 1 ≤ deg v 2 ≤ ⋯ ≤ deg v n 2 n ( n - 1 ) / 2langkah-langkah perhitungan. Namun, ini masih menyisakan banyak redundansi: banyak kelas isomorfisme masih akan dibahas berulang kali, jadi saya ragu ini optimal.
Bisakah kita berbuat lebih baik? Jika saya mengerti dengan benar, ada sekitarkelas ekivalensi dari grafik non-isomorfik. Bisakah kita menemukan algoritma yang waktu operasinya lebih baik daripada algoritma di atas? Seberapa dekat kita denganbatas bawah? Saya terutama peduli tentang ketertelusuran untuk kecil (katakanlah, atau atau lebih; cukup kecil sehingga orang bisa menjalankan algoritma seperti itu sampai selesai), tidak begitu banyak tentang asimtotik untuk besar .∼ 2 n ( n - 1 ) / 2 / n ! n n = 5 n = 8 n
Terkait: Membangun matriks biner yang tidak seimbang (meskipun sayangnya seseorang sepertinya tidak menerima jawaban yang valid).