簡體   English   中英

樹或圖收縮

[英]Tree or Graph contraction

我目前正在使用Python解決“樹摘要”問題。 我的樹由具有權重和子級的節點組成。 一個例子

Node(
    name: "Parent", weight: 20, children: {[
        Node(name: "Child 1" weight: 10, children: {[]},
        Node(name: "Child 2", weight: 10, children: {[
           Node(name: "Grandchild 1", weight: 5, children: {[]}
        ]}
     ]})

我對找到所有可以通過邊緣收縮獲得的圖感興趣。 當我收縮兩條邊時,舊頂點將替換為權重為舊頂點總和的新頂點。 例如,將子代2與孫子1簽約將導致:

Node(
    name: "Parent", weight: 20, children: {[
        Node(name: "Child 1" weight: 10, children: {[]},
        Node(name: "(Child 2, Grandchild 1)", weight: 15, children: {[]}
     ]})

當然,這只是一種可能的邊緣收縮。 即使對於這棵小樹,也會有更多的收縮(例如(child 1, child 2)(child 1, parent)(child 2, parent) )。

對於這些新樹中的每一個,我都需要再次查找通過收縮一個節點而獲得的所有樹(最終,問題是將n節點樹簡化為m節點樹)。

我目前正在“強行強制”,遞歸調用edge_contract()直到到達正確節點大小的樹。 但是代碼需要能夠在中等大小的樹(約25-50個節點)上工作,而當前的實現則不能。

這種類型的樹收縮解決了嗎? 有什么好的方法可以解決這個問題?

每次變換樹時,都在確定要收縮的邊集。 在您給出的示例中,集合僅包含從“子代2”到“子代1”的一條邊。

如果您有興趣查找通過收縮邊可以獲得的所有樹,則該值為2 ^ d(其中d是原始樹中邊的總數)。 如您所說,您要將n節點樹轉換為m節點樹。 如果您已經知道“ m”,則需要從具有m-1個元素的2 ^ d個集合中查找所有集合(因為m個節點樹將具有m-1個邊)。

如果您僅對m節點樹的子集感興趣,則隨機選擇所需數量。

暫無
暫無

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

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