순열과 조합

2022. 9. 7. 01:08·Python 활용하기
728x90
반응형

1. 중복을 허용하지 않는 경우

1 - 1. 순열 (permutations)

$${}_n{\rm P}_r = \frac{n!}{(n-r)!}$$

- p개 중에서 중복을 허용하지 않고 r개를 뽑아 나열하는 경우의 수
- 나열하기 때문에 순서가 다르면 다른 경우로 취급한다.

from itertools import permutations

a = [1,2,3,4,5]
b = list(permutations(a, 2)) # a에서 2개를 뽑아 나열하는 경우
print(b)
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4)]

1 - 2. 조합 (combinations)

$${}_n{\rm C}_r = \frac{n!}{(n-r)!r!}$$

- p개 중에서 중복을 허용하지 않고 r개를 뽑는 경우의 수
- 나열하지 않기 때문에 순서는 고려하지 않는다.

from itertools import combinations

a = [1,2,3,4,5]
b = list(combinations(a, 2)) # a에서 2개를 뽑는 경우
print(b)
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]

 


2. 중복을 허용하는 경우

2 - 1. 중복순열 (product)

$${}_n{\rm \pi}_r = n^r$$

- n개 중에서 중복을 허용하여 r개를 나열하는 경우의 수

from itertools import product

a = [1,2,3]
b = list(product(a, repeat=2))
print(b)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

2 - 2. 중복조합(combinations_with_replacement)

$${}_n{\rm H}_r = _{n+r-1}{\rm C}_r$$

- n개 중에서 중복을 허용하여 r개를 뽑는 경우의 수

from itertools import combinations_with_replacement

a = [1,2,3]
b = list(combinations_with_replacement(a,2))
print(b)
[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

'Python 활용하기' 카테고리의 다른 글

[Algorithm] LIS(Longest Increase Sequence)  (0) 2023.01.12
시간복잡도 생각하기 (지속 업데이트)  (0) 2022.11.27
소수 (Prime Number)  (0) 2022.09.27
정규 표현식  (0) 2022.09.26
진법 변환  (0) 2022.09.25
'Python 활용하기' 카테고리의 다른 글
  • 시간복잡도 생각하기 (지속 업데이트)
  • 소수 (Prime Number)
  • 정규 표현식
  • 진법 변환
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188) N
      • ML_DL (39) N
        • MUJAKJUNG (무작정 시리즈) (18) N
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
순열과 조합
상단으로

티스토리툴바