Thread Algo für eine Prozentuale Warscheinlichkeit
(11 answers)
Opened by SirLant at 2003-09-06 19:31
die { } geht nicht nur um die for-Schleife, sondern auch um eine my-deklaration - und die soll außerhalb nicht mehr sichtbar sein.
Ich hab den code jetztausformuliert (und ncoh ein bissal verändert, weil noch zwei drei kleinere Fehler drin waren) Der Code ist zwar nicht der beste stil und man kann noch ein bissal optimieren, aber ich denke, daß das Optimum maximal um 40% schneller ist. 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 53 54 55 #!/usr/bin/perl use strict; use warnings; my @elemente=( [15,'Artikel1'], [10,'Artikel2'], [20,'Artikel3'], [80,'Artikel4'], [35,'Artikel5'], [10,'Artikel6'] ); # Array festgelegt { my $potenz=2; while($potenz<@elemente){$potenz*=2} my @leer_array=map {[0,'']} @elemente..$potenz-1; push @elemente,@leer_array; } # Array auf eine zweierpotenz gebracht my $gesammtzahl=0; for(@elemente) { $gesammtzahl+=$_->[0]; $_->[2]=$gesammtzahl } # Bei jedem Arrayelement steht jetzt dabei, wie groß die Summe # der Wahrscheinlichkeiten für alle vorhergehenden Elemente ist ### Element auswählen my $sprungvar=0; my $schritt=@elemente/2; my $ziel=rand $gesammtzahl; while($schritt>=1){ if($elemente[$sprungvar]->[2]<$ziel) { $sprungvar+=$schritt; }elsif($elemente[$sprungvar-1]->[2]>$ziel){ $sprungvar-=$schritt; }else{last}# Wenn man beim richtigen Element ist if($sprungvar<0){$sprungvar=0;last}# für den Fall, daß der # Zufallsgenerator auf das erste Element zeigt $schritt/=2; } print "$elemente[$sprungvar]->[1]\n"; sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t] "if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep !$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1} |