Thread Reguläre Ausdrücke durch anderes ersetzten...
(59 answers)
Opened by
ppm1
at 2004-02-16 23:16
User since 2003-08-04
5873
Artikel
ModeratorIn
So, hier die Testergebnisse (allerdings nur mit 100_000 Testdurchläufen, wenn ich heute Abend daran denke, alss ich mal übers Wochenende eine größere Menge (Zahlen und Arrayelemente) durchlaufen):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#!/usr/bin/perl
use strict; use Benchmark;
my @text = ('+5000*', 'ein langer Text ohne solche Rechenoperationen...bla fasel laber schwaller sabbel erzähl ...', '8947573849575563542325375869676545343423232425347585764554534232432452673740-', '8947573849575563542325375869676545343423232425347585764554534232432452673740+', '8947573849575563542325375869676545343423232425347585764554534232432452673740*', '8947573849575563542325375869676545343423232425347585764554534232432452673740/', '89475738495755635423253758696765453434232324253475857645545342324324526737401', '-9475738495755635423253758696765453434232324253475857645545342324324526737401', '+9475738495755635423253758696765453434232324253475857645545342324324526737401', '*9475738495755635423253758696765453434232324253475857645545342324324526737401', '/9475738495755635423253758696765453434232324253475857645545342324324526737401', );
for (@text) { print "timethesis für '$_'\n";
timethese(100_000, { A => sub { if (m~(?:-|\+|\*|/)~) {} }, B => sub { if (m~-~ or m~\+~ or m~\*~ or m~/~) {} }, C => sub { if (m~[-+*/]~) {} }, D => sub { if (m~[-]~ or m~[+]~ or m~[*]~ or m~[/]~) {} }, E => sub { if (index($_, '-') > -1 or index($_, '+') > -1 or index($_, '*') > -1 or index($_, '/') > -1) {} }, }); }
Ergebnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
timethesis für '+5000*' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.27 usr + 1.33 sys = 5.59 CPU) @ 17876.30/s (n=100000) B: 6 wallclock secs ( 4.23 usr + 1.30 sys = 5.53 CPU) @ 18083.18/s (n=100000) C: 6 wallclock secs ( 4.59 usr + 0.95 sys = 5.55 CPU) @ 18027.76/s (n=100000) D: 6 wallclock secs ( 4.30 usr + 1.27 sys = 5.56 CPU) @ 17975.91/s (n=100000) E: 6 wallclock secs ( 4.09 usr + 1.44 sys = 5.53 CPU) @ 18079.91/s (n=100000) timethesis für 'ein langer Text ohne solche Rechenoperationen...bla fasel laber schwaller sabbel erzähl ...' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 4 wallclock secs ( 4.00 usr + 1.42 sys = 5.42 CPU) @ 18443.38/s (n=100000) B: 4 wallclock secs ( 4.41 usr + 1.14 sys = 5.55 CPU) @ 18027.76/s (n=100000) C: 5 wallclock secs ( 4.33 usr + 1.27 sys = 5.59 CPU) @ 17876.30/s (n=100000) D: 6 wallclock secs ( 4.42 usr + 1.17 sys = 5.59 CPU) @ 17876.30/s (n=100000) E: 6 wallclock secs ( 4.16 usr + 1.47 sys = 5.62 CPU) @ 17777.78/s (n=100000) timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740-' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.22 usr + 1.19 sys = 5.41 CPU) @ 18494.54/s (n=100000) B: 6 wallclock secs ( 4.25 usr + 1.20 sys = 5.45 CPU) @ 18338.53/s (n=100000) C: 6 wallclock secs ( 4.52 usr + 1.08 sys = 5.59 CPU) @ 17876.30/s (n=100000) D: 4 wallclock secs ( 4.25 usr + 1.28 sys = 5.53 CPU) @ 18083.18/s (n=100000) E: 5 wallclock secs ( 4.31 usr + 1.28 sys = 5.59 CPU) @ 17873.10/s (n=100000) timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740+' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.22 usr + 1.30 sys = 5.51 CPU) @ 18135.65/s (n=100000) B: 6 wallclock secs ( 4.53 usr + 0.89 sys = 5.42 CPU) @ 18439.98/s (n=100000) C: 6 wallclock secs ( 4.22 usr + 1.28 sys = 5.50 CPU) @ 18178.51/s (n=100000) D: 6 wallclock secs ( 4.44 usr + 1.23 sys = 5.67 CPU) @ 17630.47/s (n=100000) E: 5 wallclock secs ( 4.27 usr + 1.30 sys = 5.56 CPU) @ 17975.91/s (n=100000) timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740*' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.08 usr + 1.44 sys = 5.52 CPU) @ 18132.37/s (n=100000) B: 6 wallclock secs ( 4.13 usr + 1.42 sys = 5.55 CPU) @ 18027.76/s (n=100000) C: 6 wallclock secs ( 4.28 usr + 1.28 sys = 5.56 CPU) @ 17975.91/s (n=100000) D: 6 wallclock secs ( 4.22 usr + 1.38 sys = 5.59 CPU) @ 17879.49/s (n=100000) E: 5 wallclock secs ( 4.28 usr + 1.30 sys = 5.58 CPU) @ 17924.36/s (n=100000) timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740/' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 5 wallclock secs ( 4.36 usr + 1.17 sys = 5.53 CPU) @ 18076.64/s (n=100000) B: 6 wallclock secs ( 3.98 usr + 1.53 sys = 5.52 CPU) @ 18132.37/s (n=100000) C: 6 wallclock secs ( 4.47 usr + 1.16 sys = 5.62 CPU) @ 17780.94/s (n=100000) D: 6 wallclock secs ( 4.33 usr + 1.34 sys = 5.67 CPU) @ 17630.47/s (n=100000) E: 4 wallclock secs ( 4.45 usr + 1.19 sys = 5.64 CPU) @ 17727.35/s (n=100000) timethesis für '89475738495755635423253758696765453434232324253475857645545342324324526737401' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 5 wallclock secs ( 4.27 usr + 1.22 sys = 5.48 CPU) @ 18234.87/s (n=100000) B: 6 wallclock secs ( 4.47 usr + 1.05 sys = 5.52 CPU) @ 18129.08/s (n=100000) C: 6 wallclock secs ( 4.28 usr + 1.30 sys = 5.58 CPU) @ 17927.57/s (n=100000) D: 6 wallclock secs ( 4.47 usr + 1.17 sys = 5.64 CPU) @ 17727.35/s (n=100000) E: 6 wallclock secs ( 4.38 usr + 1.20 sys = 5.58 CPU) @ 17924.36/s (n=100000) timethesis für '-9475738495755635423253758696765453434232324253475857645545342324324526737401' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 4 wallclock secs ( 4.36 usr + 1.16 sys = 5.52 CPU) @ 18132.37/s (n=100000) B: 5 wallclock secs ( 4.33 usr + 1.20 sys = 5.53 CPU) @ 18079.91/s (n=100000) C: 6 wallclock secs ( 4.47 usr + 1.16 sys = 5.62 CPU) @ 17780.94/s (n=100000) D: 6 wallclock secs ( 4.33 usr + 1.30 sys = 5.63 CPU) @ 17777.78/s (n=100000) E: 6 wallclock secs ( 4.59 usr + 1.05 sys = 5.64 CPU) @ 17727.35/s (n=100000) timethesis für '+9475738495755635423253758696765453434232324253475857645545342324324526737401' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 4 wallclock secs ( 4.38 usr + 1.08 sys = 5.45 CPU) @ 18338.53/s (n=100000) B: 5 wallclock secs ( 4.11 usr + 1.41 sys = 5.52 CPU) @ 18132.37/s (n=100000) C: 6 wallclock secs ( 4.25 usr + 1.31 sys = 5.56 CPU) @ 17975.91/s (n=100000) D: 6 wallclock secs ( 4.52 usr + 1.19 sys = 5.70 CPU) @ 17534.63/s (n=100000) E: 5 wallclock secs ( 4.23 usr + 1.28 sys = 5.52 CPU) @ 18132.37/s (n=100000) timethesis für '*9475738495755635423253758696765453434232324253475857645545342324324526737401' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.30 usr + 1.19 sys = 5.48 CPU) @ 18231.54/s (n=100000) B: 4 wallclock secs ( 4.49 usr + 1.08 sys = 5.56 CPU) @ 17975.91/s (n=100000) C: 5 wallclock secs ( 4.38 usr + 1.20 sys = 5.58 CPU) @ 17927.57/s (n=100000) D: 6 wallclock secs ( 4.50 usr + 1.13 sys = 5.62 CPU) @ 17777.78/s (n=100000) E: 6 wallclock secs ( 4.47 usr + 1.13 sys = 5.59 CPU) @ 17876.30/s (n=100000) timethesis für '/9475738495755635423253758696765453434232324253475857645545342324324526737401' Benchmark: timing 100000 iterations of A, B, C, D, E... A: 6 wallclock secs ( 4.08 usr + 1.42 sys = 5.50 CPU) @ 18181.82/s (n=100000) B: 6 wallclock secs ( 4.33 usr + 1.23 sys = 5.56 CPU) @ 17979.14/s (n=100000) C: 4 wallclock secs ( 4.24 usr + 1.27 sys = 5.50 CPU) @ 18178.51/s (n=100000) D: 5 wallclock secs ( 4.17 usr + 1.38 sys = 5.55 CPU) @ 18031.01/s (n=100000) E: 6 wallclock secs ( 4.33 usr + 1.22 sys = 5.55 CPU) @ 18031.01/s (n=100000)
Was man eigentlich sieht ist, dass es wirklich furchtbar egal ist, es sei denn diese Operation wäre ein absolutes nachgewiesenes Nadelöhr.
Deshalb sollte man IMHO die Varaiante wählen, die einem vom Lesen / Schreiben / Verstehen am sinnvollsten erscheint.
Für den geübten SAS-Programmier wäre das wohl die Index-Variante, ich würde wahrscheinlich Model A vorziehen. Aber das muss jeder selber wissen.\n\n
<!--EDIT|Crian|1077269569-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
View full thread Reguläre Ausdrücke durch anderes ersetzten...
|