Newsgroup: it.hobby.lotto
Titolo: aiuto: algoritmo per la garanzia del 5

nello sviluppare le combinazioni per il suoperenalotto qual'č l'algoritmo
con il quale scegliere in una serie di combinazioni quelle che mi
garantiscono il 5 (o il 4 o il 3), avendo per base n numeri?



Per la  riduzione di un sistema del superenalotto, lotto o totogol si
devono eseguire i seguenti passi:
1) Si ricavano dagli n numeri tutte le colonne di combinazioni di 6
(per il SuperEnalotto) numeri: queste sono (n!)/(6! * (n-6)!) dove !
sta per fattoriale.
2) Si prende una colonna per esempio la prima dello sviluppo e si
eliminano dal sistema tutte le colonne che hanno almeno RID numeri in
comune con la colonna, dove RID e' il tipo di riduzione che vuoi
ottenere. Per esempio per sette numeri avrai le seguenti colonne
1 1 1 1 1 1 2
2 2 2 2 2 3 3
3 3 3 3 4 4 4 
4 4 4 5 5 5 5
5 5 6 6 6 6 6
6 7 7 7 7 7 7
Prendendo la prima e volendo ottenere una riduzione che garantisca il
5 dovrai eliminare tutte le colonne che hanno almeno 5 numeri in
comune con la prima cioe' tutte le altre. Quindi il sistema ridotto
sara' la colonna 1-2-3-4-5-6. Infatti come puoi ben notare qualsiasi
combinazione di 6 numeri su 7 esca avrai sempre un cinque.
3) Per la scelta della colonna successiva da prendere come riferimento
per proseguirer la riduzione ci sono almeno tre possibilita':
   a) Metodo rozzo: prendere sempre la prima colonna non eliminata.
      Cosi' avrai un algoritmo abbastanza veloce ma una cattiva riduz.
   b) Metodo cosi' cosi' :Prendere tra tutte le colonne non eliminate
quella che ha un maggior numero di colonne simili. Buona riduzione ma
tempi assurdi.
   c) Metodo ottimo: Prendere la colonna meno simile (piu'
indipendente, io ho usato la norma del prodotto scalare) rispetto a
tutte quelle gia' prese.(per esempio per 12 num. le colonne
1-2-3-4-5-6 e le colonne 7-8-9-10-11-12 sono massimamente
indipendenti) Ottima riduzione e veloce.
Spero di esserti stato di aiuto.
Ciao Pivot
-----
Pi...@operamail.com
"Se un uomo non ha il coraggio di difendere le proprie idee,
o le sue idee non valgono niente o l'uomo non vale niente" (Ezra Pound)
"Potresti stare zitto e far credere a tutti di essere un coglione
o parlare e levare definitivamente il dubbio a tutti"

indipendenti) Ottima riduzione e veloce.
Scusa, come lo calcoli il prodotto scalare?
(se usi la formula classica , rispetto a 2-4-6 risulta piu' vicina 1-2-3 che
2-4-90)
Hai provato con la distanza di hamming (codificando opportunamente le
colonne)?
Marco


wrote:

Si associa al sistema uno spazio vettoriale binario a n dimensioni
quindi per con 12 numeri e la colonna 1-2-3-4-5-6 considero il vettore
[1 1 1 1 1 1 0 0 0 0 0 0] e applico il prodotto scalare come se fosse
uno spazio a 12 dimensioni.Quindi in questo caso il prodotto scalare
con la colonna 7-8-9-10-11-12 = [0 0 0 0 0 0 1 1 1 1 1 1] viene 0


..
In pratica conti i numeri in comune, e' una distanza di hamming.
Grazie, provero': chissa' che non trovi una gradita sorpresa.. :)
Marco

Vi ringrazio ma a me servirebbe una spiegazione più pratica. io costruisco
le combinazioni in sequenza, cioè per 8 numeri faccio il seguente loop
1 2 3 4 5 6
                7
                8
1 2 3 4 6 7
                8
1 2 3 4 7 8
1 2 3 5 6 7
                 8
ecc.
mentre le sto costruendo chiaramente conosco il numero massimo delle
combinazioni che devo creare però vi sarei grato se mi poteste dire
praticamente come calcolare quando saltare le combinazioni non interessanti

praticamente come calcolare quando saltare le combinazioni non interessanti
Mi sembrava di essere stato piuttosto chiaro, soprattutto ai punti 2 e
3 comunque ricominciamo.Do' per scontato che usi un qualche linguaggio
di programmazione perche' farlo a mano fa male alla salute.:-)
Hai una matrice che ha 6 righe e colonne N pari a quelle del sistema.
Ci associ un vettore di N elementi che vale 0 se la colonna e' da
prendere e 1 se e' da scartare. A questo punto se voglio per esempio
fare il metodo che ho scritto in 3a (Metodo rozzo, ma semplice) questo
e' lo pseudo-codice (non so' in che ling. programmi)
N=numero_colonne;
Elimina(N)=vettore di 1 e 0 come sopra
for(int i=0;i<N;i++) // Per tutte le colonne
    if (elimina[i]==0)  //Se la colonna non e' gia' eliminata
    {
	for (int j=i+1;j<N;j++) //Per tutte le colonne a destra
	    if (elimina[j]==0)  // Se non sono state eliminate
	    {
 	     Conta i numeri in comune delle colonne i e j
	     Se i numeri in comune sono >= 5 ( 4 o 3 secondo la
riduzione) 
	     elimina[j]=1;	// elimina la colonna
	    }
    }
Alla fine avrai nel vettore Elimina tanti 1 e alcuni 0 il cui indice
nel vettore sono le colonne del sistema ridotto che dovrai prendere
dalla matrice 
Spero di essere stato piu' chiaro, cmq. se hai dubbi puoi anche
scrivere in privato perche' l'argomento puo' anche non interessare a
tutti.
Ciao Pivot
 
-----------------------
Pi...@operamail.com

 
mi sembra leggermente piu' semplice e veloce :-)
bye!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"L'opulenza dell'ufficio di rappresentanza e' inversamente proporzionale
alla solvenza della ditta", legge delle Istituzioni