Processing math: 100%

확률및통계/조합론2019. 3. 2. 08:00
반응형

[조합론] 4. 점화식(1: 알고리즘, 점화식들의 예)



알고리즘(algorithm)은 주어진 문제를 (컴퓨터를 사용하여) 해결하기 위한 방법을 의미하며 어떤 값 또는 값의 집합을 입력으로 받아 갑 또는 값의 집합을 출력하는 잘 정의도니 절차이다. 


다음은 알고리즘의 5가지 특징이다.

(1) 유한성(finiteness): 알고리즘은 유한번 안으로 끝나야 한다.

(2) 명확성(definiteness): 알고리즘의 각 단계는 명확하게 정의되어야 한다.

(3) 입력(input): 알고리즘이 시작되기 위해서는 초기에 어떤 특정한 값을 입력해야 한다.

(4) 출력(output): 알고리즘은 입력과 관계가 있는 몇 개의 출력이 있어야 한다.

(5) 유효성(effectiveness): 알고리즘에서의 모든 작업은 정확해야 하며, 종이와 연필로 유한 시간에 끝낼 수 있어야 한다.


알고리즘에서는 정확성과 효율성 이 두가지를 고려해야 하며, 정확성과 관련해서 고려해야 할 요소는 다음과 같다.

(1) 유한회의 과정을 통해 답을 얻을 수 있어야 한다.

(2) 단계가 분명하게 정의되어 있어야 한다.

(3) 한 단계가 끝나면 다음 단계가 명확해야 한다.


다음은 알고리즘의 예시들이다.

*참고: 다음의 알고리즘은 의사코드(psuedo code)로 작성되었다.


호너의 방법(Horner's method)


호너의 방법은 특정한 x에 대하여 다항식 f(x)=a0xn+a1xn1++an1x+an의 값을 구하는 과정이다.

Procedure poly(x)


f_{0}=a_{0}

for i=0 to n-1 do

     f_{i+1}=f_{i}×x+a_{i+1}

return f_{n}

end poly 


여러개의 수 중에서 큰 수를 찾는 알고리즘

algorithm max(a_{1}, a_{2}, ..., a_{n})


begin

        max=a_{1}

        i=2

        while i<=n

        {

        if max<a_{i} then max=a_{i}

        i=i+1

        }

        print max

end


n!을 구하는 알고리즘

Procedure factorial(n)

if n=0 then

    return(1)

   return(n*factorial(n-1))

end factorial 


음이 아닌 두 정수 ab에 대하여 두 수의 최대공약수를 구하는 알고리즘(유클리드 알고리즘)

Procedure gcd(a, b)

  if a<b then

      swap(a, b) #큰 수로 바꾸기#

  if b=0 then

     return(a)

  r=a mod b #r은 a를 b로 나누었을 때의 나머지#

  return(gcd(b, r))

end gcd 


순서도(flow chart)는 알고리즘을 그림으로 나타낸 것으로, 해결 과정을 단계적으로 쉽게 파악할 수 있게끔 그림(전개도)으로 나타낸 것이다. 

다음은 순서도에 사용되는 기호들이다.

 ìˆ˜í–‰ì˜ 시작/종료 셰이프

 시작 또는 끝을 나타내는 기호

 í”„로세스 셰이프

 처리 기호

 íŒë‹¨ 셰이프

 판단기호

 ë¬¸ì„œ 셰이프

 인쇄기호

 

다음은 순서도의 한 예시이다.

제안 프로세스를 보여 주는 순서도 예


알고리즘의 효율성을 판단하는 기준은 문제를 해결하는데 소요되는 시간이다.


예: 다음은 n개의 수 x1,x2,,xn을 크기순으로 배열하는 두가지 방법이다.


방법 1

1. 다음 알고리즘에 의해 x1,x2,,xn의 최댓값 max{x1,x2,,xn}을 찾는다.

(1) x1x2를 비교하여 max{x1,x2}를 찾는다.

(2) max{x1,x2}x3을 비교하여 max{x1,x2,x3}을 찾는다.

..........................................

(n-1) max{x1,x2,,xn1}xn을 비교하여 max{x1,x2,,xn}을 찾는다.

2. x1,x2,,xnmax{x1,x2,,xn}을 제외한 나머지 n-1개의 수를 가지고 1번의 알고리즘을 적용해서 x1,x2,,xn중 두번째로 큰 수를 찾는다.

3. 위 과정을 반복해서 x1,x2,,xn을 크기순으로 나열할 수 있다.


이 경우의 비교회수는 (n1)+(n2)++1=n(n1)2이다.


방법 2

1. x1,x2,,xn 중 임의로 y를 선택해서 나머지 n1개의 원소들을 y를 기준으로 y보다 작으면 y의 앞에, y보다 크면 y의 뒤에 두어서 두 개의 집합 X1X2로 분리한다.

2. X1X2 각각을 1과 같은 방법을 이용하여 크기순으로 나열해 합치면 원하는 배열을 얻을 수 있다.


이 경우의 비교회수는 대부분 방법 1보다 빠른 시간안에 해결가능하나 최악의 경우는 방법 1과 같은 비교회수를 통해 문제가 해결된다.


수열의 n번째 항을 그 이웃한 항이나 그보다 앞선 항들에 대한 관계식으로 나타낼 수 있을 때가 있다.(예: 피보나치 수열 an+2=an+1+an,a1=a2=1) 이러한 관계를 점화관계(recurrence relation)라고 하고 여기의 관계식을 점화식(recurrence formula)이라고 한다. 특별한 경우, 점화식과 초기조건으로부터 일반항 an의 식을 유도할 수 있다.


예: 하노이 탑 문제(Hanoi tower problem)

(하노이 탑 모형)

등판에 막대가 3개 있고, 크기가 서로 다른 n개의 원판이 한 막대에 크기순으로(큰 원판이 작은 원판보다 아래에 놓임) 꽂혀 있다. 이때 다음의 규칙대로 원판을 다른 막대로 옮긴다.

(1) 한 번에 한개의 원판만을 옮긴다.

(2) 크기가 큰 원판은 반드시 크기가 작은 원판 아래쪽에 있어야 한다.

그러면 원판을 모두 다른 막대로 옮기는데 필요한 최소한의 이동 횟수는?


풀이: 원판의 개수가 n일 때, 최소 이동횟수를 an이라 하자. 그러면a1=1,a2=3이고

임의의 n에 대하여, 가장 큰 원판을 처음으로 옮길 때에는, 다른 원판들은 모두 하나의 막대에 크기순으로 배열되어 있어야 한다. 따라서 가장 큰 원판을 옮기기 전까지의 최소 이동횟수는 an1이다. 가장 큰 원판을 비어있는 다른 원판에 이동한 다음, 나머지 n1개의 원판을 가장 큰 원판이 놓여 있는 막대로 이동해야 한다. 따라서 an=2an1+1이 성립하고a3=2a21=7=231a4=2a3+1=2(231)+1=241이므로 an=2n1이다.

(n=4일 때, a4=241=15이다)


*참고: 베트남 하노이 시 외곽에 있는 베나레스(Benares) 사원의 한 가운데에 있는 돔(Dome)에 다음의 전설이 기록된 동판이 있다:

"동판에 다이아몬드 막대가 3개 있고, 크기가 서로 다른 64개의 황금 원판이 한 막대에 꽂혀있다. 이때 다음과 같은 규칙으로 황금 원판을 다른 막대로 모두 옮기는 놀이를 신(god, 神)이 하고 있다

(1) 한번에 한개의 황금원판만을 옮긴다.

(2) 크기가 큰 황금원판은 반드시 크기가 작은 황금 원판 아래에 있어야 한다.

신이 이 놀이를 끝내면(황금원판이 다른 막대로 모두 옮겨졌다면), 이 세상은 종말이 올 것이다."

실제로 황금원판 한개를 다른 원판으로 옮기는데 1초가 걸린다고 가정하면, 황금원판이 다른 막대로 모두 옮겨지는데 걸리는 시간은 2641=18,446,744,073,709,551,615초(대략 5833억년)가 걸린다.(걱정할 필요가 없다)


예: 한 아이가 7개의 계단을 올라간다고 하자. 이때 한번에 하나 또는 두개의 계단을 오를 수가 있다. 이 아이가 7개의 계단을 서로 다르게 오르는 방법의 수는?

풀이: n개의 계단을 오르는 경우의 수를 an이라 하자. 그러면 a1=1,a2=2익, n3인 경우, 처음에 한 개의 계단을 오르는 경우, 이 경우의 수는 남아있는 n1개의 계단을 오르는 방법의 수와 같으므로 an1가지가 된다. 처음에 두개를 오르는 경우, 남아있는 n2개의 계단을 오르는 방법의 수와 같으므로 an2가지가 된다. 따라서 다음의 점화식an=an1+an2(a1=1,a2=2,n3)을 얻고a7=a6+a5=2a5+a4=3a4+2a3=5a3+3a2=8a2+5a1=16+5=21이다.

참고: 위의 점화식을 갖는 수열을 피보나치 수열(Fibonacci sequence)이라고 한다.


예: 평면상에 n개의 직선이 나누는 영역의 최대 개수(어떤 두 직선도 평행하지 않고, 어떤 세 직선도 한 점에서 만나지 않도록 직선을 그을 때 생기는 영역의 수)는?

풀이: n개의 직선으로 나눌 때 생기는 영역의 최대 개수를 an이라고 하자. 그러면 a1=2이고 n2일 때, n번째 직선을 그리면 나머지 n1개의 직선과 만나는 교점의 수는 n1개이고, 영역의 수는 n개 더 늘어난다. 따라서 점화식an=an1+n,a1=2(n2)을 얻고 일반항은an=1+n(n+1)2이다.


예: 0,1,2로 이루어진 길이가 n3n개의 수열 중 0의 개수가 홀수인 수열의 개수는?

풀이: 길이가 n이고 0의 개수가 홀수인 수열의 개수를 bn이라고 하자.

끝자리가 1인 경우는 bn1개 이고, 끝자리가 2인 경우는 bn1개, 끝자리가 0인 경우, 3n1bn1이므로 다음의 점화식을 얻고bn=bn1+3n1,b1=1이므로 bn=3n12이다.


참고자료:

조합론과 그래프이론, 조성진, 김한두, 경문사

https://www.scienceall.com/%EC%88%9C%EC%84%9C%EB%8F%84flow-chart/

https://support.office.com/ko-kr/article/%EA%B8%B0%EB%B3%B8-%EC%88%9C%EC%84%9C%EB%8F%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-e207d975-4a51-4bfa-a356-eeec314bd276

https://en.wikipedia.org/wiki/Tower_of_Hanoi 

수학비타민, 박경미, 랜덤하우스 중앙     

반응형
Posted by skywalker222