• User Attivo

    Cerco Generatore di combinazioni NON casuali

    Sto cercando se esiste un programma che generi in output un file con tutte le combinazioni possibili a partire da alcuni parametri dati

    Le variabili sono
    B blocchi (nel mio caso il valore va da 15 a 45)
    N numeri (da 2 a 6)
    L lunghezza Sequenza (da 6 a 16)

    Attenzione: non mi basta che mi dia il numero delle combinazioni che si generano ma mi servirebbe anche lo sviluppo delle stesse.

    Ad esempio
    Esempio:
    Io ho 45 blocchi composti da coppie di 2 numeri differenti (nessun numero si ripete nelle coppie)
    e voglio generare tutte le combinazioni per ottenere sequenze di 8 numeri (non ripetuti) quindi 4 coppie

    Se non erro dovrebbero essere 148.995 combinazioni
    di cui vorrei ottenere lo sviluppo

    Questo sarebbe il primo passo

    Il secondo passo sarebbe un sistema di verifica
    A partire da N sequenza di numeri (da 1 a 1000 sequenze) di lunghezza fissa 6
    verificare quante corrispondenze intere o parziali (6, 5, 4, 3, 2, 1 corrispondenza ) ottengo nelle combinazioni dello sviluppo precedente.
    Il livello di corrispondenza dovrebbe essere determinabile

    Nell'esempio precedente
    avendo 148.995 combinazioni voglio vedere quante corrispondenze intere o parziali ottengo nelle 500 sequenze di 6 numeri a mia disposizione.

    E' chiaro che in alcune combinazioni posso ottenere più corrispondenze diverse
    ad esempio
    1 corrispondenza da 5 numeri
    3 da 4 numeri
    ecc.

    Mi sapete dare qualche dritta?

    Grazie


  • Consiglio Direttivo

    Salve, Grisu59.

    Se non ho capito male, cerchi qualcosa che gestisca e mandi in output una gran quantità di dati derivanti da processi di calcolo combinatorio (permutazioni e combinazioni di numeri, con o senza ripetizioni).

    I due nomi che mi vengono subito in mente sono Mathematica di Stephen Wolfram e Matlab.

    Sono entrambi a pagamento e, da quel che so, nemmeno troppo economici (il primo è un programma scientifico molto avanzato di calcolo simbolico che potrebbe facilmente fare ciò che chiedi, a patto di conoscere la sua sintassi; il secondo lavora prevalentemente con le matrici di dati ed è più orientato al calcolo numerico - sempre con sintassi dedicata).

    Un'altra possibilità potrebbe essere quella di scrivere i programmi direttamente a mano: poiché si tratta - almeno nel primo passo - di calcolo combinatorio, una volta trovata la formula generale per il caso che ti riguarda, si tratterebbe solo di dire alla macchina cosa moltiplicare e cosa dividere per avere rapidamente (secondo la disponibilità del processore e della RAM, ovvio) lo sviluppo delle sequenze.

    Un Matematico con un po' di conoscenze nel settore potrebbe facilmente formalizzare il problema e darti la formula finale, che opportunamente tradotta sarebbe di facile gestione nelle mani anche di un programmatore non espertissimo.

    Per maggiori informazioni ti rimando a questa semplice introduzione, accessibile anche ai non iniziati.

    Per il secondo passo, la sequenza potrebbe essere sviluppata in più tappe successive; azzardo una scaletta:

    1. Confronto della lunghezza della stringa di input (assegnata da te e nota) con tutte quelle di output del precedente; sulla base di questo dato, sfruttamento per il confronto delle sole stringhe con lunghezza uguale a quella di input.
    2. Mediante un sistema posizionale, verificare in più cicli le corrispondenze tra le cifre della stringa di input e quelle rese disponibili da 1). Specificamente:
      2.1) Far conteggiare le corrispondenze singole.
      2.2) Per quelle multiple, agire così: ogni volta che c'è una corrispondenza singola un contatore - con etichetta "Corrispondenza singola" - scatta di una unità e fa accedere la coppia "stringa di input & stringa passata dalla macchina" alla fase successiva, in cui si controllano le coincidenze doppie sulle restanti cifre dei due numeri in ballo.
      2.3) I superstiti di questo passo vengono ripassati alla ricerca di triple e così via.
    3. Stampa a video dei risultati in una tabella per colonne con somma finale delle occorrenze (= coincidenze) per ogni tipologia: singole, doppie, triple etc.
    4. Ripetizione del processo per ciascuna sequenza di input (in numero variabile da 1 a 1000, sempre con un sistema di cicli che faccia girare la macchina finché non abbia esaurito ciò che tu le avrai dato in pasto).
    5. Riassunto finale a video dei risultati col solito sistema delle colonne e delle somme.

    Avendo una macchina abbastanza potente e tempo sufficiente, si dovrebbe poter riuscire a risolvere tutto senza sforzi mostruosi (creato il primo loop, è tutto uguale); lascio comunque la parola a un programmatore per i dettagli tecnici, in cui confesso di non essere attualmente in grado di potermi addentrare.

    Saluti. :ciauz: