Desktop
Website
Multimedia
Database
Security
Enterprise
Fråga : Perl skrivar att ta för long
Jag har en skriva som gör en raddasortering som baseras på ”ett enkelt flyttninggenomsnitt”, som baseras i sin tur på 100s av samlingar. Programet spenderar en raddatid som utför mathen. Jag måste rusa upp det. Är här kodifiera:
------------------HUVUDSAKLIG
package; strikt
use;
sub simple_moving_avg;
my $length_of_sma = 4; @price_array
my = qw/
11.3
11.25
11.82
11.64
11.19
11.48
11.37
10.84
10.51
10.76
10.8
11.25
11.36
11.34
11.59
11.41
11.18
11.11
11.72
11.57
/;
foreach min (@price_array) $i {trycket för
”mig: $i \ n”;
my för
} $sma = 0; min
for ($count = 100000; $count->= 1; $count--) {nr. pop av 4 värderar ”$length_ma-"
$sma = simple_moving_avg (\ @price_
array, $len
gth_of_sma
);
/>print ”: $sma \ n”;
exit; simple_moving_avg för
sub {min
$pointer_array = $_ [0]; min
$length_ma = $_ [1]; min
$sum = 0;
min @tmp = @$pointer_array;
för
för (mitt $count = $length_ma; $count->= 1; $count--) {min
$value = pop (@tmp);
om (definierad $value) {
$sum = $value + $sum; min
för
för
}} $ma = sprintf (”%.2f”, ($sum/$length_ma));
återgång $ma;
för
}--------------------------
Here är resultatet från rinnande DProf:
Total förflöt Time = 1.987965 Seconds
User+System Time sekunden för = 2.194965 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls/appellen Csec/c Name
108. 2.377 2.377 100000 0.0000 HUVUDSAKLIGA 0.0000:: strikt simple_moving_avg
0.00 - -0.000 1 - -:: huvudsaklig import
0.00 - -0.000 1 - -:: Strikt BEGIN
0.00 - -0.000 1 - -:: HUVUDSAKLIG bits
0.00 - -0.000 1 - -:: BEGIN
--------
My ifrågasätter är: Kan denna perl-subroutine förbättras upon (ExclSecen behöver att klippas av 50% åtminstone)? Oförmögen förmiddag I att ändra samlingen som passeras in i suben. Om kodifiera inte kan markant förbättras på skulle det, var snabbare till programet för appellA.C. ++ (I-förmiddagen som lärer C++) eller montörn? Vad skulle det kodifierar är? Många thanks.
" klar "
Svar : Perl skrivar att ta för long
undersimple_moving_avg {
min ($pointer_array, $length_ma
) =@_;
mitt $sum = 0;
_ för $sum += $ för @ {$pointer_array} [0. $length_ma-1
];
återgång sprintf " %.2f ", $sum/$length_ma;
}
Andra lösningar
Hur många skrivar av sidor r där i SQL-server?
OMA och OWA
Missa över mellan GLÅMIGA anslutningar för aktiv/för aktiv på en Cisco Router
ASP.Net tappar skuggar verkställer
Vad är ämna av ”den MAKEFILE” makroen i en makefile?
Ett rengöringsdukundantag uppstod därför att en HTTP 401 - det obehöriga svaret mottogs från okända
Funktionen måste använda en Updateable Query
PHP passerar parametrar till den on-line aktiveringssidan
Ethernetövergångskabel förbinder
döda ett processaa vid styrka, hur kan jag