CITAZIONE (Giovanni A. (a.k.a. krypta) @ 31/12/2022, 16:18)
Credo ci sia da correggere l'elenco dei numeri. In base all'immagine la scelta è più ampia
7 8 12 13 14 15 16 17 18 20 22 24 25 26 28 29 31 32 36 37 40 43 44 45 46 47 48 50 51 52 53 58 59 63 65 66 68 71 72 77 80 81 86 87 89
Hai ancora ragione, i numeri elencati sono quelli che hai indicato tu, sono 45 in totale quelli selezionabili dopo la terza scelta. Il resto del ragionamento mi pare non cambi.
Non so perché mi sia confuso così. È molto difficile mantenere la concentrazione quando selezioni le colonne, cambi il colore di sfondo delle celle, applichi i filtri e poi li togli…
Alla fine non ti ricordi neanche quello che stavi facendo.
Per questo sarebbe comodo avere un programma sul quale: a) selezioni il file delle estrazioni, b) imposti la lunghezza di ricerca (novine) e c) scegli il punteggio per il quale ne cerchi una (o più di una) vergine. Poi per il resto delle funzionalità ci sarebbe da sbizzarrirsi.
.
.
.
Ho provato a fare delle considerazioni sulla complessità di questo algoritmo.
Ho considerato i passi descritti sopra fino a completare manualmente le fasi di scelta (in questo primo passaggio, come abbiamo visto, ci si ferma a 6 numeri e non si arriva alla novina).
Ho quindi preso il nostro come caso medio, e non so se ho fatto bene, ma il range di estrazioni è certamente casuale, quindi se non è la quantità (2093) che trae in inganno, mi risulta che:
- nello scegliere il primo numero l'algoritmo ha 90 possibilità (non c'è nessun numero da escludere né in verde né in arancione);
- Per il secondo numero la scelta deve escludere il numero scelto in precedenza + i numeri in arancione (ma ancora non ce ne sono), quindi ne sceglierà uno su 89;
- Per il terzo numero può scegliere tra 90 - i due in verde già scelti - quelli in arancione coinvolti dai primi due in verde e in totale avrà 68 possibili numeri in bianco tra cui scegliere;
e così via...Come riporta questa tabellina:
Perciò la mia valutazione, (anche se la definirei davvero sommaria), mi fornisce i seguenti valori indicativi:
questo nuovo algoritmo effettuerà 90 * 89 * 68 * 45 * 18 * 6 =
2.647.144.800 (2 miliardi e 600 milioni circa) di tentativiChe non sono certo una bazzecola, ma vista la natura del problema credo che sia assolutamente ragionevole.
Se, come termine di paragone, consideriamo gli altri algoritmi esaminati nei giorni scorsi vediamo che:
-
Verificare tutte le possibili novine dell'integrale effettua C(90;9) =
706.252.528.630 (706 miliardi e 200 milioni) di tentativi- Similmente abbiamo anche visto che seppure al massimo dell'efficienza (sia per l’hardware moderno, sia dal punto di vista del codice),
verificare moltiplicando
tutte le sestine vergini con tutti i terni vergini, per poi scartare quelli che non sono novine e controllando i punteggi di quelli rimanenti
costringe a effettuare (892.126 * 82.334) =
73.452.302.084 (73 miliardi e 400 milioni) di tentativiQuindi sembrerebbe (ancora il condizionale è d'obbligo) che:
- se a questo algoritmo diamo indice di velocità pari a
1,
- allora provare tutte le C(90;9) novine: 706.252.528.630 / 2.647.144.800 =
266,7978452 più lento
- provare, invece, a moltiplicare sestine verg. per terni verg: 73.452.302.084 / 2.647.144.800 =
27,74774621 è più lento
Perciò, in termini di tempo potrebbe voler dire che se l'algoritmo della moltiplicazione ha impiegato
12 ore, questo nuovo dovrebbe terminare in circa
25 minutiNaturalmente un calcolo preciso della complessità terrebbe conto del fatto che tra i tentativi di ogni algoritmo ci sono sotto procedure differenti. Ovvero:
Il primo genera tutte le novine e le controlla una per una fino trovare tre punti (con costo computazionale lineare pari alla lunghezza delle novine)
Il secondo genera 10 volte meno novine, ma aggiunge il controllo su ciascuna di queste sulla presenza di numeri ripetuti (con costo computazionale lineare pari alla lunghezza delle novine)
Questo nuovo effettua un numero veramente ridotto di tentativi, ma per ciascuno di essi deve verificare la presenza di concorsi che totalizzano tre punti con l'ultimo numero aggiunto (si applicano i filtri Excel a due a due col nuovo numero introdotto assieme ai precedenti)
e questo è un po' più complicato da calcolare e non dipende dalla lunghezza delle novine, ma dalla quantità dei concorsi e il costo, nel caso peggiore è pari alle possibili coppie tra 9 numeri C(9,2)=36, ma il caso medio è molto inferiore.
Infine, però, penso che anche se alla fine
i due algoritmi trasformati in programma impegnassero la macchina allo stesso modo e quindi
se impiegassero lo stesso tempo per terminare, è anche vero che il funzionamento interno è completamente differente. Quindi
arriverebbero alla prima soluzione
in tempi diversiPer cui, se si lanciassero due istanze contemporaneamente, una basata sul un algoritmo e l'altra su questo, e se esiste una novina vergine per il tre, siccome seguono un percorso di ricerca diverso, allora
uno dei due ci arriverebbe prima dell'altro e la ricerca potrebbe considerarsi conclusa.
Quindi la curiosità di vedere realizzato un software che applichi questo algoritmo non è ancora soddisfatta.