순열(Permutaion)
경우의 수
주사위 2개를 시행할 경우 발생되는 모든 경우는 다음과 같습니다.-
event=[]
for i in range(1, 7):
- for j in range(1, 7):
- event.append((i, j))
print(event, end="")
- [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
두 실험을 실행하는 경우 실험 1와 2 에서 발생할 수 있는 모든 경우가 m과 n이라면 두 실험을 함께 시행할 경우 발생하는 모든 경우의 수는 m × n 으로 계산합니다.
예) 3개의 파란공과 10개의 빨간공을 쌍으로 연결할 경우 발생하는 경우는 다음과 같습니다. -
blue=['b'+str(i) for i in range(1, 4)]
red=['r'+str(j) for j in range(1, 11)]
- blue
- red
re=[]
for i in blue:
- print( )
for j in red:
- print((i, j), end="")
- re.append((i, j))
- ('b1', 'r1')('b1', 'r2')('b1', 'r3')('b1', 'r4')('b1', 'r5')('b1', 'r6')('b1', 'r7')('b1', 'r8')('b1', 'r9')('b1', 'r10')
- ('b2', 'r1')('b2', 'r2')('b2', 'r3')('b2', 'r4')('b2', 'r5')('b2', 'r6')('b2', 'r7')('b2', 'r8')('b2', 'r9')('b2', 'r10')
- ('b3', 'r1')('b3', 'r2')('b3', 'r3')('b3', 'r4')('b3', 'r5')('b3', 'r6')('b3', 'r7')('b3', 'r8')('b3', 'r9')('b3', 'r10')
allCase=len(re)
allCase
- 30
allCase2=3*10 #위 공식을 적용(n × m)
allCase2
- 30
-
f=["f"+ str(i) for i in range(1, 4)]
s=["s"+ str(i) for i in range(1, 6)]
j=["j"+ str(i) for i in range(1, 3)]
f
- ['f1', 'f2', 'f3']
s
- ['s1', 's2', 's3', 's4', 's5']
j
- ['j1', 'j2']
re=[]
for l in f:
- print()
- for m in s:
- print()
for n in j:
- print((l, m, n), end="")
- re.append((i, s, j))
- ('f1', 's1', 'j1')('f1', 's1', 'j2')
- ('f1', 's2', 'j1')('f1', 's2', 'j2')
- ('f1', 's3', 'j1')('f1', 's3', 'j2')
- ('f1', 's4', 'j1')('f1', 's4', 'j2')
- ('f1', 's5', 'j1')('f1', 's5', 'j2')
- ('f2', 's1', 'j1')('f2', 's1', 'j2')
- ('f2', 's2', 'j1')('f2', 's2', 'j2')
- ('f2', 's3', 'j1')('f2', 's3', 'j2')
- ('f2', 's4', 'j1')('f2', 's4', 'j2')
- ('f2', 's5', 'j1')('f2', 's5', 'j2')
- ('f3', 's1', 'j1')('f3', 's1', 'j2')
- ('f3', 's2', 'j1')('f3', 's2', 'j2')
- ('f3', 's3', 'j1')('f3', 's3', 'j2')
- ('f3', 's4', 'j1')('f3', 's4', 'j2')
- ('f3', 's5', 'j1')('f3', 's5', 'j2')
AllCase=len(re)
AllCase
- 30
- 각 시험은 n1, n2, ..., nr로 구성된 r개의 실험들에서 총 경우의 수는 다음과 같이 계산됩니다.
- n1 × n2 × ... × nr
-
26*26*26*26*10*10*10*10
- 4569760000
-
26*(26-1)*(26-2)*(26-3)*10*(10-1)*(10-2)*(10-3)
- 1808352000
Permutation
문자 a, b, c를 순서있게 배열하는 경우는 다음과 같습니다.
3·2·1 = 6
- 위의 식을 일반화하면 n개의 샘플들을 순서있게 배열하는 총 경우의 수는 다음과 같습니다.
- n·(n-1)·(n-2)·…·2·1 = n!
- factorial(!)은 python의 math 모듈 함수 factorial()을 사용하여 계산할 수 있습니다.
-
import itertools
list(itertools.permutations(da, 3))
- [('a', 'b', 'c'),
- ('a', 'c', 'b'),
- ('b', 'a', 'c'),
- ('b', 'c', 'a'),
- ('c', 'a', 'b'),
- ('c', 'b', 'a')]
-
import math
math.factorial(9)
- 362880
x=list(range(1, 10))
list(itertools.permutations(x, 9))
- [(1, 2, 3, 4, 5, 6, 7, 8, 9),
- (1, 2, 3, 4, 5, 6, 7, 9, 8),
- … ]
정리할 수 있는 총 경우의 수는 10!이 됩니다. 그러면 각 분야별로 정리하는 방법의 수는 어떻게 계산될까요?
소설: 3!, 전공서적: 4!, 만화: 3! 그리고 각 분야를 나열하는 방법:3!을 고려합니다.
-
x=[3,4,3,3]
re=1
for i in x:
- re *= math.factorial(i)
- 5184
-
x=['a1', 'a2', 'b']
list(enumerate(itertools.permutations(x, 3)))
- [(0, ('a1', 'a2', 'b')),
- (1, ('a1', 'b', 'a2')),
- (2, ('a2', 'a1', 'b')),
- (3, ('a2', 'b', 'a1')),
- (4, ('b', 'a1', 'a2')),
- (5, ('b', 'a2', 'a1'))]
- ('a1', 'a2', 'b') = ('a2', 'a1', 'b')
- ('a1', 'b', 'a2') = ('a2', 'b', 'a1'))
- ('b', 'a1', 'a2') = ('b', 'a2', 'a1')
- 전체 객체의 수 n 개가 다음과 같이 구성되어 있는 경우
- n=n1+n2+…+nr-1+nr
-
p=[3,4,3]
re1=1
for i in p:
- re1 *= math.factorial(i)
- 864
math.factorial(10)/re1
- 4200.0
댓글
댓글 쓰기