Combinazioni

di il
10 risposte

Combinazioni

Salve a tutti! Sono nuovo nel forum e ho bisogno di aiuto!
Ho un problema da risolvere in C:
io ho n colonne e in ogni colonna ho m coppie di numeri. Vi faccio un esempio grafico

4 5 | 24 28 | 27 28 | 10 11 | 8 14
2 3 | 23 24 | 26 27 | 8 9 |
3 4 | 2 22 | 5 25 | 9 10 |
-----|22 23 | 25 26 |

in questo esempio n=5 però devo generalizzare il problema per qualsiasi n.
Io voglio scrivere tutte le combinazioni di coppie di numeri ottenibili prendendo
di volta in volta una sola coppia di numeri per colonna.
Conosco a priori il numero totale di combinazioni che è ottenibile moltiplicando per colonna
il numero m di coppie (nell'esempio--> tot_combinazioni= 3* 4*4*3*1=144).
Grazie a tutti per l'aiuto!!!

10 Risposte

  • Re: Combinazioni

    Io non ho capito ancora cosa vuoi fare. se vedo 5 colonne e 10 righe la combinazione di copie prendendo una copia x colonna sarà uguale al numero delle righe. Almeno che non fai un esempio di output così ci capiamo.
  • Re: Combinazioni

    Ma è semplice...io conosco a priori il numero totale di combinazioni ottenibili che è pari
    al prodotto delle righe di ogni colonna e voglio trovare tutte le possibili combinazioni prendendo di volta in volta una coppia di numeri per colonna.
    Spero di essere stato più chiaro! Grazie
  • Re: Combinazioni

    polit87 ha scritto:


    il numero totale di combinazioni ottenibili è pari
    al prodotto delle righe di ogni colonna
    Ciò che hai scitto non ha senso. Prodotto delle righe di ogni colonna con che cosa?
    Fai un esempio di output e la cosa + importante dov'è che sei rimasto fermo.
  • Re: Combinazioni

    Provo a rispiegartelo:
    io ho determinate coppie di numeri così suddivise:
    1) 4 5 - 2 3 - 3 4 - (-->sono 3 coppie di numeri)
    2)24 28 - 23 24 - 2 22 - 22 23 (-->sono 4 coppie di numeri)
    3) 27 28 - 26 27 - 5 25 - 25 26 (-->sono 4 coppie di numeri)
    4) 10 11 - 8 9 - 9 10 (-->sono 3 coppie di numeri)
    5) 8 14 (--> è una coppia di numeri)

    prendendo per ogni riga da 1 a 5 una sola coppia di numeri, devo trovare tutte le possibili
    combinazioni (es. 3 4 - 22 23 - 27 28 - 8 9 - 8 14 e così via).
    in questo caso ho 5 sottogruppi però devo estendere il concetto per un qualsiasi numero n di sottogruppi.
    Ciò che volevo ancora dire è che se per ogni sottogruppo (da 1 a 5) moltiplichi tra loro il numero
    di coppie presenti (quindi fai 3 x 4 x 4 x 3 x 1 =144) sai che in totale ci saranno 144 combinazioni.
    Io non so proprio da dove partire ( più che altro per generalizzare il concetto a un qualsiasi numero di sottogruppi!!!) . Spero di essere stato più chiaro.
    Grazie
  • Re: Combinazioni

    La tua formula non mi convince.
    Metti che hai 3 sottogruppi ognuna composta da una coppia. Con la tua formula avrei 1*1*1 = 1 quindi non va. Le possibili permutazioni sonodel range di 5! * 144 = 125 * 144. bisogna vedere come intendi metterli tutti sti dati. un idea sarebbe quella di creare una struct definita così:
    
    struct coppia
    {
       int primo;
       int secondo;
    };
    
    poi creare un vettore di coppie ed infine creare un vettore di questi vettori.
    con la funzione next_permutation http://www.cplusplus.com/reference/algorithm/next_permutation/ riesci ad ottenere tutte le combinazioni possibili.

    quindi i vettori saranno del tipo:
    
    std::vector<coppia> vettore_riga;
    std::vector<std::vector<coppia> > vettore_complessivo;
    
    Ovviamente questo è solo uno spunto. A te il resto.
  • Re: Combinazioni

    Se ho 3 gruppi composti da una sola coppia è giusto che, prendendo una coppia da ogni sottogruppo io abbia una sola combinazione!!! è così che voglio che funzioni il programma!!!
  • Re: Combinazioni

    Se li vuoi così significa che le righe non devono cambiare posizione durante la permutazione. Ancora + facile. Lascia inalterata la prima riga, prendi la prima coppia della prima e fai tutte le permutazione della seconda. A ciscun permutazione li farai la permutazione della terza e così via. Con next_permutation aggendo su un vettore riga ottieni ciò che vuoi.
  • Re: Combinazioni

    C'è solo un problema: io sto programmando in C e non in C++!!!!
  • Re: Combinazioni

    Il problema è che non hai scritto neanche una riga di codice. In C devi fare tutto a mano.
    Crea una matrice dinamica di lunghezza riga variabile. scandisci la matrice da capo faccendo la formuletta sopra. Quelli non ripetibili saranno quelli della prima riga. Quelli della seconda saranno ripetibili tante volte quanti sono gli elementi della prima * elementi della seconda e così via fino in fondo.
  • Re: Combinazioni

    Non capisco cosa vuol dire quando scrivi "scandisci la matrice da capo facendo la formuletta sopra"!!!
    Cmq grazie x l'aiuto --> Nei prossimi giorni provo a scrivere il programma...non sono molto pratico in C e devo anche capire come scrivere una matrice con lunghezza righe variabile!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte