집합에서 조합
일반적으로 조합이라고 말은 하지만 수학적인 표현에 있어서는 2가지 순열과 조합이 있습니다.
순열은 순서를 따지기 때문에 집합에 있어서 {1,3} 과 {3,1} 을 다르게 생각합니다.
그리고 집합이 1개일때는 순열과 조합만 고려하면 되겠지만 집합이 2개 이상일 경우 집합끼리의 조합은 Product 연산이 됩니다.
여기에서는 집합(list 로 가정)하나에서 순열과 조합을 만드는 방법에 대해서 알아보도록 하겠습니다.
python에서는 여러가지 패키지가 있지만, list에서 쉽게 순열과 조합을 할 수 있는 패키지가 준비가 되어 있습니다.
공통적으로 아래 패키지를 import 해줍니다.
import itertools
순열
중복 없이 순서에 상관있게 나열합니다.
python 코드로는 다음과 같습니다.
val = [1, 2, 3] for i in range(1, len(val)+1): perm_set = itertools.permutations(val, i) for sets in perm_set: print(sets)
결과
(1,) (2,) (3,) (1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2) (1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1)
조합
집합에서 원소를 선택하는 것 혹은 선택의 결과로 정의됩니다. 어떤 순서로 원소를 선택했는지는 중요하지 않습니다.
val = [1, 2, 3] for i in range(1, len(val)+1): comb_set = itertools.combinations(val, i) for sets in comb_set: print(sets)
결과
(1,) (2,) (3,) (1, 2) (1, 3) (2, 3) (1, 2, 3)
중복 조합
조합을 할때 같은 원소를 허용을 하는 경우 입니다.
val = [1, 2, 3] for i in range(1, len(val)+1): perm_set = itertools.combinations_with_replacement(val, i) for sets in perm_set: print(sets)
결과
(1,) (2,) (3,) (1, 1) (1, 2) (1, 3) (2, 2) (2, 3) (3, 3) (1, 1, 1) (1, 1, 2) (1, 1, 3) (1, 2, 2) (1, 2, 3) (1, 3, 3) (2, 2, 2) (2, 2, 3) (2, 3, 3) (3, 3, 3)
댓글 없음:
댓글 쓰기