Static <E> Set<List<E>> product ( List<Set<E>> list_of_set )

di il
2 risposte

Static <E> Set<List<E>> product ( List<Set<E>> list_of_set )

Define the method:

static <E> Set<List<E>> product ( List<Set<E>> list_of_set )

that, given a list of sets, performs a kind of Cartesian product, returning a
corresponding set of lists.

As an example, given
[["small","big"],["white","black"],["ball"]]
it returns
[["small","white","ball"],["small","black","ball"],["big","white","ball"],
["big","black","ball"]]

Come si risolve?

2 Risposte

  • Re: Static <E> Set<List<E>> product ( List<Set<E>> list_of_set )

    ludovica.cannas ha scritto:


    Come si risolve?
    Se, per dire come esempio, il numero di Set fosse 3 fisso, l'equivalente "strutturale" con for annidati sarebbe tecnicamente:
    for (i = 0; i < list_of_set.get(0).size(); i++) {
        for (j = 0; j < list_of_set.get(1).size(); j++) {
            for (k = 0; k < list_of_set.get(2).size(); k++) {
                // crea combinazione
            }
        }
    }
    Siccome però il numero di Set nel List in ingresso è arbitrario, la soluzione "strutturale" con for annidati non è possibile. Ma si può renderla generica e arbitraria semplicemente tenendo una lista di indici e facendoli "progredire" proprio come farebbero i for annidati.

    Con i 3 set che hai mostrato come esempio dovresti avere un array di 3 int e generando le combinazioni:

    0 0 0
    1 0 0
    0 1 0
    1 1 0


    P.S. tieni comunque presente che i Set sono solo iterabili ... non "indirizzabili per indice".

    P.S.(2) L'algoritmo che ti ho indicato è l'approccio "iterativo". Ma esiste anche l'approccio "ricorsivo". Non so se hai avuto indicazioni o preferenze a riguardo. L'approccio ricorsivo potrebbe però risultare un po' contorto ... dovrei provarci per valutarlo, appena ho tempo.
  • Re: Static <E> Set<List<E>> product ( List<Set<E>> list_of_set )

    Si, il prof ha detto che sarebbe meglio risolverlo con l'approccio ricorsivo.
    Grazie!
Devi accedere o registrarti per scrivere nel forum
2 risposte