Witam!
Zacznę od przykładu, bo tak najłatwiej będzie mi przedstawić problem.
Mamy zbiór obiektów (powiedzmy: [A,B,C]). Obiekty można łączyć ze sobą, przy czym:
- A + B == B + A
- (A + B) + C != A + (B + C) != (A + C) + B
Chciałbym wygenerować wszystkie możliwe połączenia (w tym przypadku (A+B), (A+B)+C, (A+C), (A+C)+B, (B+C), (B+C)+A), ale najprostszy algorytm (czyt. bruteforce) generuje (jak łatwo się domyślić) dużo powtarzających się kroków i co za tym idzie - zaczyna mieć duże problemy przy 9 obiektach (coś ok. 140 milionów połączeń).
Czy istnieje jakiś algorytm, który działałby szybciej (tzn. nie generował powtarzających się kroków)?