2列のファイルからデータをロードし、アルゴリズム計算を行ってから、この係数を持つ要素のペアをファイルに書き込み、それらを。という配列に配置するプログラムを作成しました@blackPair
。ファイルからデータを取得するアルゴリズムをN回繰り返したいのですが、@blackPair
配列にあるデータは繰り返しません。
私はこのようなことを考えました:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $iter;
my $startNode;
my $endNode;
my %k;
my %end;
my %node;
my %edge;
my @blackPair=();
my $counts=0;
my $inputfile = "file3";
################# DATA ABSORTION
open(DAT,$inputfile) || die("Could not open file!");
while(<DAT>)
{
my ($entry) = $_;
chomp($entry);
my ($startNode, $endNode) = split(/ /,$entry);
$k{$endNode}++;
$k{$startNode}++;
$edge{$startNode}{$endNode}=1;
$edge{$endNode}{$startNode}=1;
}
################# ALGORITHM
my $minCentrality=2;
foreach my $i (keys %edge) {
foreach my $j (keys %{$edge{$i}}){
my @couple =($j,$i);
if($i<$j){
if (($k{$i}-1) !=0 && ($k{$j}-1) !=0){
my $triangleCount=0;
@couple=($i,$j) if ($k{$i}<$k{$j});
foreach (keys %{$edge{$couple[0]}}){
$triangleCount++ if exists $edge{$couple[1]}{$_};
}
my $centrality=($triangleCount+1)/($k{$couple[0]}-1);
if ($centrality<$minCentrality){
$minCentrality=$centrality;
@blackPair=@couple;
}
}
}
}
}
foreach (@blackPair){
say;
}
Close(DAT);
ファイルは次のとおりです。
1 2
1 3
1 4
1 5
1 6
1 9
2 3
4 5
5 9
6 7
6 8
6 16
7 8
9 10
9 11
10 11
10 12
10 14
11 12
11 13
12 13
12 14
14 15
16 17
16 18
17 18
17 19
18 19
18 20
19 20
に表示される最初のペア@blackPair
は6と1です。それらを見つけた後、プログラムが検索を再開しますが、ペア1と6を配列にチャージしないようにします。2番目のペアは6と16になります。このプロセスをN回繰り返したい(たとえば、N = 4)。while(<DAT>)
「DATAABSORTION」の前にもう1つ、のwhile(counts<=4){
中に入れようと思いましwhile(<DAT>)
たif(<DATA> != @blackPair){
。私が思ったことはあります
while(counts <= 4) {
while(<DAT>)
{
if(<DAT> != @blackPair){
my ($entry) = $_;
chomp($entry);
.....
}
#### ALGORITHM
counts++;
}
しかし、それは機能しません。何か助けはありますか?
4回の反復の後@blackPair
、次のペアが存在するはずです。
6 1
16 6
9 1
9 5