use strict;
use warnings;
use Data::Dumper;
my $data = {
1 => [5],
2 => [2, 3, 4, 7, 8],
3 => [1, 3, 4, 7, 9],
4 => [1, 2, 4, 8],
5 => [1, 6, 7, 9],
6 => [1, 5, 8],
8 => [3, 4],
9 => [1, 4, 6, 8]
};
my $cnt = keys %{ $data };
my $p = {};
my $t = {};
my @keys = keys %{ $data };
for (@keys) {
$p->{$_} = 1 / $cnt;
$t->{$_} = 0;
}
for (0..$cnt - 1) {
for (@keys) {
my $graphs = $data->{$_};
my $graphs_count = @{ $graphs };
for my $graph (@{ $graphs }) {
$t->{$graph} += $p->{$_} / $graphs_count;
}
}
my $sum = 0;
for (@keys) {
$p->{$_} = (0.15 / $cnt) + 0.85 * $t->{$_};
$t->{$_} = 0;
$sum += $p->{$_};
}
for (sort keys %{ $p }) {
$p->{$_} /= $sum;
}
}
print Dumper $p;