Schrift
[thread]6059[/thread]

größte Zahl rausbringen?



<< >> 6 Einträge, 1 Seite
Andreas
 2004-02-04 17:54
#79813 #79813
User since
2003-09-24
111 Artikel
BenutzerIn
[default_avatar]
Hi an alle,

wahrscheinlich total einfach, aber ich habe gerade eine Blackout.

bekomme aus einer Schleife heraus 5 Zahlen nacheinander, z.B.:

21
23
25
22
24

so jetzt möchte ich die höchste Zahl rausbringen und mir diese in einer Variable merken, in dem Fall die 25.

Kann mir jemand helfen?

Danke

andreas
ptk
 2004-02-04 17:57
#79814 #79814
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
use List::Util 'max'

natuerlich List statt Scalar...\n\n

<!--EDIT|ptk|1075914491-->
[E|B]
 2004-02-04 18:41
#79815 #79815
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo!

Code: (dl )
1
2
3
my @array = qw(35 73 745 23 85);
my $zahl = (sort{$a <=> $b} @array)[-1];
print $zahl;
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
ptk
 2004-02-04 19:14
#79816 #79816
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Verwendung von sort ist idiomatisch, aber nicht schnell. Ich habe mal drei Funktionen gebenchmarkt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use Benchmark qw(cmpthese);
use List::Util qw(max);

@a = qw(35 73 745 23 85);
@a = (@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,);
cmpthese(-1, {
"max" => sub { my $max = max @a },
"linear" => sub {
my $max = $a[0];
for (@a) {
$max = $_ if $_ > $max;
}
},
"sort" => sub {
my $max = (sort{$a <=> $b} @a)[-1];
}
}
);

Das Ergebnis hier ist:
Code: (dl )
1
2
3
4
           Rate linear   sort    max
linear 49778/s -- -23% -92%
sort 64869/s 30% -- -90%
max 649176/s 1204% 901% --

Wobei der Unterschied zwischen sort und max nicht mehr so gross ist, wenn man @a nur einfach verwendet. Interessant ist auch, dass linear langsamer als sort ist, obwohl hier ein O(1)-Algorithmus gegen einen O(n logn)-Algorithmus antritt. Anscheind ist es sehr entscheidend, wieviel Code ausserhalb der Opcode-Loop ausgefuehrt wird...
pq
 2004-02-04 19:39
#79817 #79817
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=ptk,04.02.2004, 18:14]Interessant ist auch, dass linear langsamer als sort ist, obwohl hier ein O(1)-Algorithmus gegen einen O(n logn)-Algorithmus antritt. Anscheind ist es sehr entscheidend, wieviel Code ausserhalb der Opcode-Loop ausgefuehrt wird...[/quote]
mach mal @a etwas grösser. das geht auch etwas einfacher, als ein paar
mal @a hintereinander zu schreiben. z.B.
@a = (@a) x 1000;
dann wird linear schneller sein als sort.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2004-02-05 17:39
#79818 #79818
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei 5000 Elementen ist linear gerade mal 5% schneller (Linux Redhat 8.0, perl 5.8.0, 2.4 GHz). Aber bei noch groesseren Listen gewinnt linear immer mehr...
<< >> 6 Einträge, 1 Seite



View all threads created 2004-02-04 17:54.