Zahl generieren - absteigende Wahrscheinlichkeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zahl generieren - absteigende Wahrscheinlichkeit

    Hi,

    Ich möchte eine Zahl zwischen 1 und 1000 generieren. Allerdings muss die Wahrscheinlichkeit für 1 am höchsten und 1000 am geringsten sein und sollte stetig abfallen - im Idealfall aber nicht linear. Am besten in der Art:

    y=1/x²-a

    wobei x=Zahl, y=Wahrscheinlichkeit. Ich hoffe ihr wisst was ich meine. Ob tatsächlich eine Funktion für die Verteilung zum Einsatz kommt und wenn ja wie die genau aussieht ist nicht so wichtig.

    Leider habe ich keine Ahnung, wie ich [sowas möglichst resourcenschonend (pro Programmaufruf sollen ca. 20 Zahlen generiert werden)] umsetzen kann.

    Gruß,
    Syco

    EDIT:
    Edit: Das wichtigste hatte ich vergessen: Die generierte Zahl muss bei gleicher Anfangsbedingung jedesmal gleich sein. In der Praxis könnte ich von einem string den md5()-Wert nehmen und dann anhand jeder Stelle eine Zahl generieren. Das Problem ist, dass ich jede Stelle eines md5() wertes ja nur 36 Möglichkeiten zulässt. Aber irgendwas in diese Richtung muss es werden.
    Zuletzt geändert von syco23; 18.03.2004, 20:58.
    [COLOR=darkblue].: 1+1=23 :.[/COLOR]

  • #2
    ist n brainstorming *verschieb*

    Kommentar


    • #3
      meinst du sowas:
      PHP-Code:
      <?php
      for($i=0$i 20$i++)
      {
          
      $x1 rand(21000);
          
      $x2 rand(2$x1);
          
      $out[] = rand(1$x2);
      }
      sort($out);
      echo 
      implode(" | "$out);
      ?>
      Kissolino.com

      Kommentar


      • #4
        sonderlich schlau ist der algorithmus nicht. allerdings entsteht auch bei 100 zahlen beim seitenaufruf kein lag, solange das script nicht von 250 leuten gleichzeitig aufgerufen wird sollte es funktionieren:

        PHP-Code:
        function komischRandom($maxVal)
        {
            for(
        $i 0$i <= $maxVal$i++)
            {
                if(
        rand(0,100) == 0)
                    return 
        $i;
            }
            return 
        $maxVal;
        }

        srand(0);
        for(
        $i 0$i <= 100$i++)
        {
            echo 
        komischRandom(1000) . "<br>";

        mit dem 2. parameter (100) mußt du etwas rumspielen bis es dir taugt, je höher der ist, desdo höher wird der zufallszahl durchschnitt. wenn du srand(0); wegläst kommen jedesmal andere zahlen, aber das sollte es ja nicht (naja, so ist es schon arg statisch ).

        mußt halt gucken was du damit anfangen kannst.

        bis dann

        joni

        Kommentar


        • #5
          Warum so kompliziert?

          Angenommen die maximalzahl soll 100 sein:

          Linear steigende Wahrscheinlichkeit:
          zufallszahlbis1*100/zufallszahlbis1

          Mit quadratischer warscheinlichkeit:
          (zufallszahlbis1*sqrt(100))^2/zufallszahlbis1


          oder ist das nichtdas gefragte?
          Zuletzt geändert von Tartax; 19.03.2004, 10:55.
          Die Musikreview Seite

          hi, i'm a signature virus. copy me into your signature to help me spread.

          Kommentar

          Lädt...
          X