[C] Generare un turno di partite

nardoz0918

Nuovo Utente
48
8
Guarda sono sicuro che ciò che dici è vero, anzi mi permetto di dire che è da prendere come esempio per essere un buon programmatore. :ok:

Se non applichi questi principi ai problemi facili, diventi un cattivo programmatore, ti perdi i casi particolari, trascuri le dimensioni, trascuri l'ottimizzazione.

Ma mi dispiace, questo non lo condivido. Sicuramente non sono molto bravo con le parole, ma in un certo senso mi stufa "risolvere" un problema adottando sempre la logica che chiunque può usare, e di certo non porta ad escludere casi particolari, dimensioni o quant'altro.
Se sei un Programmatore quei fattori da te elencati comunque sia non li scorderai a prescindere.
 

M1n021

Nuovo Utente
143
68
... procedendo come suggerisci (circa la stessa cosa di @M1n021) ...
Non mi pare! :)
Innanzitutto ho precisato che l'approccio più semplice, come tu stesso hai detto, è quello di mischiare l'array e di considerare poi le coppie successive (v[0] VS v[1], v[2] VS v[3], v[4] VS v[5], etc...).
E poi ho suggerito un algoritmo di mescolamento più efficace (nel senso di più semplice e caratterizzato da una distribuzione delle probabilità, associate alle singole permutazioni, uniforme), in quanto quello da te proposto si basa sullo scambiare coppie casuali di elementi per "un numero ragionevole" (?) di volte.
L'idea, come già spiegato nell'altro post, è la seguente:
Ossia andremo a scambiare, partendo dalla fine e avanzando verso sinistra, l'elemento corrente con un elemento preso a caso da un gruppo contenente gli elementi precedenti e l'elemento corrente.

In altre parole se l'array contiene 10 elementi:
- scambiamo v[9] con v[r] (dove r è un numero casuale appartenente all'intervallo [0,9];
- scambiamo v[8] con v[r] (dove r è un numero casuale appartenente all'intervallo [0,8];
- scambiamo v[7] con v[r] (dove r è un numero casuale appartenente all'intervallo [0,7];
...
- scambiamo v[1] con v[r] (dove r è un numero casuale appartenente all'intervallo [0,1];
- fine.
 
  • Mi piace
Reazioni: BAT

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Guarda sono sicuro che ciò che dici è vero, anzi mi permetto di dire che è da prendere come esempio per essere un buon programmatore. :ok:



Ma mi dispiace, questo non lo condivido. Sicuramente non sono molto bravo con le parole, ma in un certo senso mi stufa "risolvere" un problema adottando sempre la logica che chiunque può usare, e di certo non porta ad escludere casi particolari, dimensioni o quant'altro.
Se sei un Programmatore quei fattori da te elencati comunque sia non li scorderai a prescindere.
Allora forse intendevi soluzioni "stravaganti" piuttosto che "stupide".
 
  • Mi piace
Reazioni: nardoz0918

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
@M1n021
hai ragione, avevo letto un po' troppo di fretta il tuo post. Si può effettivamente "mischiare" in più modi, e tu lo fai in modo efficiente generando 10 interi pseudocasuali.
Aggiungo una curiosità che forse non tutti sanno:
la ragione per cui io suggerivo di farne 50-100 è differente: è stato dimostrato che se mischi "bene" un mazzo di carte reali con le tue mani, per mischiare bene devi farlo almeno 7 volte. In questo caso "bene" significa che ad ogni mischiata prendi all'incirca metà mazzo e la "mischiata" corrisponde allo scambio di posizione di molte carte simultaneamente. Il "molte carte" scambiate, moltiplicato almeno 7 volte dà (nella vita reale) un mazzo mischiato decentemente.
E' per questo motivo che quando "mischio" generando interi pseudocasuali, tendo a suggerire la generazione di diverse decine. I generatori pseudocasuali incorporati nei linguaggi di programmazione, sono deterministici: usare una distribuzione lineare non è affatto scontato, dipende da quella che hai nel linguaggio (per aumentare la casualità a volte si deve ricorrere a librerie esterne specializzate).
 
  • Mi piace
Reazioni: fabio93 e M1n021

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!