2023년 4월 30일 일요일

순열(Permutations)과 조합(Combinations) in python

집합에서 조합

일반적으로 조합이라고 말은 하지만 수학적인 표현에 있어서는 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)



댓글 없음:

댓글 쓰기