#!/usr/bin/perl -w use 5.032; $|++; # Random Data 3D written to find a minimum my @data; for my $i (0..1000){ for my $j (0..1000){ for my $k (0..1000){ $data[$i][$j][$k] = rand(); } } } say "Data readed"; # búsqueda MIN por retículas my $t0 = time(); my $unit = 501*501*501; my $c = 0; my $min = 9e99; my ($ii, $jj, $kk); for (my $i=0; $i<=1000; $i += 2){ for (my $j=0; $j<=1000; $j += 2){ for (my $k=0; $k<=1000; $k += 2){ $c++; next unless (defined $data[$i][$j][$k]); print "\r" . qw( · - o \ | / )[ $c % 6 ] . " |" . "=" x int(50*$c/$unit) . ">" . " " x int( 50*($unit-$c)/$unit) . "| ". int ( 100 * $c / $unit ) . "% "; if ($data[$i][$j][$k] < $min){ $min = $data[$i][$j][$k]; $ii = $i; $jj = $j; $kk = $k; } } } } say ""; say "$ii $jj $kk -> $min"; say "Local search:"; my ($iii, $jjj, $kkk); for my $i ($ii-1 .. $ii+1){ for my $j ($jj-1 .. $jj+1){ for my $k ($kk-1 .. $kk+1){ next unless (defined $data[$i][$j][$k]); if ($data[$i][$j][$k] <= $min){ $min = $data[$i][$j][$k]; $iii = $i; $jjj = $j; $kkk = $k; } } } } say "$iii $jjj $kkk -> $min"; say "Elapsed time = ", time()-$t0, " seconds"; exit 1; # print "\r" . qw( · - o \ | / )[ $c % 6 ] . # " |" . "=" x int(50*$c/$Bytes) . ">" . # " " x int(50*($Bytes-$c)/$Bytes) . "| " . # int(100*$c/$Bytes) . "% "; __END__ Reticula search is used to make a brute force search over a 3D field