¡ 알고리즘은 무엇이지? Wiki 에 있는 글을 보니 이렇게 쓰여 있다 :
“In mathematics, computing, linguistics, and related disciplines, an algorithm is a procedure (a finite set of well-defined instructions) for accomplishing some task which, given an initial state, will terminate in a defined end-state. The computational complexity and efficient implementation of the algorithm are important in computing, and this depends on suitable data structures.”
“알고리즘은 수학, 전산학, 언어학 등에서 쓰이는 말로 이는 어떤 태스크(작업)를 초기조건에서 시작해 일련의 유한한 숫자의 잘 정의된 실행단계를 거쳐 원하는 결과에 도달하는 과정을 말한다” 이렇게 정의되었다. 보통 말로 하면 “문제풀이”이다. 알고리즘은 어떤 문제/태스크에 대한 솔루션이다. 그러면, 세상에서 얼마나 많은 문제들이 있는데, 거기에 따른 솔루션이 다 알고리즘이겠네? 아들녀석 진학을 어떻게 해야하나도 태스크인데. 그러면, 진학지도를 어떻게 해야하나 하는 문제에 대한 문제풀이가 알고리즘이라 할 수 있을까?
알고리즘 정의에 비추어 생각해보자. 알고리즘은 어떤 태스크에 그 알고리즘이 적용되면 (목표한) end-state (종료상태)에 도달해야 한다. 그러면 진학의 종료상태는 “목표 대학” 쯤 되겠다. 그러면 “이렇게 이렇게 하면” 항상 우리가 원하는 목표대학에 갈 수 있나? 좀 어렵겠다. 그러니 “진학”이라는 문제에 대한 문제풀이는 엄밀한 의미에서 알고리즘이라 하기에 부족하다. 마찬가지로 "연애의 정석" 도 알고리즘이라 말할 수 어렵겠다. 아닌가? 정말 그렇게 하면 되나? 여하간, 알고리즘은 흔히 수학, 전산학, 언어학과 같은 엄밀한 (rigorous) 논리체계가 뒷받힘하는 분야에 적용된다.
컴퓨터분야에서 알고리즘을 배운다는 것은 보편적으로 이 쪽에서 많이 사용되는 태스크에 관한 표준 솔루션을 익히는 것이다. 문제풀이도 품질이 있게 마련이다. 어떤 풀이는 스마트하고, 또 어떤 것은 문제를 풀긴하는데 영 데데한 것이 있다. 알고리즘 과목에서는 어떤 풀이가 좋은 지, 그러면 좋다는 것이 어떤 의미인지 이런 것을 배운다. 또, 어떤 문제들은 아직까지도 좋은 풀이법이 없다는 것도 배운다.
자료구조 (Data Structures) 와 알고리즘은 어떤 관계일까? 간단하다. 문제풀이를 하다보면 그 문제풀이를 형상화한다고 할까, 아니면 구현한다고 할까 뭐 그런 적절한 틀(그림)이 필요할 경우가 많다. 그 틀이 자료구조이다. 자료구조와 알고리즘 관계는 퍽 밀접해서, 알고리즘은 그 알고리즘을 생각해내기 위해 함께 그에 적절한 자료구조 형태를 생각해 내어야 하는 경우가 많다. 그리고는 자료구조를 정말로 그려보면서 알고리즘을 생각해 내는 경우가 많다. 알고리즘 정의를 어떻게 하는가를 깊이 알고 싶은 사람들은 여기에서
¡ 알고리즘 이라는 말의 기원은? Wiki에 의하면 서기 825년에 회교수학자인 al-Khwārizmī 양반이 “On Calculation with Hindu Numerals” (힌두 숫자에 따른 계산법) 이라는 논문을 발표했는데, 이게 한참 뒤 12세기에 라틴어로 “Algoritmi de numero Indorum (영어로는 Algoritmi on the numbers of the Indians)" 는 제목으로 번역 출판되었다. 그런데, 이게 문제를 일으켰는데, 이를 해석해보면 “인도 숫자에 대한 Algoritmi” 라고 이해할 수 있고, 또는 “Algoritmi에 의한 인도 숫자에 대한 고찰” 이렇게도 해석될 수 있다. 무엇이 맞을까? 물론 후자이다. 12세기 번역자도 이런 의미로 제목을 붙였을 것이다. 여기서 Algoritmi 는 물론 회교수학자인 al-Khwārizmī 를 라틴말로 소리낸 것이다. 그런데, 사람들은 전자인 “인도 숫자에 대한 Algoritmi” 라고 이해해 버렸다. 이렇게 되었으니, 또 마침 논문 내용도 숫자에 관한 계산법이고 하니 자기들 상상데로 Algoritmi 를 “계산법” 이라는 말로 (사실 이런 단어 있지도 않았는데) 간주해 버렸고, 라틴어로 Algoritmi 가 ‘i” 로 끝나니 이는 복수형이고 그러면 Algoritmi의 단수형은 “Algoritmus” 일 것이고, 이게 어떻게 어떻게 되어서 뒤에 붙은 “us” 가 떨어져나가 Algoritm이 되었고, 여기서 또 사람들이 그리스말로 “arithmos” 가 숫자를 가르키는데 뭐 발음이 비슷하니 arithmos 에 있는 ‘h’ 를 갖고 와 algoritm 에 넣어 algorithm 이 되었다 한다. 무하마드 이븐무사 알 콰리즈미 이 분 이름 잘 기억해야지. 2차 방정식을 체계적으로 푸는 방법을 고안해서 "대수학의 아버지"라고 한단다. 흐...
그렇구나! 알고리즘은 원래 9세기 이슬람 수학자 "알콰리즈미"에서 유래한 것이었구나. 이걸 보다가 우리나라 서울 이름이 원래 서라벌, 셔블, 서울이 되었다는 것을 아느냐고 우리 직원들에게 물어본 기억이 생각이 난다. 그런데, 모르는 친구들이 있었다. 요즘 국어에서 안 배우나?
'소프트웨어 이야기 > 알고리즘' 카테고리의 다른 글
왜 알고리즘을 알아야 하지? (6) | 2007.04.05 |
---|