Da funzione a sequenza

H3st3r1na
Cari amici ho il seguente problema:
Nel superenaolotto con k=6 e n=90 si possono avere 622.614.630 sequenze.Supponiamo che gli n numeri siano ordinati tale che
1 2 3 4 4 6 corrisponda alla prima sequenza e
85 86 87 88 89 90 corrisponda alla sequenza 622.614.630
il problema che mi sono posto è il seguente:
posso risalire alla sequenza sapendo il numero di sequenza 1 \(\displaystyle \leq \) S \(\displaystyle \leq \) 622.614.630 con una funzione???

esempio f(S) = sequenza?

Vi ringrazio anticipatamente anticipatamente

Risposte
superpippone
Si, ritengo sia possibile.
Un'ideuzza ce l'avrei.
Ma è un po' lunghetta......
E non so utilizzare granchè i fogli di calcolo.
Se ci tieni........

H3st3r1na
certo che ci tengo....
te ne sarei grata tantissimoo

superpippone
Se proprio vuoi farti del male.....
Mandami un numero di sequenza di tuo gradimento.
Diciamo tra i 20 e i 30 milioni.
Cosi semplifichiamo un pochino almeno il primo step....

H3st3r1na
26852369

superpippone
Avevo già commesso un errore di partenza.
Dividevo per 90.
Invece dovevo moltiplicare per 6, e poi dividere per 90.....
Il numero giusto sarebbe stato intorno ai 150 milioni.
Ma ormai che ci siamo, giochiamo con questo....

Allora le sestine sono 622.614.630, ognuna di 6 numeri (ovvio...).
Pertanto le sestine con il numero 1 sono $622.614.630*6/90=41.507.642$
Il numero da te scelto è inferiore a questo, per cui il numero 1 c'è.

Adesso ci rimangono cinquine e 89 numeri.
E qua sono chiodi.

Le cinquine con il numero 2 sono $41.507.642*5/89=2.331.890$
Il numero 2 non c'è.

Le cinquine con il numero 3 sono $(41.507.642-2.331.890)*5/88=2.225.895$
$2.331.890+2.225.895=4.557.785$
Il numero 3 non c'è.

Le cinquine con il numero 4 sono $(41.507.642-4.557.785)*5/87=2.123.555$
$4.557.785+2.123.555=6.681.340$
Il numero 4 non c'è

Adesso mi fermo, e ti chiedo: ti interessa ancora?
Bisogna procedere finchè il totale non supera il numero da te scelto (26.852.369).
A quel punto quel numero c'è.
Dopo bisogna proseguire con le quartine, etc.

Io non conosco le funzioni, e sto usando una calcolatrice da tavolo.
Ma se hai capito il meccanismo, penso che un programmino si possa fare (io, no....)

H3st3r1na
ti metto alcune numeri di sequenza con le sequenze verificate:
26852369 = 1-18-26-34-54-87
517632152 = 23-31-43-66-86-89
10000= 1-2-3-6-52-82
1000000 = 1-2-14-23-45-70
25684123 = 1-17-23-29-52-78
29845789 = 1-21-33-34-55-75

superpippone
O.k.
Continuo ancora un po' per vedere se il mio metodo funziona...

Le cinquine con il numero 5 sono $(41.507.642-6.681.340)*5/86=2.024.785$
$6.681.340+2.024.785=8.706.125$
Il numero 5 non c'è

Le cinquine con il numero 6 sono $(41.507.642-8.706.125)*5/85=1.929.501$
$8.706.125+1.929.501=10.635.626$
Il numero 6 non c'è

Le cinquine con il numero 7 sono $(41.507.642-10.635.626)*5/84=1.837.620$
$10.635.626+1.837.620=12.473.246$
Il numero 7 non c'è

Le cinquine con il numero 8 sono $(41.507.642-12.473.246)*5/83=1.749.060$
$12.473.246+1.749.060=14.222.306$
Il numero 8 non c'è

Adesso mi sembra che il procedimento sia chiaro.
Non ha senso che riempia il forum di conteggi.

Magari puoi continuare tu, e se ti "intoppi", mi ricontatti.

Saluti

Luciano

H3st3r1na
sei un genio.
Farò delle verifiche su una base consistente di dati e poi ti faccio sapere.

GRAZIE

superpippone
Una piccola puntualizzazione, anche se penso che sia inutile....

Se col mio metodo trovi che il 18 va bene, poi parti con quartine tra 72 numeri (a partire dal 19).

Se poi trovi che ti va bene il 34, continui con terzine tra 56 numeri (a partire dal 35)

Etc., etc.

axpgn
Paradossalmente sarebbe meglio usare le disposizioni piuttosto che le combinazioni ...
In quel modo basta dividere per $90$ e prendere il resto (ripetutamente e scartando quelle con numeri ripetuti).
Perciò se il vostro scopo è quello di prendere un numero tra i seicento e rotti milioni per capire quale sestina sia, fate prima a prenderne uno tra le $531.441.000.000$ disposizioni.

Altrimenti un programmino si fa in $5$ minuti, però il mio in just basic interpretato comincia già a perdere i colpi prima dei cento milioni, quindi in tal caso converrebbe suddividere il lavoro: prima fate una tabella come detto da superpippone (da $1$ a $41507642$ iniziano con l'uno, da $41507643$ a $80683394$ iniziano col due, ecc. ... niente paura, si costruisce abbastanza in fretta ... :D ) e poi si usa un programmino ...

Cordialmente, Alex

H3st3r1na
Grazie Alex per il tuo contributo ma lo ritengo meno efficace di quello proposto da Superpippone!!
Utilizzando qualsiasi linguaggio di programmazione è semplice creare un algoritmo iterativo che dato il numero di sequenza ti ricava la sestina. Questo tipo di approccio è oneroso sotto il profilo computazionale perchè per trovare la sequenza il computer deve analizzare tutte le combinazioni, con k=6 e n=90 deve esaminare nel caso peggiore 622614630 sequenza.
Metti il caso per k=75 e n=500 per trovare la sequenza un supercomputer impiegherebbe secoli per trovarla con il metodo iterativo, mentre con il metodo di Superpippone si riduce in pochi calcoli gestibili da computer in pochi millesimi di secondo.
Devo implementarlo informaticamente e testarlo.... Bravo Superpippone!!!!

axpgn
Forse non ci siamo capiti ... ma prima di andare avanti ti chiedo: cosa devi trovare di preciso?

Cordialmente, Alex

H3st3r1na
Alex mi scuso forse non ho capito bene la tua soluzione .... puoi essere più chiaro con qualche esempio?

ti ringrazio anticipatamente

axpgn
Sì, ma prima fammi capire meglio qual è il tuo scopo, il tuo obiettivo, per inquadrare meglio le mie risposte ...

nino_12
"H3st3r1na":

Nel superenaolotto con k=6 e n=90 si possono avere 622.614.630 sequenze.Supponiamo che gli n numeri siano ordinati tale che
1 2 3 4 4 6 corrisponda alla prima sequenza e
85 86 87 88 89 90 corrisponda alla sequenza 622.614.630


In generale, data una combinazione $v1,v2,...,vL$ (per qualsiasi lunghezza $L, 6$ per il superenalotto) per trovare che posto occupa nell'elenco lessicografico si può applicare questa formula:

n(v1,v2,...,vL) = C(N;L) - sommatoria per k da 1 a L di C(N-vk;L+1-k)

dove $vk$ sono i numeri della combinazione nelle $k$ posizioni (da $1 a L$)

Esempio:
la sestina
10 - 13 - 21 - 36 - 66 - 69
corrisponde al numero $301.467.013$

axpgn
... che ad occhio dovrebbe essere più o meno quello che ha fatto superpippone ... ma si fa prima come dico io ... :-D

Cordialmente, Alex

H3st3r1na
Alex, ancora non ci hai illuminato con il tuo metodo comunque il mio scopo e puramente di conoscenza matematica. Vi ringrazio anticipatamente.

superpippone
Bene fammi sapere se funziona.

Se ti interessa ho anche "un'ideuzza" su come fare a calcolare il numero di cartelle possibili della tombola (alias bingo, che va più di moda..).

Però questo è un "pelino" più complesso......

Alex, non ho mica capito il tuo metodo.
Me lo puoi esplicitare meglio?
Devo anche dire che non ho capito dove hai preso $531.441.000.000$. A me, semmai, verrebbe $448.282.533.600$

P.S. Ahhhggg! Hai fatto $90^6$

nino_12
Se può servire, da qui si può scaricare un foglio excel che permette di ricavare sia l'indice lessicografico partendo da una o più combinazioni, sia il viceversa.

http://wheels.forumcommunity.net/?t=568 ... y404891747

axpgn
"H3st3r1na":
... ancora non ci hai illuminato con il tuo metodo ...

Beh, a dir la verità, l'ho già accennato prima ... :D

"superpippone":
P.S. Ahhhggg! Hai fatto $ 90^6 $

Eccerto! :-D

Allora ... se invece di utilizzare le combinazioni di $6$ elementi su $90$ usassimo le disposizioni, il passaggio dal numero alla sestina è velocissimo ... dato un intero $1<=n<=90^6$, lo si divide per $90$ ed il resto è un numero della sestina, si prende la parte intera della divisione e si ripete il ciclo altre cinque volte e si ottiene la sestina ... l'inconveniente sta nel fatto che si ottengono sestine "non" valide (numeri ripetuti) ma basta scartarle e prendere un altro numero ...
La seconda proposta consisteva in una semplice ottimizzazione della "conta" delle sestine ... è semplice costruire un programmino che "costruisca" le sestine una ad una, contandole; l'inconveniente consiste nel tempo di elaborazione necessario: nel caso specifico ritengo che un programma compilato e ottimizzato che "giri" su un pc sia sufficiente ma per migliorarlo è sufficiente suddividere le sestine in $90$ fasce in funzione del primo termine; una tabella con in numeri da $1$ a $90$ con il primo e l'ultimo numero della fascia si costruisce in Excel in un paio di minuti (fatto) e poi la si inserisce all'interno del programma; in questo modo si trova la sestina corrispondente al numero progressivo della combinazione in un minuto ... :wink:

Cordialmente, Alex

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.