Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    81

    [C#] Estrazione Random con livelli di "rarità"

    Salve,
    Vorrei chiedere a voi un consiglio.
    Devo creare uno script che mi estragga un numero da 0 a n (dove n è la lunghezza di un array)
    in cui i numeri più bassi hanno un livello di estrazione comune mentre i numeri alti vengono estratti raramente.
    Che logica potrei usare?

    Spero possiate aiutarmi

    Yomega

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    C# con tutti i linguaggi .NET viene trattato nel forum "Visual Basic e .NET Framework".

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto chiarisci cosa intendi con bassi e alti...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Fai un array di interi di lunghezza n; in ciascun bucket ci metti la frequenza relativa di estrazione che vuoi per l'indice corrispondente (esempio: 10 10 10 10 10 1 1 1 fa sì che 0, 1, 2, 3, 4 e 5 siano estratti 10 volte più probabilmente di 6, 7 e 8). Somma tutti questi numeri e ottieni un valore che chiamiamo M.
    Estrai un numero casuale A compreso tra 0 a M, quindi scorri l'array sottraendoci via via i valori che incontri; appena A diventa negativo, l'indice a cui sei arrivato è il valore estratto.

    (la cosa qui è O(n), si può rendere O(log n) con una sumtable e una ricerca dicotomica)
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    57
    dovresti essere più specifico su alcuni aspetti

    dici di estrarre un numero da 0 a n dove n è la lunghezza del tuo array, in questo caso intendi che hai un array incrementale di numeri (0, 1, 2, ..., n) o sono definiti all'interno in modo casuale (10, 6, 2, 3, ..., per n)?

    con bassi e alti intendi il valore del numero, oppure la posizione all'interno dell'array?

    la rarità di estrazione di un numero come è ponderata?
    - tipo funzione potenza in, con un incremento di rarità iniziale leggero sino ad accelerare in modo molto marcato
    - tipo funzione potenza out, il contrario di quanto detto sopra
    - tipo standard con un incremento regolare

    l'obbiettivo finale, oltre ad ottenere quanto richiesto dalla logica stessa, tende di più ad un livello di performance, qualità dell'output, semplicità di codice, ... .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.