GEWICHTETES Array?

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Me_Hide.

    GEWICHTETES Array?

    Hallo zusammen.

    ich möchte ein gewichtetes Array aufbauen und mit einer Zufallszahl ein Element aus diesem Array rausnehmen.

    in der Ausgangssituation habe ich habe folgendes Array:
    i | WERT
    0 | 10
    1 | 25
    2 | 13
    3 | 8
    4 | 19
    5 | 13
    6 | 5
    7 | 8
    8 | 13
    9 | 13
    10 | 21
    11 | 14
    12 | 13
    13 | 23
    14 | 28
    15 | 21
    16 | 26
    17 | 9
    18 | 10
    19 | 16
    20 | 19
    21 | 5
    22 | 13
    23 | 21
    24 | 11

    aus disem Array möchte ich ein gewichtetes Array bauen.
    z.B. die Position 14 hat den grössten Wert im Array und der ist = 28.
    Diese Position 14 soll dann bei der Zufallsauswahl am meisten berücksichtigt werden,
    danach die Position 16 mit dem Wert 26.

    Wie mache ich das???
    (Habe zwar ein paar Lösungansätze aber, wenn ich das hier reinposte dann liest sich das bestimmt keiner durch, weil die Seite zu lang wird.)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kerim80“ ()

    ich hätte da einen anderen vorschlag! Ordne die array nach den gewichtigsten Elementen am anfang. dann guckst du welche du am meisten berücksichtigen möchtest.

    dann , wir gehen jetzt davon aus, dass die elemente 1 - 6 am gewichigsten sind! Dann nimmst du erst einmal eine zufallszahl von 1 - 6. dann eine zweite. diese beiden addierst du dann! dann nimmst du eine neue zufallszahl von 1 - 24. Von dieser Zahl subtrahierst du die erste zahl! noch eine abfrage: wenn die zahl kleiner als 0 ist dann got do anfang!
    Hallo,



    du kannst auch wie folgt vorgehen:



    Du bildest die Summe aller Array-Werte. In deinem Fall 377



    Danach bestimmst du eine Zufallszahl zwischen zwischen 1 und 378

    VB.NET-Quellcode

    1. zufall = CInt(Rnd(Time) * 377)+1


    Danach lässt du eine Schleife durchlaufen, in der du nacheinander die Werte des Arrays von der Zufallszahl abziehst und wenn der Rest kleiner 0 ist, dann hast du den Array-Wert, der per Zufall bestimmt wurde.

    Durch diesen Algorithmus entspricht die Chance, dass ein bestimmter Wert genommen wird, exat seinem Gewicht im Array.



    VB.NET-Quellcode

    1. For x = 0 to Anzahl_Array_Werte - 1
    2. Zufall = Zufall - Wert(x)
    3. if Zufall < 0 then
    4. Zufall = x
    5. x = Anzahl_Array_Werte
    6. end if
    7. next
    8. msgox("Zufallswert: " & Wert(Zufall))


    mfg



    Me_hide