2012-01-04 19 views
1

現在、Graphを使用していますが、与えられた頂点のリストによって誘導された元のグラフの部分グラフを作成する方法はありません。ノードリストによって誘導されたグラフの部分グラフを作成する

私はそれがグラフのアクセサを使用しないスタブを書いたが、

はここに私のコードです:

# subgraph ($graph, @node_list); 
# return subgraph (with the same setup) 
# induced by node list 
sub subgraph { 
    my $self = shift; 
    my $new = $self->new; 
    my @edges; 
    foreach my $v(@_) { 
     $self->has_vertex($v) or next; 
     $new->add_vertex($v); 
     foreach my $u(@_) { 
      $self->has_edge($u, $v) and push @edges, $u, $v; 
     }; 
    }; 
    $new->add_edges(@edges); 
    return $new; 
}; 

注:

  • $Graph->new挙動はしかしとして、文書化されていないですグラフのソースは属性をコピーするが、頂点/エッジはコピーしないことを示しています。

  • CPANの機能要求が既にあります:https://rt.cpan.org/Ticket/Display.html?id=65497

ので、いくつかの他のモジュール(おそらくXS)がある、または私はGraphにパッチを適用する必要があり、または誰もが自分自身と私がすべきグラフのクラスを書き込み、それも?あなたはすべての頂点のリストとしたい頂点のリストを持っている場合は

答えて

2

質問からgithubへのコードを掲載しました(約10個の単体テストがあります)。

https://github.com/dallaylaen/perl-Graph-Subgraph

私は批評、バグレポートや複数のテストケースをいただければ幸いです。それがいつかメインモジュールに入ることを願っています。

更新日:現在、CPAN:Graph::Subgraphで利用可能です。しかし、上記の段落はまだ成立しています。

0

、2つの間の差集合を計算し、私が以前にダウン剪定するために、このようsomethiingを使用しました

$graph->delete_vertices(@unwanted_vertices); 

使用大きなグラフ。

+0

Hm、これは '$ graph-> edges' <<' $ subgraph-> nodes ** 2'の方が良い解決策でなければなりません。しかし、私はまだ元のグラフをコピーして、それを台無しにすることを好まないでしょう。 – Dallaylaen

関連する問題