Thread Schleifendurchläufe berechnen (12 answers)
Opened by qwe123qwe at 2014-02-04 13:54

payx
 2014-02-05 17:32
#173392 #173392
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo qwe123qwe

2014-02-04T18:43:49 qwe123qwe
mitzählen will ich eben nicht. Da es ineinander geschachtelte Schleifen gibt (die Anzahl also multipliziert wird) , hab ich bei Testen schon mal 25000 Durchläufe "geschafft" und das hätte dann ca. 5 Tage gedauert :)

Verschachtelt ist die Schleife in meinem Entwurf doch auch. Sie dürfte Deiner Schleife ähneln, wenn ich Dein Ursprungsposting richtig verstanden habe.

150.000 Durchläufe nur zum Mitzählen dauern auf meinem Rechner < 2 Hundertstel Sekunden.

Mein Vorschlag wäre dann dahingehend erweiterbar, dass Du einfach zwei Mal durch die Schleife iterierst, einmal als dry run und dann, wenn eine bestimmte Zahl von Durchläufen nicht überschritten wird, produktiv, z.B. so:

Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;

use Time::HiRes qw( gettimeofday tv_interval );

my $t0 = [ gettimeofday ];

my ($von, $bis, $schritt, $count) = (10, 30, 4, 25000);

my $schleifendurchlaeufe = schleife($von, $bis, $schritt, $count, 'dryrun!');

print "Anzahl Schleifendurchlaufe: $schleifendurchlaeufe\n";

if ($schleifendurchlaeufe <= 5000) {
    my $ergebnis = schleife($von, $bis, $schritt, $count);
    print "Ergebnis: $ergebnis\n";
}
else {
    print "Warnung: Kein Ergebnis ermittelt (zu viele Durchläufe).\n";
}

print "Time elapsed: " . (tv_interval( $t0 )) . " seconds\n";

sub schleife {
    
    my ($von, $bis, $schritt, $count, $dryrun) = @_;
    
    my $durchlauefe;
    
    for (1..$count) {
        for (my $i = $von; $i <= $bis; $i+=$schritt) {
            
            if ($dryrun) {
                $durchlauefe++;
            }
            else {
            
                # Hier die Befehle, die in der Schleife ausgeführt werden sollen
                
            }
        }
    }
    
    if ($dryrun) {
        return $durchlauefe;
    }
    else {
        return "Befehle in der Schleife ausgeführt!";
    }
}


Output:
Code: (dl )
1
2
3
Anzahl Schleifendurchlaufe: 150000
Kein Ergebnis ermittelt (zu viele Durchläufe).
Time elapsed: 0.018097 seconds

bzw. wenn ich $count auf 250 setze:
Code: (dl )
1
2
3
Anzahl Schleifendurchlaufe: 1500
Ergebnis: Befehle in der Schleife ausgeführt!
Time elapsed: 0.000971 seconds

Grüße
payx

View full thread Schleifendurchläufe berechnen