brunch

You can make anything
by writing

C.S.Lewis

by Younggi Seo Apr 19. 2022

가우스 알고리즘

논리적 증명에서 비롯하는 프로그래밍의 기초


코딩과 영어의 학습원리는 일맥상통한다. 코딩 / 영어의 기본기는 논리적 사고 절차(기초수학 / 기초문법)이고, 기초체력은 자기 수준보다 조금 높은 소재(코딩에선 게임프로젝트 한 개, 영어에서는 통속소설 한 권)를 가지고 끊임없이 어떤 절차로 구현하는지(해석하는지) 연습하면 키울 수 있다는 거!




 



학교에서 선생님의 1부터 50까지의 합이 얼만지에 대한 질문에 단 번에 발상해냈다는 것으로 유명한 수학자 가우스에 대해 한 번쯤 들어봤을 법하다.


가우스는 1부터 100의 첫 번째 숫자 1과 맨 끝 숫자 100을 더한 값 101과 같은 수의 배열이 총 50개 있으므로 101 X 50 = 5050로 이끌어낸 수학식으로 증명했다(천재!).


똑같은 원리로 가우스 등식, n까지의 합을 덧셈, 곱셈, 나눗셈 각 1번씩만 써서 구할 수 있다.

누적합을 증가하는 순, 감소하는 순으로 각각 나열해보면 다음 두 등식을 얻는다.


sigma(n) =  1 + 2 +... + (n-1) + n
sigma(n) =  n + (n-1) +... + 2 + 1


위의 두 등식에서 각 항의 아래와 위를 합하면 다음 등식이 성립하고,

sigma(n) =  (n+1) + (n+1) + (n+1) + (n+1)


이 등식을 정리하면 다음 등식이 되고,

2 x sigma(n) = n x (n + 1)


 양변을 2로 나누면,

sigma(n) = n x (n + 1) / 2

위의  덧셈, 곱셈, 나눗셈 각 1번씩만 쓴 등식을 사용하여 n까지의 자연수의 누적 합을 구하는 함수를 다음과 같이 간단히 구현할 수 있다(도경구, 2021).


def sigma(n):
       return n * (n+1) // 2

위의 누적 합을 계산하는 가우스 알고리즘을 또한 참인지 아닌지를 검증해보자.


앞서 재귀라는 개념에서 자연수의 귀납 구조를 활용한 아래의 수학적 귀납법(mathematical induction)으로 모든 자연수에 대해서 이 알고리즘이 잘 작동하는지 검증할 수 있다(도경구, 2021).



- 수학적 귀납법(모든 자연수)

기초 단계(base) : P(0)은 참이다.

귀납 단계(induction) : 임의의 자연수 n에 대해서 P(n)이 참이면, P(n+1)도 참이다.


- 가우스 알고리즘 정리

임의의 자연수 n까지의 누적합 sigma(n)을 다른 식(가우스 등식)으로 계산함.

sigma(n) = n x (n + 1) / 2


- 증명(수학적 귀납)

기초 단계(base) : 0까지의 누적 합은 0이어여야 함. 위의 식에 0을 대입하면 0이므로 n이 0일 때 앞의 명제는 참임.

귀납 단계(induction) : 임의의 자연수 n에 대해서 n까지의 누적 합이 다음과 같다고 가정하자.     - sigma(n) = n x (n + 1) / 2 (귀납 과정, induction hypothesis)

귀납 단계의 증명은 가우스 등식에 sigma(n+1)를 대입한 sigma(n ← n+1)

    - sigma(n+1) = (n+1 x ((n+1) + 1)) / 2

이 등식이 귀납 가정을 활용하여 다음과 같이 유도해서 정리한 식과 동일한 지의 여부를 따진다.


귀납 정의 등식, sigma(n+1) = sigma(n) + n+1에서 우변의 n까지의 합, 즉 sigma(n)을 가우스의 등식(n까지의 합)으로 바꿈  

sigma(n+1) =   n x (n + 1) / 2 + n+1   ←  통분함.

sigma(n+1) =  (n x (n+1) + 2(n+1)) / 2 ←  분자 정리함.

sigma(n+1) = (n+1)(n+2) / 2


정리한 식의 우변은 가우스 등식에 sigma(n+1)를 대입한 우변의 식 (n+1 x ((n+1) + 1)) / 2와 동일함.

기초 단계와 귀납 단계가 모두 참이므로, 수학적 귀납법에 의해서 가우스의 등식(알고리즘)은 참이다.





참조

1) 도경구 (2021). 제어 구조의 설계 원리를 중심으로 배우는 프로그래밍의 정석 파이썬.











매거진의 이전글 재귀
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari