Mostra notizie nelle discussioni
Avatar
☺
Scritto da
avvelentani
Cubicolario
il 2010-03-30 16:10:00.0 alle 2010-03-30 16:10:00.0
Trollate totali: 18184
Ho letto i thread sull'estrazione
un circo, praticamente.

l'algoritmo di suoranciata e dell'altro non autenticato nel thread originale e` corretto.

Se hai una funzione rand() che estrae un numero casuale tra 0 e 1 con distribuzione uniforme, la probabilita` di un sottointervallo di ampiezza A e` A.
Resta da dimostrare che l'algoritmo associa (in un modo qualsiasi) ad ogni elemento di probabilita` A un intervallo di ampiezza A cosa che e` banale da dimostrare (o da implementare).

Il problema con il fatto che i numeri floating point sono spesso inesatti ce l'hai e non lo puoi evitare mai completamente, i numeri in R sono ovviamente offlimits, puoi ottenere una migliore rappresentazione dei numeri in Q se usi le frequenze, in quel caso rappresenti in modo esatto qualunque distribuzione il cui minimo comun denominatore e` minore del massimo numero che puoi rappresentare (che se usi un implementazione di bignums e` limitato dalla dimensione della memoria).

Con le frequenze l'algoritmo e`:

a = [ 2, 1, 1, 0 ]

def gs_intervalli(a):
    n = sum(a)
    x = random.randrange(n)

    acc = 0
    for i in range(len(a)):
        acc += a[i]
        if (acc > x): return i

    return -1


la cosa bella e` che questa roba si puo` riscrivere in modo che faccia una sola passata su a, senza dover conoscere sum(a) in anticipo.
I think happiness is love
- Vladimir Putin

Pagina generata in 58 millisecondi

Utenti attivi: 7 nell'ultimo minuto, 23 negli ultimi cinque minuti, 54 negli ultimi 15 minuti