#!/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";