본문 바로가기

순열 본문

파이썬/파이썬과 기초수학

순열

jaegomhoji 2022. 1. 25. 23:42

* 순서를 지켜서 일렬로 나열하는 경우의 수 

* n개에서 r개를 택하여 나열하는 경우의 수 -> nPr 이라고 표현 

* 순열은 순서를 따지지만, 조합은 따지지 않는다 

* nPr = n(n-1)(n-2) ... (n-r+1) 단, (0 < r <= n)

* 팩토리얼을 통해 나타낼 수 있다

  nPr = n! / (n-r)!  

* 원리를 따지면서 생각하면 쉽다

 ex) 4P2은 4개중에서 2개를 순서대로 고른다 ( 모든 경우의 수 )

-> 4*3*2*1 / 2*1 ( 고르지 않은 나머지 2개의 중복을 제거한다 )

 abcd 

모든 경우의 수 4! = ( ab ac ad ba bc bd ca cb cd da db dc ) * (ab 일때 cd와 dc , ac 일때 bd와 db ...... dc일때 ab와 ba -> 계속 2가지의 경우의 수가 있다 )  

따라서 중복을 제거 

 

 ex) 5P3은 5개중에서 3개를 순서대로 고른다 ( 모든 경우의 수 ) 

-> 5*4*3 / 2*1 ( 고르지 않은 나머지 2개의 중복을 제거한다 )

모든 경우의 수 5! = ( abc abd abe acb acd ace adb adc ade aeb aec aed ... eda edb edc ) * (abc 일때 de와 ed , abe 일때 cd와 dc ...... edc일때 ab와 ba -> 계속 2가지의 경우의 수가 있다 )

따라서 중복을 제거

 

 ex) 8P5은 8개중에서 5개를 순서대로 고른다 ( 모든 경우의 수 ) 

-> 8*7*6*5*4 / 3*2*1 ( 고르지 않은 나머지 3개의 중복을 제거한다 )

 

* 정리는 노트에 기록함

* jupyter notebook ( python 3 )

 

 

<< 복붙용 코드 >>

 

* nPr 

 

numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
result=1

 

# for 문을 사용해서 n! / n-r! 을 range 함수로 구현 
# -> n * (n-1) * (n-2) ... (n-r+1) 까지 곱해진다 

for n in range(numN, (numN-numR),-1): # 하나씩 차감하면서 진행, numN > numR, 10-4 = 6 이지만, range 함수 특성상 1개 전까지 시행
    print('n : {}'.format(n))
    result = result * n 
    
print('result : {}'.format(result))

 

* 원순열 , (n-1)! for문으로 만들기 

numN = int(input('numN 입력: '))

 

result = 1 
for i in range(1,numN):    
    result *= i
    print('loops:{}'.format(i))

print('result:{}'.format(result))

'파이썬 > 파이썬과 기초수학' 카테고리의 다른 글

확률  (0) 2022.01.26
조합  (0) 2022.01.26
군수열  (0) 2022.01.25
팩토리얼  (0) 2022.01.25
피보나치 수열  (0) 2022.01.25
Comments