Podział zbioru

0

Hej! Otrzymałem na studiach zadanie polegające na wygenerowaniu podziałów n-elementowego zbioru. "n" to liczba którą użytkownik podaje na początku. Znalazłem już w Internecie dużo informacji na ten temat, ale żadne nie pozwoliły mi napisać działającego programu. Mój obecny kod jest bardzo zagmatwany i działa tylko dla n <= 5. Próbowałem nawet pisać pseudokod/algorytm na kartce, ale dużo to nie pomogło.
Przykładowo, dla n=3 istnieje 5 takich podziałów:
1, 1, 1
1, 1, 2
1, 2, 1
1, 2, 2
1, 2, 3
Dla n=5 istnieje 15 takich podziałów:
1, 1, 1, 1
1, 1, 1, 2
1, 1, 2, 1
1, 1, 2, 2
1, 1, 2, 3
1, 2, 1, 1
1, 2, 1, 2
1, 2, 1, 3
1, 2, 2, 1
1, 2, 2, 2
1, 2, 2, 3
1, 2, 3, 1
1, 2, 3, 2
1, 2, 3, 3
1, 2, 3, 4

Inne pojęcia jakie udało mi się znaleźć, opisujące ten problem to: "Problem podziału zbioru", "Partition", "Partition problem".
Ciężko mi nawet wyjaśnić to co mam zrobić, ale mam nadzieję że jest to w miare zrozumiałe.

0

Zmniejsz wszystkie cyfry w przykładach o 1 wtedy problem redukuję się do generacji wszystkich liczb w systemie liczbowym o podstawię n aż powstanie ciąg 0,1,2..n-2,n-1. A jak już wygenerujesz to co trzeba pozostaję zwiększenie wszystkich cyfr o brakujące jeden. Oczywiście 'odejmowania i dodawania jedynek', nie musisz wykonywać bezpośrednio, chodzi o samą idee.

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