Wpis z mikrobloga

Elo. Załóżmy że mam n-elementowy zbiór (listę) i muszę z niej policzyć możliwe k-elementowe kombinacje bez powtórzeń. Np dla
n = {1,2,3,4,5,6} i k = 3 będzie to {1,2,3 }; {1,2,4}; {1,2,5};{3,4,6} etc. Elementy zbioru nie mogą się powtarzać {1,1,2} == błąd.
O ile policzenie ilości kombinacji jest stosunkowo proste (n!) / (k!(n-k)) , to jak je wszystkie uzyskać i zapisać jako osobną listę?
#programowanie #java #algorytmy #matematyka #naukaprogramowania
  • 24
elementytab = [1,6,8,2,76]
kombinacje
tab = []
k = 3

wyznaczpermutacje(elementidx, zbior):
if |zbior| == k:
kombinacjetab.add(zbior)

if element
idx == k:
return

nowyzbiorzelementem = zbior.copy()
nowy
zbiorzelementem.add(elementytab[elementidx])

wyznaczpermutacje(elementidx+1, zbior)
wyznaczpermutacje(elementidx+1, nowyzbiorzelementem)

wyznacz
permutacje(0, [])

Coś w tym stylu powinno zadziałać. Przy czym ma to sporą złożoność (O(2^k))
@Przegrywek123: (jestem na imprezie wiec w skrocie)masz np. 5 elementow na wejsciu, czyli 5 bitow. Czyli mozliwe 32 zbiory( jezeli pusty to tez zbior).

No to zwykla iteracja od zera(albo jedynki)

O kurcze zrabalem nie zauwazylem, ze k elemntowe myslalem ze wszystkie. (No tak impreza :/ ) no dobra widze ze ktos ci napisal jakas odpowiedz.