簡體   English   中英

散列子圖的高效算法?

[英]Efficient algorithm for hashing subgraphs?

是否有一種算法可以散列給定圖的子圖(由節點和邊組成)? 類似地,我正在談論的特定圖是一個分子網絡,哈希該網絡子圖的目的是查看是否給定了另一個網絡,是否有一個特定子圖與先前哈希的子圖相匹配。

我不關心查找所有子圖本身的運行時間。 我關心給定一個特定的散列子圖和另一個子圖,是否可以發現子圖是否是我在O(1)時間內見過的子圖。

如果您的圖是非循環的(具有可變拆分級別的樹),則可以在圖的每個頂點(節點)中保留一些值,即“此子樹的哈希”。

為子樹計算哈希是簡單的bt遞歸算法,例如:

// Initial value ~0 meaning "need to compute"
uint32_t subtree_hash(node *p) {
  for(int attempts = 0; p->hash == ~0; attempts++) {
    p->hash = compute_hash(p->value) + attempts;
    foreach node *child in (p->children) {
      p->hash = ((p->hash >> 7) | (p->hash << (32 - 7))) + subtree_hash(child);
  }
  return p->hash; // never ~0
}

假設頂點具有整數ID,我將使用通常用於對整數對數組進行哈希處理的任何哈希算法,以某種定義的順序(例如,字典順序)對子圖中的邊列表進行哈希處理。 此列表中的邊表示為具有固有順序的一對頂點,因此,如果要表示的圖形實際上具有無向邊,則還需要以某種順序(例如,從最小到最大)對每個邊內的一對頂點進行排序)。

沒有用於散列子圖的有效算法,否則將認為圖匹配是多項式。

由於分子圖具有有限的連通性,因此存在一些特定的算法。

谷歌搜索“規范分子簽名”,我已經找到了這個在線工具

暫無
暫無

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

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