【问题标题】:Creating a subgraph of a graph induced by node list创建由节点列表诱导的图的子图
【发布时间】:2012-01-04 15:26:04
【问题描述】:

我目前正在使用Graph,但是它缺少一种方法来创建由给定顶点列表引起的原始图的子图。

我写了一个存根,它使用 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;
};

注意:

那么,是否有其他模块(可能是 XS),或者我应该修补 Graph,还是每个人都自己编写一个图形类,我也应该这样做?

【问题讨论】:

    标签: perl subgraph


    【解决方案1】:

    所以我已经将问题中的代码发布到了 github(大约有 10 个单元测试)。

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

    我将不胜感激批评、错误报告和更多测试用例。希望有一天它会进入主模块。

    更新:现在可通过 CPAN 获得:Graph::Subgraph。然而,上述段落仍然成立。

    【讨论】:

      【解决方案2】:

      如果你有一个所有顶点的列表和你想要的顶点列表,那么计算两者之间的集合差并使用

      $graph->delete_vertices(@unwanted_vertices);
      

      我以前用过这样的东西来修剪一个大图。

      【讨论】:

      • 嗯,$graph->edges $subgraph->nodes ** 2 时,这一定是一个更好的解决方案。但是,我仍然希望复制原始图表而不是破坏它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 2016-01-01
      相关资源
      最近更新 更多