sub burn_node
{ my $self = shift;
my $node = shift;
my $p = shift;
# If we've already burned enough nodes, return if ($self->{num_nodes} >= $self->{n}) {
return;
}
$self->{vertices}{$node} = 1;
my $dist = new Clair::Statistics::Distributions::Geometric;
my $net = $self->{net};
my $oldgraph = $self->{oldnet}->{graph};
# First, add the node to the network $self->{num_nodes}++;
my $num_out_links = $dist->get_random_value($p);
my @successors = $oldgraph->successors($node);
my @nodes = $self->get_random_nodes($num_out_links, subset =>\@ successors);
foreach my $new_node (@nodes) {
if (not defined $self->{vertices}{$new_node}) {
$self->burn_node($new_node, $p);
}
} } |