Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7

    Elenco completo combinazioni di n insiemi con k1,k2,...kn elementi

    Buonasera.

    Ho a disposizone n insiemi, ognuno dei quali è costituito da un numero diverso di elementi.
    Ad esempio, è come se avessi a disposizione n=3 tabelle , in cui nella prima ho k1=3 elementi: {3,5,2}, nella seconda k2=4 elementi : {2,1,12,4}, nella terza k3=2 elementi: {6,0}.
    Vorrei effettuare l'elenco di tutte le possibili combinazioni in cui compare un elemento del primo insieme, uno del secondo e uno del terzo, ovvero:
    3-2-6; 3-2-0; 3-1-6; 3-1-0; ........ ;2-4-6;2-4-0.

    Vorrei chiedervi:
    1) nome del problema (se lo ha, a prima vista non credo si tratti di permutazioni/disposizioni/combinazioni);
    2) una sua risoluzione.

    Grazie

  2. #2
    se ho ben capito, parli del prodotto cartesiano, giusto? E vorresti stampare l'insieme delle n-uple?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7
    Si, esatto.. è il prodotto cartesiano. Mi occorrebbe una soluzione per qualunque valore che n può assumere

  4. #4
    dai un'occhiata qui, alla risposta di Garbin (il quinto post).

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7
    ok grazie, ho visto. Utilizzando C++ , per usare console.writeline di che libreria ho bisogno?

  6. #6
    Includi l'header <iostream>:

    Codice PHP:
    #include <iostream>

    int main() {
      
    std::cout << "Ciao" << std::endl;

    oppure devi dire quale namespace usi, evitando di dovero ripetere:

    Codice PHP:
    #include <iostream>

    using namespace std;

    int main() {
      
    cout << "Ciao" << endl;


  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7
    ho incluso l'iostream e il namespace std, ma non gira ugualmente...

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7
    antotan il problema l'ho risolto parzialmente..ho utilizzato tanti cicli for quanto è grande n. Ovviamente questa soluzione va bene solo per n fissato. Cercherò di utilizzare la ricorsione per poter implementare quanto desiderato..
    Inoltre ogni riga delle tabelle in realtà non contiene solo un numero ma diversi (ad esempio la prima riga puo' essere 12 5, la seconda 1 9 30, e così via), per cui (penso) dovro' fare a meno del metodo console.writeline.

    Ciao

  9. #9
    Ma l'algoritmo che era presente in quel link non funziona? Personalmente l'ho testato solo sugli array che ha scritto lui come esempio e sembrava andare.
    Basandosi sul numero di combinazioni, non hai bisogno più di creare n cicli for, ma te ne basta solo uno per avere il valore di i e poi un'altro ciclo, al suo interno, che ti seleziona l'array. Quindi dovrebbe valere per ogni n.
    Del tipo:

    for(i = 0; i < num_comb; i++) {
    for(j = 0; j < vettore.size(); j++) {
    cout << vettore.at(j)[i % vettore.at(i).lenght()] << endl;
    }
    }

    vettore è una variabile che contiene gli insiemi con cui fare il prodotto cartesiano. Tu per ogni insieme fai l'algoritmo descritto in quel post.

    Non ho ben capito il fatto della riga che contiene diversi numeri.
    Potresti fare un esempio breve?

    Nel frattempo provo ad approfondire l'idea che ho scritto sopra

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    7
    Il problema che devo risolvere in dettaglio è questo.
    Devo aprire un numero n di file (n è un numero che passo in input). Supponiamo ad esempio n=3, e apro a.txt, b.txt, c.txt.
    Tutti i file hanno un arbitrario numero di righe contenenti a loro volta un numero arbitrario di numeri. Ad esempio per a.txt ho:
    0 4
    0 2 4
    0 2 7 4
    Per b. txt ho:
    1 5 3 6
    1 6
    Per c.txt ho solo 9 4.
    Voglio generare un file, ris.txt, in cui elenco il prodotto cartesiano delle righe dei file. Ad esempio:
    Primo risultato:
    0 4
    1 5 3 6
    9 4
    Secondo risultato:
    0 4
    1 6
    9 4
    Terzo risultato:
    0 2 4
    1 5 3 6
    9 4
    ....
    Ottavo risultato
    0 2 7 4
    1 6
    9 4.

    Brevemente, è un problema di teoria dei grafi (è il prodotto cartesiano di tutti i possibili percorsi che possono esserci fra il nodo 0 e il nodo 4, fra 1 e 6 , fra 9 e 4 considerando l'esempio di prima).

    Ho capito cosa intendi quando hai parlato dei cicli for..sembra un'ottima soluzione per cui provero' ad implementarla.

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.