0
我編寫了一個程序,用於從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;
@[email protected];
}
}
}
}
}
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放入數組中。這樣做第二對將是6和16.我想重複這個過程N次(例如N = 4)。我以爲要在while(<DAT>)
之前加上「DATA ABSORTION」中的另一個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
究竟應該在哪裏放置'say join「,@blackPair;'代碼行在我的代碼?我認爲這是一個好主意 – 2013-03-15 17:32:28
用它來代替你說的foreach(@blackPair){說}' – mob 2013-03-15 17:42:59