알고리즘이란
알고리즘이란
알고리즘이란 간단히 말해 ‘어떤 문제를 풀기 위한 절차나 방법’을 뜻한다. 예를 들어 어떤 문제에 대해 주어진 정보(입력)를 원하는 답(출력)의 정보로 바꿔주는 일련의 과정을 말한다. 알고리즘의 각 단계는 구체적이고 명료해야한다.
절댓값 구하기를 예로 들어보자.
중학교 즈음에 배우는 ‘절댓값’은 ‘0부터 그 수 까지의 거리에 해당하는 값’을 의미한다. 예를 들어
-3과 3은 0을 기준으로
1
2
3
-- -- -- -- -- -- -- -- --
-4 -3 -2 -1 0 +1 +2 +3 +4
< < < < > > > >
서로 «<, »> 만큼의 같은 거리를 가지고 있다. 그리고 이 때 |3|이라고 표현한다. 양수라면 그 값이 절댓값이 되고, 음수라면 그 값에 -(마이너스)를 붙여 절댓값을 표현할 수 있다.
절댓값을 구하려면
- a가 0보다 크거나 같은지 확인, 만약 그렇다면 a를 return
- 위의 경우가 아니라면(a가 0보다 작으면) -a를 return
a | = { a (a>=0), -a (a<0) } |
이걸 ‘실수의 절댓값을 구하는 알고리즘’이라고 표현할 수 있다. 이렇게 계산과정을 풀이하고 최대한 구체적이고 명료하게 적어주어야 알고리즘이라고 할 수 있다.
알고리즘은 중세시대 페르시아의 알-콰리즈미(al-Khwarizmi)라는 수학자의 이름에서 나온 말이다. 이 수학자는 이차방정식의 풀이와 인수분해를 개발한 사람으로도 유명함
하지만 절댓값을 구하는 방법에는 $ | a | = \sqrt (a^2)$ 의 방법으로 주어진 a를 제곱하고 제곱근을 취하는 방법도 있다. 이렇듯 한 가지 문제를 푸는 여러 가지 방법, 여러 가지 알고리즘에서 적합한 알고리즘을 골라서 사용하고 얼마나 계산이 빠르고 편리한지를 찾아내는걸 알고리즘 분석이라고 한다. |
절댓값 구하는 알고리즘을 파이썬으로
알고리즘을 분석하고 계산과정을 알아냈다면, 그 과정을 코드로 구현해서 컴퓨터에 적용할 수 있게 해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
import math
#a가 0보다 크거나 같으면 a를 결과로, 아니면 -a를 결과로
def abs_sign(a):
if a>=0:
return a
else
return -a
#위에서 설명한 다른 방법(제곱근)
def abs_square(a):
b = a*a
return math.sqrt(b) #math 모듈의 제곱근 함수 사용
댓글남기기