簡體   English   中英

在較小圖上但有大量測試的圖同構

[英]Graph isomorphism on smaller graphs but large number of tests

圖同構是計算機科學中一個經過充分研究的問題,但尚不知道多項式時間算法(有一些主張,但尚未被證明)。

我必須測試兩個圖的同構性,但就我而言,問題略有不同。 圖的大小小於或等於10或11,即頂點數量較少。 圖的邊緣可以是密集的或稀疏的,因此在邊的數量上沒有限制。 這種成對測試(同構性檢查)的數量大約為10 ^ 8。

如果有人可以提出一些最適合這種情況的算法。 如果算法可以並行化也很好。

任何幫助表示贊賞。

這個答案依賴於以下事實:對於所有同構檢查,兩個圖之一將是相同的。 您可以為每個節點計算各種各樣的數字,這些數字在重新標記下不變:

  • 節點的度數
  • 鄰居的度數之和
  • 鄰居的鄰居度數之和
  • 對於度數為k的鄰居,其鄰居度數之和
  • 包含此節點的長度為k的循環數
  • 從該節點到任何其他節點的最大距離
  • 距該節點距離k的節點數
  • ...

您可以獲取參考圖並為每個節點計算其中一些數字。 幸運的是,您會發現一組函數,這些函數的計算成本並不高,並且這些函數所產生的數字將唯一地標識每個節點。 您甚至可以將這些數字散列為一個數字。 在這種情況下,您可以按以下方式處理每個輸入圖:通過計算這些數字及其每個節點的哈希值,可以快速確定參考圖中的哪個節點對應於輸入圖的每個節點(如果有)。 節點之間一一對應后,檢查所有邊緣是否合適。

如果找不到足夠便宜的唯一描述每個節點的函數集,我希望在大多數現實世界的圖中(即,不是專門為高對稱性構造的),您仍然會獲得相當小的等價類,因此請檢查所有每個類中可能的排列對於您的應用程序來說仍然足夠便宜。

就像一個想法:如果性能在這里是一個真正的問題,您甚至可以嘗試將分析結果轉換為定制的程序代碼。 因此,對於每個參考圖,您都將讓您的應用程序編譯一小段代碼,然后可以動態加載該代碼,以便利用編譯器優化的機器代碼可以為您提供的所有功能來執行這些檢查。 不確定是否值得付出努力,但是我認為這可能是一種有趣的方法。

高度對稱的圖可能需要更多的工作。 您可以嘗試預先確定圖的同構。 例如,如果可以在不影響圖結構的情況下互換v1和v2的標簽,則對於您處理的每個輸入圖,如果不確定是否將給定頂點映射到v1或v2,您都知道不會無關緊要,因此您不必嘗試這兩種選擇,而可以簡單地任意選擇v1。 這大大減少了您必須檢查的排列數量。

如果您有一種方法可以快速分辨出從v1到v2有多少條邊,則可以快速生成兩個圖的小表示並進行蠻力檢查。 但是,如果您不能快速瀏覽所有內容,那意味着您甚至無法有效地閱讀輸入內容,而不是在談論檢查同構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM