Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] generare tutte le possibili combinazioni di A,B,C date 10 posizioni

    Dati 3 elementi A,B,C e 10 posizioni...
    Generare tutte le possibili combinazioni non ripetute di A,B,C a coprire tutte le 10 posizioni..

    es.
    A,A,A,A,A,A,A,A,B,C
    A,A,A,A,B,B,C,C,C,C
    A,A,A,B,B,C,C,C,C,C
    ecc...

    E' possibile secondo voi farlo in c++?
    Da cosa potrei partire...?


    Grazie



    ps:Per adesso a me tornerebbero 154 combinazioni univoche ma vi chiedo conferma o smentita.

  2. #2
    Se si parla di combinazioni (non permutazioni) dovrebbero essere 3^10=59049 combinazioni. Ho scritto un po' di tempo fa proprio per un utente del forum del codice generico per il calcolo di combinazioni di cui vado piuttosto fiero: versione originale; versione resa generica.
    Ti basti sapere che sulla mia macchina (vecchiotta) macina circa 20 milioni di combinazioni al secondo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Scusa l'ignoranza...

    Originariamente inviato da MItaly
    Se si parla di combinazioni (non permutazioni) dovrebbero essere 3^10=59049 combinazioni. Ho scritto un po' di tempo fa proprio per un utente del forum del codice generico per il calcolo di combinazioni di cui vado piuttosto fiero: versione originale; versione resa generica.
    Ti basti sapere che sulla mia macchina (vecchiotta) macina circa 20 milioni di combinazioni al secondo.
    Ma le permutazioni cosa sarebbero?

    Grazie mille e stra-complimenti per il tuo programma!



    ps:In sostanza a ma servirebbe di sapere in particolare solo i mix possibili dei 3 elementi secondo le 10 quantità non posizioni.. cerco di spiegarmi meglio con un altro esempio.. perchè probabilmente ho portato fuori rotta...

    AAAABBCCCC -> 4a 2b 4c
    per me è esattamente la stessa cosa di
    AABBAACCCC -> 4a 2b 4c
    o ancora... di...
    ABBCCCCAAA -> 4a 2b 4c

    quindi queste 3 ad esempio valgono x 1 solo caso...

    Spero di essere stato + chiaro adesso e mi scuso per l'inesattezza della domanda precedente

    Grazie ancora MItaly

  4. #4
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    ciao,
    secondo me puoi usare 3 cicli for annidati l'uno dentro l'altro.

    La soluzione però è customizzata in caso di dimensione 10 e con 3 tipi di elementi, e ho supposto che per ogni combinazione ci debba essere almeno un elemento per tipo.

    Detto questo...

    primo for conta da 0 a 8.
    il secondo conta da [valore contatore predente] + 1 fino a 9
    il terzo conta da [valore contatore predente] + 1 fino a 10.


    Diversamente se vuoi una cosa generica, potrebbe essere una soluzione pensare ad una funzione ricorsiva.

  5. #5

    Re: Scusa l'ignoranza...

    Originariamente inviato da freetom
    ps:In sostanza a ma servirebbe di sapere in particolare solo i mix possibili dei 3 elementi secondo le 10 quantità non posizioni.. cerco di spiegarmi meglio con un altro esempio.. perchè probabilmente ho portato fuori rotta...
    Roba tipo lotto, quindi? Allora ti va bene la soluzione di ybla82; puoi renderla generica con funzioni ricorsive (ma in questa maniera aggiungi l'overhead della chiamata a funzione, che sui grandi numeri si fa sentire), oppure puoi modificare in qualche maniera il mio programma (che di fatto simula dei for annidati con un unico for magico).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.