Kombinacje w zbiorach

0

Witam,

potrzebuje małej pomocy jak wyświetlić wszystkie kombinacje okreslonych zbiorow. Z kazdego zbioru powinna byc wyswietlona tylko 1 liczba czyli np. 4 3 3. Ułożenie zbiorów tylko w takim porządku jak podano na poczatku czyli np. Zbior1, Zbior2, Zbior3. Chodzi o to, ze na poczatku podajemy ile ma byc zbiorow i jakie wartosci maja byc w danym zbiorze.

Przyklad zbiorow:
Zbior1 {4,5,6,7}, Zbiór2 {1,2,3,4,5,6,7,8}, Zbiór3 {1,2,3,4}

Jezeli były to by 3 zbiory to wiadomo, ze bylyby to 3 petle, ale nie wiem jak zrobic aby wyswietlic kombinacje N zbiorow.

Z góry dziękuję za pomoc

0

W pierwszy kroku tworzy jednoelementowe ArrayListy, każda z jedną liczbą z pierwszego zbioru. Dopóki istnieje nie przerobiony jeszcze zbiór, to do każdej ArrayListy dopisujesz liczbę z kolejnego zbioru.

0

Nie bardzo rozumiem. Chodzi Tobie o to, ze Mam stworzyc: Lista1, Lista2, Lista3, itd. az kazdy element z 1 zbioru bedzie w osobnej liscie? Jak zrobic to dynamicznie (nie wiem ile bedzie tych zbiorow). Jak w ogole ma wygladac taki algorytm?

0

To może napisz jak przechowujesz zbiory, wtedy mogę dokładniej opisać algorytm.

0

Akurat to mi bez znaczenia. Moge przechowywac tak List<List> zbior = new ArrayList<List>(); Lista zbiorow, a kazdy zbior zawiera liste wartosci.

0
List<HashSet<Integer>> zbiory = new ArrayList<HashSet<Integer>>();
//wypełnienie zbiorów
ArrayList<ArrayList<Integer>> wynik = new ArrayList<ArrayList<Integer>>();
for(Integer i:zbiory.get(0))
{
     ArrayList<Integer> al = new ArrayList<Integer>();
     al.add(i);
     wynik.add(al);
}
for(int j=1;j<zbiory.size();j++)
{            
      zbior = zbiory.get(j);
      wynik = kolejnyZbior(wynik,zbior);
}
...
ArrayList<ArrayList<Integer>> kolejnyZbior(ArrayList<ArrayList<Integer>> stare,HashSet<Integer> zbior)
{
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    for(Integer i:zbior)
    {
        for(ArrayList<Integer> al:stare)
        {
            ArrayList<Integer> nowa = new ArrayList<Integer>(al);
            nowa.add(i);
            result.add(nowa);
        }
    }        
    return result;
}
0

Super. Wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1