1
今天早上我偶然發現了Perl's Graph library。我曾經寫過一個快速程序來查找有向圖中的所有(弱)連接組件。這是該計劃。支持邊緣標籤的圖庫
use strict;
use Graph;
use Data::Dumper;
my $g = Graph->new();
foreach my $file(@ARGV)
{
open(my $IN, "<", $file) or die("cannot open '$file'");
while(my $line = <$IN>)
{
chomp($line);
my($source, $target, $edge_label) = split(/\t/, $line);
$g->add_edge($source, $target);
}
close($IN);
}
my @clusters = $g->weakly_connected_components();
print Dumper(\@clusters);
...並且輸入數據文件如下所示。
n1 n2 some_data_encoded_in_a_label
n1 n3 some_data_encoded_in_a_label
n4 n5 some_data_encoded_in_a_label
...
...其中第一列是源節點標籤,第二列是目標節點標籤,第三列是邊緣標籤。我有幾個數據文件,每個文件都有數以萬計的邊界。
這個快速骯髒的腳本完成了這項工作,但有幾件事本來不錯。
- 的連接的組件由weakly_connected_components方法是簡單地節點的標籤陣列返回的,所以這些節點之間的連接丟失。
- 即使該方法返回了一組節點和一組邊,該庫不允許存儲與每個邊相關的標籤或數據,這是不方便的。
是否有任何替代圖庫包含這些特徵中的任何一個或兩個?實施語言不是很重要 - 我開到C/C++,Python和Perl中,R等
+1是的,我想這是第二個問題一個體面的解決辦法。如果有一種方法不僅可以獲得節點,而且還可以獲得每個連接組件的邊緣,我真的很感興趣。 –
另外,由於這是一個有向圖,因此您只需要添加標籤一次。 A→B的邊緣與B→A的邊緣不同,並且會有不同的標籤。 –