boyutundaki tüm yönlendirilmemiş grafikleri numaralandırmak istiyorum , ancak her izomorfizm sınıfının yalnızca bir örneğine ihtiyacım var . Başka bir deyişle, izomorfik olmayan (yönlendirilmemiş) tüm grafikleri köşelerinde sıralamak istiyorum. Bunu nasıl yapabilirim?
Daha kesin bir ifadeyle, bir yönsüz grafikler bir dizi üretecektir bir algoritma isteyen , aşağıdaki özelliği ile: Her yönsüz grafik için G ile N köşe, dizin vardır I öyle ki G, izomorf için G i . Algoritmanın mümkün olduğunca verimli olmasını istiyorum; Başka bir deyişle, umurumda olan metrik, bu grafikler listesini oluşturmak ve yinelemek için harcanan zamandır. İkincil bir amaç, algoritmanın uygulanamayacak kadar karmaşık olmaması durumunda iyi olur.
Her izomorfizm sınıfından en az bir grafiğe ihtiyacım olduğuna dikkat edin, ancak algoritmanın birden fazla örnek üretmesi sorun değil. Özellikle, çıktı sırasının iki izomorfik grafik içermesi sorun değil, eğer böyle bir algoritma bulmayı kolaylaştırır veya tüm olası grafikleri kapsadığı sürece daha verimli algoritmalar sağlar.
Uygulamam aşağıdaki gibidir: büyüklüğündeki tüm grafiklerde test etmek istediğim bir program var . İki grafiğin izomorfik olması durumunda, programımın her ikisinde de aynı şekilde davranacağını biliyorum (her ikisinde de doğru ya da her ikisinde de yanlış olacak), bu nedenle her izomorfizm sınıfından en az bir temsilciyi numaralandırmak yeterlidir ve sonra test bu girişler üzerinde program. Başvurumda n oldukça küçük.
Bazı aday algoritmaları düşündüm:
Olası tüm bitişik matrisleri, yani köşegenler üzerinde 0'ların hepsine sahip olan tüm simetrik 0 veya 1 matrisleri numaralandırabilirim. Bununla birlikte, bu 2 n ( n - 1 ) / 2 matrisin numaralandırılmasını gerektirir . Bu matrislerin birçoğu izomorfik grafikleri temsil edecek, bu yüzden çok çaba harcıyor gibi görünüyor.
Tüm olası bitişik matrisleri numaralandırabilirim ve her biri için, daha önce çıktığım grafiklerden herhangi birinin izomorfik olup olmadığını test edebilirdim; Daha önce çıktısı olan herhangi birşeye izomorfik değilse, çıktısını alın. Bu, çıktı listesini büyük ölçüde kısaltacaktır, ancak yine de en az hesaplama basamağı gerektirmektedir (grafiğin izomorfizm kontrolünün süper hızlı olduğunu varsaysak bile), bu yüzden benim ölçümümden daha iyi değil.
Bir bitişik matris alt kümesini saymak mümkündür. Özel olarak, bir grafiktir n köşe V = { v 1 , ... , v , n } ben köşe düzenlenmiştir varsayabiliriz genelliği kaybetmeden bu yüzden ° h 1 ≤ ° h 2 ≤ ⋯ ≤ ° h , n. Başka bir deyişle, her grafik, köşelerin azalan olmayan bir dereceye göre düzenlenmiş olduğu bir bölgeye izomorfiktir. Bu nedenle, yalnızca bu özelliğe sahip olan bitişik matrisleri numaralandırmak yeterlidir. Tam olarak ne kadar bitişik matrisin olduğunu bilmiyorum, ama daha az sayıda ve 2 n ( n - 1 ) / 2 adımdan daha azıyla sayılabilir . hesaplama. Ancak, bu hala çok fazla fazlalık bırakıyor: birçok izomorfizm sınıfı hala birçok kez ele alınacak, bu yüzden bunun optimal olduğuna şüpheliyim.
Daha iyisini yapabilir miyiz? Doğru anlarsam, yaklaşık izomorfik olmayan grafiklerin denklik sınıfları. Çalışma süresi yukarıdaki algoritmalardan daha iyi olan bir algoritma bulabilir miyiz? ∼ 2 n ( n - 1 ) / 2 / n'ye ne kadar yaklaşabiliriz ? alt sınır? Öncelikle küçük n için izlenebilirliğe önem veriyorum (örneğin, n = 5 veya n = 8ya da öylesine; bir makul bir tamamlanma Böyle bir algoritma, çalıştırabilir kadar küçük), o kadar çok büyük için asimptotikler ilgili .
İlgili: Eşdeğer olmayan ikili matrisler oluşturmak (ne yazık ki geçerli bir cevap almış gibi görünmese de).