有沒有演算法能夠 如何比較兩棵葉節點相似但不一樣的二叉樹?

時間 2021-06-04 07:11:02

1樓:

先列舉 A 中所有節點,深度優先搜尋,無葉子的節點計算內容的 hash 值,有葉子的節點用內容+子節點的 Hash 值計算 hash 值。這樣為每個節點計算乙個 Hash 值,這個 Hash 值可以唯一代表子樹。

並以 Hash 值為索引,形成一張 Hash Map。資料量大也可以寫資料庫。

然後列舉 B 中所有節點,用同樣演算法計算每個節點的 Hash 值,直接從 Hash Map 中查詢,找到就是有重複,沒找到就是沒有。

2樓:王贇 Maigo

問題一:怎麼定義相似度?

答:看你的需求。

問題二:相似度定義好了之後,如何找到相似的子樹?

答:如果這個相似度能表示成向量的距離或者內積,就比較容易。

可以把每棵子樹對應的向量算出來,放到乙個索引裡;然後再對每棵子樹,找索引中與它的距離最小或內積最大的向量。

我曾經做過「給定乙個向量,求索引中與它距離在一定範圍內的向量」這樣乙個模糊匹配專案,如果這也是題主的需求,可以進一步細談。

問題三:如果我自己定義乙個子樹相似度的函式 f,有沒有演算法能夠找到 A' 和 B' 的一種對應關係,使 f 最大?

答:問題描述不太清楚,你是說給定了f,構造A'和B',還是說給定了A'和B',構造f?

無論是哪一種,在沒有額外限制的條件下都很平凡啊:前者就讓A'和B'完全相同,後者隨便構造就好了啊。

比較兩個大檔案的重複資料,有沒有好的演算法?

龍吟滄海 這個問題在面試中遇到過,我簡單說一下我的思路。我是這樣理解題意的 檔案a,b,分別有x,y行資料,每一行是乙個字串,現在想找到a和b中重複的資料。這個問題其實是海量資料面試中非常常見的乙個場景,更細化一點的話可能會要求使用不超過多少的記憶體,在這裡不贅述。思路1 使用bloom filte...

根式分母有理化有沒有比較好的演算法?

考慮代數數 a,想要用 a 的多項式表示 1 a。方法是尋求 a 的乙個零化多項式 g x xf x 1,則 1 a f a 譬如 1 cbrt 2 cbrt 2 被 x 3 2 零化,也就是被 x x 2 2 1零化,所以 1 cbrt 2 cbrt 2 2 2。考慮代數數 a,b,則 a b 也...

如何能夠較好掌握飛控系統設計?有沒有比較好的書籍推薦?

3轉眼已經2019年了。有興趣從事無人機行業或正在從事無人機行業的工程師數量似乎也隨著資本的退去而減少。多旋翼飛行器設計與控制 這本書凝結了北航眾多老師與學生的心血,通篇覆蓋了多旋翼飛行器設計的大多數知識點。從多旋翼飛行器的系統構成到導航系統,控制系統的設計 多旋翼飛行器的建模與引數辨識方法均有不同...