Сортировка элементов в структуре perl n x n - PullRequest
1 голос
/ 30 мая 2019

Мне нужно найти следующего соседа, используя алгоритм euklid-distance-distance.

Даны два хэша с каждыми 100 элементами в этом формате:

$hash{$i}{price}
$hash{$i}{height}

Мне нужно сравнить каждыйхэш-элементы друг с другом, так что мой результат в матрице 100 х 100.

После этого моя матрица должна быть отсортирована по следующим правилам:

$hash{$i,$j}  {lowest_euklid_distance}
$hash{$i,$j+1}{lowest_euklid_distance + 1}
$hash{$i,$j+2}{lowest_euklid_distance + 2}
.
.
$hash{$i+1,$j}{lowest_euklid_distance}
$hash{$i+1,$j}{lowest_euklid_distance + 2}
.
.
$hash{$i+n,$j+n}{lowest_euklid_distance+n}

Моя проблема - правильно отсортировать эти элементы.
Любые советы?

Заранее спасибо.

/ edit: добавление дополнительной информации:

Я создаю расстояние с помощью следующей подпрограммы:

sub euklid_distance{
    #w1 = price_testdata
    #w2 = height_testdata
    #h1 = price_origindata
    #h2 = height_origindata

    my $w1 = trim($_[0]);
    my $w2 = trim($_[1]);
    my $h1 = trim($_[2]);
    my $h2 = trim($_[3]);

    my $result = (((($w2-$w1)**2)+(($h2-$h1)**2))**(1/2));
    return $result;     
    }

Я получаю тест и исходные данные из двух отдельных списков.

Результат с матрицей 100x100 создается с помощью следующего кода:

 my %distancehash;
 my $countvar=0;

for (my $j=0;$j<100;$j++){
    for (my $i=0;$i<100;$i++){
      $distancehash{$countvar}{distance}      = euklid_distance( $origindata{$i}{price}, $testdata{$j}{price}, $origindata{$i}{height}, $testdata{$j}{height} );
      $distancehash{$countvar}{originPrice}   = $origindata{$i}{price};
      $distancehash{$countvar}{originHeight}  = $origindata{$i}{height};
      $distancehash{$countvar}{testPrice}     = $testdata{$j}{price};
      $distancehash{$countvar}{testHeight}    = $testdata{$j}{height};
      $countvar++;
     }
    }

, где $ j переходит над тестовыми даннымии $ i за исходные данные.

Моя цель - создать новый хеш, отсортированный по наименьшему расстоянию от текущего $ j по возрастанию до самого высокого.

...