수학 개념 지도
알고리즘(Algorithm)

알고리즘(Algorithm)

유한한 단계로 끝나는 명확한 계산 절차. 이름은 9세기 바그다드의 알콰리즈미에서 왔고, 유클리드 호제법⁠(Euclidean algorithm)⁠이 가장 오래된 예로 꼽힌다.

gcd⁡(a,b)=gcd⁡(a−b, b)=gcd⁡(a mod b, b)(a≥b>0)\gcd(a, b) = \gcd(a - b,\ b) = \gcd(a \bmod b,\ b) \qquad (a \ge b \gt 0)

알고리즘은 정해진 입력을 받아, 하나하나가 모호하지 않은 명령을 유한 번 수행하고 멈추어 출력을 내는 계산 절차입니다. 요리법과 닮았지만 '적당히'나 '노릇해질 때까지' 같은 말은 허용되지 않습니다. 누가 따라 해도, 기계가 따라 해도 같은 결과가 나와야 합니다. 이름은 9세기 바그다드의 학자 알콰리즈미에서 왔습니다. 인도식 자리값 기수법으로 계산하는 법을 다룬 그의 책이 라틴어로 옮겨지면서, 그의 이름이 '계산 규칙'을 뜻하는 말이 되었습니다.

가장 오래된 예로 흔히 꼽히는 것은 기원전 300년 무렵 유클리드의 『원론』에 실린 최대공약수⁠(greatest common divisor)⁠ 구하기입니다. 큰 수에서 작은 수를 빼도 최대공약수는 그대로이니, 한쪽이 0이 될 때까지 빼기를 되풀이하면 남은 수가 답입니다. 같은 문제를 푸는 알고리즘은 여러 개일 수 있습니다. 빼기를 여러 번 하는 대신 한 번에 나머지를 구하면(나눗셈) 걸음 수가 확 줄어듭니다.

흰검은 점을 끌어 보세요. 지금 (a,b)=(a, b) = 이고 최대공약수는 입니다. 빼기만 쓰는 방법(회색 계단)은 걸음, 나머지를 쓰는 방법(노란 점)은 걸음입니다. (89, 55) (89, 1)

빼기 한 번은 계단 한 칸, 나머지 한 번은 한 방향으로 갈 수 있는 데까지 한꺼번에 가는 것입니다. 축에 닿으면 끝나고, 남은 좌표가 최대공약수입니다.

나머지를 쓰는 방법이 가장 오래 걸리는 입력은 이웃한 두 피보나치 수입니다. 몫이 매번 1이라 한 번에 조금씩밖에 줄지 않기 때문입니다. 거꾸로 말하면, 나눗셈을 k번 해야 하는 입력의 작은 수는 적어도 k+1번째 피보나치 수입니다. 피보나치 수는 다섯 항마다 열 배 넘게 커지므로, 걸음 수는 작은 수의 (십진법) 자릿수의 다섯 배를 넘지 않습니다. 1844년 프랑스의 수학자 가브리엘 라메가 증명한 라메의 정리입니다. 지금 입력이라면 걸음이 상한입니다. 반면 빼기만 쓰면 (n,1)(n, 1)에서 n걸음이 걸립니다. 입력이 커질 때 걸음 수가 어떻게 자라는지를 재는 말이 점근 표기법⁠(asymptotic notation)⁠이고, 두 방법의 차이는 자릿수만큼 자라느냐 수 자체만큼 자라느냐입니다.

무엇이 '명확한 절차'인지를 수학적으로 정한 것은 1930년대의 일입니다. 영국의 튜링은 기호가 적힌 긴 테이프를 한 칸씩 읽고 쓰며 움직이는 가상의 기계, 곧 튜링 기계⁠(Turing machine)⁠로 절차를 정의했습니다. 미국의 논리학자 처치는 함수⁠(function)⁠를 만들고 적용하는 규칙만으로 계산을 적는 람다 계산⁠(lambda calculus)⁠으로 정의했습니다. 둘은 생김새가 전혀 다르지만 계산할 수 있는 것이 똑같았습니다. 이것이 '기계적으로 계산할 수 있는 것은 곧 튜링 기계로 계산할 수 있는 것'이라는 처치–튜링 논제⁠(Church–Turing thesis)⁠의 근거가 되었습니다. 이렇게 정의하고 나면 어떤 알고리즘으로도 풀 수 없는 문제가 있다는 것까지 증명할 수 있습니다. 대표가 프로그램과 입력을 받아 그 프로그램이 언젠가 멈추는지 판정하는 정지 문제⁠(halting problem)⁠입니다.

이어지는 곳. 알고리즘을 설계하는 대표적인 틀이 몇 가지 있습니다. 문제를 같은 모양의 더 작은 문제로 줄이는 재귀⁠(recursion)⁠, 반으로 나눠 각각 풀고 합치는 분할 정복⁠(divide and conquer)⁠, 겹쳐 나오는 작은 문제의 답을 표에 적어 두고 다시 쓰는 동적 계획법⁠(dynamic programming)⁠, 매 순간 가장 좋아 보이는 것을 고르는 욕심쟁이 알고리즘⁠(greedy algorithm)⁠, 계산 도중 동전을 던지는 무작위 알고리즘⁠(randomized algorithm)⁠입니다. 가장 많이 연구된 과제는 목록을 크기순으로 늘어놓는 정렬과 목록에서 원하는 것을 찾는 탐색입니다. 알고리즘이 모든 입력에서 맞는 답을 내고 끝난다는 것은 몇 가지 입력을 시험해서는 보일 수 없고, 증명해야 합니다. 반복문마다 깨지지 않는 조건(불변식)과 매번 줄어드는 양을 적어 그 증명을 한 줄씩 해 나가는 방법이 호어 논리⁠(Hoare logic)⁠입니다. 답이 맞는지 확인하기는 쉬운데 빠른 알고리즘이 있는지조차 모르는 문제들을 둘러싼 큰 물음은 P 대 NP 문제⁠(P versus NP problem)⁠입니다. 알고리즘은 정보를 재는 잣대도 됩니다. 프로그래밍 언어를 하나 정해 두면, 어떤 문자열을 출력하는 가장 짧은 프로그램의 길이가 그 문자열의 콜모고로프 복잡도⁠(Kolmogorov complexity)⁠이고, 언어를 바꿔도 이 길이는 문자열과 상관없는 상수만큼만 달라집니다.

이 개념이 나오는 큰 생각표현 바꾸기

이 개념이 나오는 긴 글

정수론과 암호 나머지로 지키는 비밀 한 번도 만난 적 없는 두 사람이 모두가 엿듣는 통신망에서 비밀 열쇠를 맞출 수 있을까? 답은 시계의 산수와 1640년 페르마의 정리에 있다. 그래프 이론 일곱 다리의 도시 쾨니히스베르크의 일곱 다리를 한 번씩만 건너 산책할 수 있을까? 오일러는 지도를 지우고 점과 선만 남겼다. 계산 이론 기계가 풀 수 없는 문제 모든 수학 문제를 기계적으로 풀 수 있을까? 러셀의 역설에서 괴델과 튜링까지, 그 질문에 대한 답은 '아니오'였고, 그 증명이 컴퓨터를 낳았다. 조합론 세지 않고 세기 시의 운율을 세던 인도의 운율학자부터 오일러의 생성함수까지. 하나하나 늘어놓지 않고 경우의 수를 세는 법은 어떻게 자라났을까? 매칭과 흐름 짝을 찾는 알고리즘 의대 졸업생과 병원, 신장 기증자와 환자, 철도와 화물. 누구를 누구와 이을지 정하는 수학은 냉전의 철도 지도에서 노벨 경제학상까지 이어진다. 램지 이론 완전한 무질서는 없다 여섯 명이 모이면 서로 아는 세 사람이나 서로 모르는 세 사람이 반드시 있다. 충분히 크면 어디에나 질서가 숨어 있다는 이론과, 그것을 동전 던지기로 증명한 에르되시. 알고리즘과 복잡도 줄 세우기의 한계 카드 천 장을 가장 빨리 줄 세우는 방법은? 인구조사의 천공 카드에서 퀵정렬까지, 그리고 어떤 방법도 넘을 수 없는 n log n의 벽. 정보 이론과 압축 짧게 보내기 모스 부호는 왜 E를 점 하나로 보낼까? 섀넌의 엔트로피가 정한 압축의 한계와, 허프만 부호에서 JPEG까지 그 한계에 다가간 방법들. 신경망과 기계 학습 배우는 기계 예를 보여 주면 규칙을 스스로 찾는 기계. 1958년의 퍼셉트론에서 오늘의 심층 신경망까지, 그 밑바닥에는 미분과 연쇄법칙이 있다.

이 개념 위에 세워진 것

이 개념을 언급하는 페이지

이 페이지가 가리키는 개념