알고리즘은 프로그램보다 훨씬 오래 전부터 있던 개념입니다.
프로그램은 컴퓨터가 나온 이후, 즉 세계 최초의 기계식 컴퓨터가 발명된 19세기 중반부터 나온 것이지만, 알고리즘은 무려 기원전부터 존재했던 개념입니다.
알고리즘은 '문제를 풀기 위한 절차'입니다. 알고리즘을 영어사전에서 찾아보면 '산법'이라고 나오기도 하는데, 이는 '어떤 문제를 해결하기 위해 입력된 자료를 토대로 원하는 출력을 유도하는 규칙의 집합'을 뜻합니다.
알고리즘을 '문제를 풀기 위한 절차'라고 한다면 요리 레시피도 알고리즘의 하나라고 말할 수 있습니다. 요리 레시피에는 필요한 재료나 사용할 분량, 구체적인 요리 절차가 있습니다. 예를 들어 카레라이스 레시피대로 요리하면 누가 만들어도 비슷한 카레라이스가 완성됩니다. 올바른 알고리즘을 따른다면 누가 작업을 하더라도 같은 결과를 얻을 수 있습니다. 이 의미대로라면 항공사의 고객 응대 매뉴얼도 알고리즘의 하나라고 말할 수 있습니다. 같은 항공사에서는 어떤 비행기를 타도 비슷한 고객 응대를 받을 수 있습니다. 따로 매뉴얼이 준비되어 있기 때문입니다. 이 매뉴얼이 있기에 새로 들어온 직원이나 배테랑 직원이 모두 고객에게 같은 서비스를 제공할 수 있는 것입니다.
알고리즘의 어원
알고리즘의 어원은 8~9세기에 활약한 아라비아 수학자 알 콰리즈미(Al-Khwarizmi)에 있습니다. 중앙 아시아 서부에 존재한 도시, 호라즘 출신 수학자인 알 콰리즘은 저서 <Calculation With Indian Numerals>로 아라비아 수학을 유럽에 널리 전했습니다. 이 책이 12세기에 라틴어로 번역되었을 때 제목이 'Algoritmi de numero Indorum'입니다. 라틴어로 그의 이름 Algoritmi(알고리트미)를 아라비아 숫자에 의한 계산법을 의미하는 일반 명사 algorithm(알고리즘)으로 바꾼 것입니다.
알고리즘과 프로그램의 차이
IT 세계에서는 프로그램과 알고리즘이라는 단어를 자주 혼동하곤 합니다.
알고리즘은 프로그램보다 더욱 추상적인 개념입니다.
알고리즘은 문제 해결을 위한 '작업 절차 자체'이며, 기본적으로 그 절차를 실행하는 수단은 언급하지 않습니다.
그러자 실제로 문제를 풀려면 어떤 수단으로 알고리즘을 실행해야 합니다. 이 알고리즘을 실제로 실행할 수 있는 형태로 구현한 것이 프로그램입니다.
컴퓨터 이전의 알고리즘과 그후
알고리즘은 처리 절차 그 자체이며, 기본적으로 그것을 실행하는 수단과는 관계가 없습니다. 따라서 어떤 복잡한 알고리즘이라도 사람의 손으로 직접 실행할 수 있습니다.
예를 들어 유클리드 호제법 외에도 이미 고대 그리스 시대에는 사람의 손으로 알고리즘을 실행하는 삼각함수 표가 있었습니다.
컴퓨터의 등장으로 알고리즘 세계는 크게 변합니다. 그때까지 고안은 했어도 현실적인 실행 수단이 없었던 알고리즘이 컴퓨터 프로그램 형태로 실현되어 하나둘씩 실행돼 갔습니다. 에니악을 비롯한 컴퓨터는 기존에 있던 기계식 계산기보다 1000배 정도 빨랐으며, 실제로 엄청난 알고리즘 실행 능력을 보여줬습니다.
알고리즘의 설계와 실행의 차이
알고리즘은 실행자가 해석을 넣을 여지가 없는 명쾌한 절차입니다. 따라서 '지성이 없는' 컴퓨터를 이용해 기계적으로 실행할 수 있습니다. 컴퓨터는 알고리즘을 실행할 때 알고리즘의 의미 등은 전혀 신경 쓰지 않습니다. 묵묵히 그리고 정확히 주어진 절차를 따를뿐입니다. 이것이 사람과 컴퓨터의 큰 차이입니다.
바로 이것이 알고리즘의 핵심입니다. 올바른 알고리즘을 만드는 사람은 이걸로 잘 실행 될까? 어떤 경우라도 잘 실행될까? 등 많은 것을 생각해야 하지만, 일단 만들어진 알고리즘을 사용하는 사람(혹은 그것을 사용하는 기계)은 그저 절차를 따르기만 하면 됩니다.
의미는 몰라도 배운대로 절차만 정확하게 따르면 언젠가는 정답에 도달하는 것, 그것이 알고리즘입니다.
정리하자면,
- 알고리즘은 문제를 풀기 위한 절차이다.
- 알고리즘은 주어진 입력에서 필요한 출력을 얻는 방법을 간단한 조작이나 절차를 조합해서 명확히 정의한 것이다.
- 프로그램은 프로그래밍 언어로 쓰여진 알고리즘의 작업 지시서이며 알고리즘 그 자체가 아니다.
- 필요한 결과를 얻기 위해 사용할 수 있는 알고리즘이 하나만 있는 것은 아니다.
- 알고리즘은 작업자와 상관없이 어떤 환경에서도 같은 결과를 낼 수 있어야 한다.
- 알고리즘은 컴퓨터만의 것이 아니다.
출처: 스즈키 고이치 김은철 유세라 , 『모두의 알고리즘 with 자바스크립트 = Algorithms for everyone : 세상을 움직이는 기초 알고리즘 : 즐거운 프로그래밍 경험』, 서울 : 길벗, (2018), p.13-42