본문으로 이동

알고리즘

위키백과, 우리 모두의 백과사전.
(Algorithm에서 넘어옴)
알고리즘은 여기로 연결됩니다. 컴퓨터 과학의 하위 분야에 대해서는 알고리즘 분석 문서를 참고하십시오.
반복문에서 큰 수에서 작은 수를 뺀다. 결과가 음수가 되기 전에 반복을 멈춘다. 두 수 중 하나가 0인지 확인하고, 하나가 0이면 다른 수를 최대공약수로 삼는다.
두 수의 최대공약수를 구하는 알고리즘의 순서도.

수학컴퓨터 과학에서 알고리즘(영어: algorithm)은 특정 종류의 계산 문제를 풀거나 계산을 수행하기 위한, 수학적으로 엄밀한 명령의 유한 수열이다.[1] 알고리즘은 계산과 데이터 처리를 수행하기 위한 명세로 쓰인다. 더 발전된 알고리즘은 조건문을 사용해 실행 경로를 여러 갈래로 나누고(자동화된 의사 결정), 타당한 추론을 이끌어 낼 수 있다(자동화된 추론).

퀵 정렬 알고리즘

이와 달리 휴리스틱(heuristic)은 정답이나 최적해가 명확하게 정의되지 않은 문제를 푸는 접근법이다.[2] 예를 들어 소셜 미디어의 추천 시스템은 흔히 ‘알고리즘’이라고 불리지만, 유일하게 ‘옳은’ 추천이 존재하는 것은 아니므로 실제로는 휴리스틱에 의존한다.

알고리즘은 효과적 방법(effective method)으로서 유한한 공간과 시간 안에 잘 정의된 형식 언어(formal language)로 표현될 수 있으며, 함수를 계산한다. 계산은 초기 상태와 입력에서 시작해 단계마다 상태를 바꾸고, 마침내 출력을 만들어 낸 뒤 종료한다. 상태 전이는 비결정적(non-deterministic)일 수도 있으며, 확률 알고리즘(randomized algorithm)은 난수 입력을 활용한다.

어원

[편집]
무함마드 이븐 무사 알콰리즈미. 9세기 수학자로, 그의 이름에서 ‘알고리즘’이라는 말이 나왔다.

서기 825년 무렵 페르시아의 과학자이자 다방면에 정통한 학자였던 무함마드 이븐 무사 알콰리즈미키타브 알히사브 알힌디(“인도식 계산의 책”)와 키타브 알잠 와타프리크 알히사브 알힌디(“인도 산술에서의 덧셈과 뺄셈”)를 썼다. 12세기 초에는 힌두-아라비아 숫자 체계산술을 다룬 이 글들이 라틴어로 번역되었다. 그 제목에 나오는 alghoarismi 또는 algoritmi는 알콰리즈미의 이름을 라틴어식으로 옮긴 것이다.[3]

영어 algorism은 자릿값 표기를 이용한 계산을 뜻하게 되었고, 1225년 무렵의 Ancrene Wisse에도 나온다. 14세기 후반 제프리 초서캔터베리 이야기에서 자릿값 계산에 쓰인 돌을 가리켜 augrym stones라고 썼다. 15세기에는 그리스어 ἀριθμός(arithmos, 수)의 영향으로 라틴어가 algorithmus로 바뀌었으며, 1596년 토머스 후드는 이 형태를 영어 algorithm으로 사용했다.

정의

[편집]

비형식적으로 알고리즘은 “연산의 순서를 정확히 정하는 규칙의 집합”이라고 정의할 수 있다.[4] 이 정의는 모든 컴퓨터 프로그램뿐 아니라 관료제의 절차나 요리법도 포함한다. 일반적으로 프로그램은 언젠가 멈출 때에만 알고리즘이다. 형식적으로 알고리즘은 컴퓨터나 사람이 기호에 대한 특정 연산을 수행하여 출력을 만들어 낼 수 있도록 따를 수 있는 명시적인 명령의 집합이다.

좋은 알고리즘은 보통 다음과 같은 특징을 갖는다.

  • 명확성(definiteness): 각 작업 단계가 명확하게 정해져 있어야 한다.
  • 결정성(determinism): 각 단계에서 수행할 다음 단계가 하나로 정해져 있어야 한다.
  • 타당성(effectiveness): 실제로 구현할 수 있고 실용적이어야 한다.
  • 입력(input): 정의된 입력을 받아들일 수 있어야 한다.
  • 출력(output): 입력과 정해진 관계에 있는 결과를 내놓아야 한다.
  • 유한성(finiteness): 유한한 횟수의 작업 뒤에 반드시 멈춰야 한다.
  • 일반성(generality): 정의된 입력의 범위 전체에 일반적으로 적용할 수 있어야 한다.

역사

[편집]

고대의 알고리즘

[편집]

수학 문제를 푸는 단계별 절차는 고대부터 기록되었다. 바빌로니아 수학(기원전 약 2500년), 이집트 수학(기원전 약 1550년), 인도 수학(기원전 약 800년 이후), 이파 신탁(기원전 약 500년), 그리스 수학(기원전 약 240년), 중국 수학(기원전 약 200년 이후), 아랍 수학(서기 약 800년)에 그러한 절차가 나타난다.[5]

가장 이른 알고리즘의 증거는 고대 메소포타미아 수학에서 발견된다. 바그다드 인근 슈루팍에서 나온 기원전 약 2500년의 수메르 점토판에는 가장 이른 나눗셈 알고리즘이 적혀 있다. 함무라비 왕조 시대의 바빌로니아 점토판은 공식 계산 알고리즘을 기술했고, 바빌로니아 천문학은 중요한 천문 현상의 시각과 위치를 계산하는 데 알고리즘을 사용했다. 고대 이집트의 린드 수학 파피루스에도 산술 알고리즘이 있고, 고대 헬레니즘 수학에는 에라토스테네스의 체유클리드 호제법이 있다.

9세기 알콰리즈미는 수학 문제를 풀기 위한 논리적 단계의 체계적이고 유한한 순서로서 알고리즘을 확립했다. 그의 저작 완성과 균형에 의한 계산 요약은 개별 수치 해답을 제시하는 데 그치지 않고, 대수식을 일반 절차에 따라 환원하고 균형을 맞추는 방법을 제시했다. 이로써 수학은 명확한 규칙에 따라 수행되는 ‘기계적’ 과정이 되었고, 현대 알고리즘 이론의 토대가 놓였다. 9세기 아랍 수학자 알킨디암호문 해독에 관한 원고에서 빈도 분석에 의한 암호해독을 처음 설명했다.

컴퓨터

[편집]

추로 구동되는 시계

[편집]

중세 유럽에서 버지 탈진 장치를 갖춘 추시계는 핵심적인 발명이었다. 정확하게 작동하는 자동 기계는 13세기의 기계 오토마타로 이어졌고, 이는 다시 19세기 중반 찰스 배비지에이다 러브레이스차분기관해석기관 같은 계산 기계의 바탕이 되었다. 러브레이스는 배비지의 해석기관에서 실행하도록 의도된 최초의 알고리즘을 설계했으므로 종종 “역사상 최초의 프로그래머”로 불린다.

전기기계식 계전기

[편집]

자카드 직기, 천공 카드의 전신, 전화 교환기는 초기 컴퓨터의 발전으로 이어졌다. 19세기 중반에는 전신이 세계적으로 쓰였고, 19세기 말에는 티커 테이프와 천공 카드가 개발되었다. 이어 1910년 무렵에는 보도 부호를 천공 종이테이프에 기록하는 텔레프린터가 등장했다. 전기기계식 계전기를 이용한 전화 교환망은 1835년에 발명되었으며, 이는 1937년 조지 스티비츠의 디지털 가산기 발명으로 이어졌다.

형식화

[편집]
에이다 러브레이스가 ‘Note G’에 실은 도표. 최초로 출판된 컴퓨터 알고리즘이다.

1928년에는 다비트 힐베르트결정 문제를 풀려는 시도 속에서 현대적 알고리즘 개념의 부분적 형식화가 시작되었다. 이후의 형식화는 “유효 계산 가능성” 또는 “유효한 방법”을 정의하려는 시도였다. 여기에는 괴델-에르브랑-클레이니 재귀함수, 알론조 처치람다 대수, 에밀 포스트의 정식화, 앨런 튜링튜링 기계가 포함된다.

알고리즘의 형식 이론

[편집]

알고리즘 개념을 수학적으로 형식화하는 일은 계산 가능 함수의 형식화와는 다르다. 고전적인 계산 모형들이 동등하다고 해서 알고리즘의 형식적 정의가 저절로 나오는 것은 아닌데, 서로 다른 알고리즘이 같은 함수를 계산할 수 있기 때문이다. 유리 구레비치는 순차 알고리즘을 형식적으로 특징짓기 위해 추상 상태 기계(abstract state machine, ASM) 이론을 발전시켰다. 야니스 모스호바키스는 집합론적 대상에 기초한 알고리즘의 수학 이론을 제안하고 알고리즘과 구현을 구별했다.

현대의 알고리즘

[편집]

오랫동안 알고리즘은 휴리스틱에서 형식 알고리즘으로 발전한다고 여겨졌다. 기호 적분은 전형적인 사례다. 1961년 제임스 슬레이글의 SAINT 프로그램은 MIT 미적분 교재의 1학년 연습문제 54개 중 52개를 휴리스틱으로 풀었다. 1967년 래리 모지스의 SIN은 이를 개선해 100% 성공률을 보였지만 여전히 휴리스틱이었다. 1969년 로버트 리시는 형식적 보장을 갖춘 리시 알고리즘을 제시했다.

트랜스포머 기반 인공지능의 등장으로 이 순서는 뒤집혔다는 주장도 있다. 오늘날 알고리즘은 인스타그램유튜브 같은 소셜 미디어 앱에서 사용자의 선호와 상호작용을 분석해 비슷한 콘텐츠를 더 보여 주는 데 쓰인다. 양자 컴퓨팅은 문제를 더 빠르게 풀기 위해 양자 알고리즘을 사용한다. 2024년 NIST는 양자 컴퓨터를 이용한 공격에 대비하는 새 암호화 알고리즘을 포함하여 포스트양자 암호 표준을 갱신했다.

표현

[편집]

알고리즘은 자연어, 의사코드, 순서도, 드라콘 차트, 프로그래밍 언어, 제어표 등 여러 표기법으로 표현할 수 있다. 자연어 표현은 장황하고 모호하기 쉬워 복잡하거나 기술적인 알고리즘에는 거의 쓰이지 않는다. 의사코드, 순서도, 드라콘 차트, 제어표는 자연어의 모호성을 피하는 구조화된 표현이다.

튜링 기계

[편집]

튜링 기계 프로그램은 기계표(유한 상태 기계, 상태 전이표, 제어표), 순서도와 드라콘 차트, 기초적인 기계어 또는 어셈블리어 형태인 ‘4항식 집합’ 등으로 표현할 수 있다. 알고리즘 표현은 고수준 기술·구현 기술·형식 기술의 세 단계로 분류하기도 한다. 고수준 기술은 구현을 무시하고 알고리즘 자체의 성질을 설명한다. 구현 기술은 기계가 머리를 움직이고 데이터를 저장하는 일반적 방식을 설명하며, 형식 기술은 정확한 상태표와 전이 목록을 제시한다.

순서도 표현

[편집]

순서도는 알고리즘을 설명하고 문서화하는 그래픽 도구다. 기본 기호는 프로그램 흐름을 나타내는 화살표, 순차 및 GOTO를 나타내는 사각형, 판단을 나타내는 마름모, OR 결합을 나타내는 점의 네 가지다. 하위 구조는 사각형 안에 중첩할 수 있으나 상위 구조에는 하나의 출구만 있어야 한다.

알고리즘 분석

[편집]

알고리즘이 요구하는 시간, 저장 공간, 그 밖의 비용을 아는 일은 중요하다. 예컨대 개 수로 이루어진 목록의 원소를 모두 더하는 알고리즘은 빅 오 표기법(Big O notation)으로 의 시간이 든다. 이 알고리즘은 지금까지의 합과 입력 목록에서의 현재 위치라는 두 값만 기억하면 된다. 입력 수 자체를 저장하는 공간을 세지 않으면 공간 복잡도(space complexity)는 이고, 세면 이다. 같은 문제를 풀더라도 알고리즘에 따라 시간·공간 등의 효율이 달라질 수 있다. 정렬된 목록에서는 이진 탐색(binary search)이 인 순차 탐색보다 낫다.

형식 분석과 경험적 분석

[편집]

알고리즘 분석은 특정 프로그래밍 언어나 구현을 전제하지 않고 추상적으로 이루어진다. 반면 대부분의 알고리즘은 특정 하드웨어·소프트웨어 플랫폼에서 구현되며, 실제 코드로 성능을 시험한다. 벤치마크(benchmark)는 최적화 전후의 개선안을 비교하는 데 쓸 수 있다. 다만 경험적 시험(empirical testing)이 형식 분석을 완전히 대신할 수는 없고, 공정한 비교를 하기도 어렵다.

실행 효율

[편집]

이미 널리 쓰이는 알고리즘도 크게 개선될 수 있다. 예를 들어 영상 처리에 쓰이는 FFT 알고리즘의 개선은 의료 영상 처리 시간을 최대 1,000분의 1로 줄일 수 있다. 일반적으로 속도 개선은 실제 응용에서 흔히 나타나는 문제의 특수한 성질에 달려 있다.

최선·최악의 경우

[편집]

알고리즘의 최선 사례(best case)는 가장 적은 시간과 자원으로 과업을 마치는 입력 또는 상황이다. 최악 사례(worst case)는 가장 많은 시간과 계산 자원을 쓰게 하는 입력 또는 상황이다.

설계

[편집]

알고리즘 설계에는 분할 정복, 동적 계획법 등 여러 접근법을 활용할 수 있다. 알고리즘을 설계하고 구현하는 기법은 알고리즘 설계 패턴이라고도 한다. 설계에서 중요한 점은 메모리나 시간 같은 자원을 효율적으로 쓰는 것이며, 입력 크기가 증가할 때 자원 사용량이 어떻게 변하는지는 빅 오 표기법으로 나타낸다.

구조적 프로그래밍

[편집]

모든 알고리즘은 튜링 완전 모형이라면 어느 모형에서나 계산할 수 있다. 튜링 완전성에는 조건부 GOTO, 무조건 GOTO, 대입, HALT라는 네 종류의 명령만 있으면 된다. 뵘-야코피니의 정준 구조는 SEQUENCE, IF-THEN-ELSE, WHILE-DO이며, 여기에 DO-WHILE과 CASE를 더할 수 있다. 구조적 프로그램은 정확성 증명수학적 귀납법으로 수행하기 쉽다는 장점도 있다.

법적 지위

[편집]

알고리즘 그 자체는 보통 특허를 받을 수 없다. 미국에서는 추상 개념·수·신호를 단순히 조작한다는 청구만으로는 ‘공정’이 되지 않으므로 알고리즘은 특허 대상이 아니다(Gottschalk v. Benson). 다만 알고리즘을 실제로 적용한 발명은 특허가 될 수 있다. 예컨대 Diamond v. Diehr에서는 합성고무 경화를 돕는 단순 피드백 알고리즘의 적용이 특허로 인정되었다. 소프트웨어 특허는 논쟁적이며, 특히 데이터 압축 알고리즘 관련 특허는 비판을 받는다. 일부 암호 알고리즘에는 수출 제한도 있다.

분류

[편집]

구현 방식별

[편집]
재귀와 반복
재귀 알고리즘(recursive algorithm)은 종료 조건을 만날 때까지 자신을 반복 호출하며, 함수형 프로그래밍에서 흔한 기법이다. 반복 알고리즘(iterative algorithm)은 반복문이나 스택 같은 자료 구조를 이용한다. 하노이의 탑은 재귀 구현으로 흔히 푸는 퍼즐이다. 모든 재귀 버전에는 동등한 반복 버전이 있고, 그 반대도 성립한다.
직렬·병렬·분산
직렬 알고리즘(serial algorithm)은 한 번에 한 명령을 실행하는 컴퓨터를 위해 설계된다. 병렬 알고리즘(parallel algorithm)과 분산 알고리즘(distributed algorithm)은 여러 처리기 또는 여러 네트워크 컴퓨터가 동시에 문제를 다룰 수 있는 구조를 이용한다. 문제를 부분 문제로 나누고 결과를 다시 합치며, 통신 오버헤드도 고려해야 한다.
결정론·비결정론
결정론적 알고리즘(deterministic algorithm)은 모든 단계에서 정확한 결정을 내린다. 비결정론적 알고리즘(non-deterministic algorithm)은 추측으로 문제를 풀며, 휴리스틱으로 추측의 정확도를 높이기도 한다.
정확·근사
근사 알고리즘(approximation algorithm)은 정확한 해를 찾기 어려울 때 참해에 가까운 해를 구한다. 물건의 무게 총합이 한도를 넘지 않게 하면서 가치 총합을 최대화하는 배낭 문제가 대표적인 활용 사례다.
양자 알고리즘
양자 알고리즘(quantum algorithm)은 현실적인 양자 계산 모형에서 실행된다. 보통 양자 중첩이나 양자 얽힘처럼 양자 컴퓨팅의 핵심 성질을 이용하는 알고리즘을 말한다.

설계 패러다임별

[편집]
무차별 대입 또는 완전 탐색
가능한 선택을 체계적으로 모두 시도해 최적해를 찾는 방법(brute-force search)이다. 다른 방법을 쓸 수 없거나 지나치게 복잡할 때 쓰며, 두 점 사이의 최단 경로 찾기나 암호 해독 등에 활용할 수 있다.
분할 정복
분할 정복 알고리즘(divide and conquer)은 문제를 하나 이상의 더 작은 사례로 반복해서, 보통 재귀적으로 나누고 각 사례가 쉽게 풀 수 있을 만큼 작아질 때까지 줄인다. 병합 정렬은 목록을 작은 목록으로 나누고 각각 정렬한 뒤 병합하는 사례다. 하나의 작은 사례만 푸는 감소 정복의 예는 이진 탐색이다.
탐색과 열거
체스 같은 많은 문제는 그래프 문제로 모델링할 수 있다. 그래프 탐색 알고리즘, 탐색 알고리즘, 분기 한정법(branch and bound), 백트래킹(backtracking)이 이 범주에 속한다.
확률 알고리즘
일부 선택을 무작위 또는 의사무작위로 하는 알고리즘(randomized algorithm)이다. 몬테카를로 알고리즘은 높은 확률로 정답을 내고, 라스베이거스 알고리즘은 언제나 정답을 내지만 실행 시간이 확률적으로만 제한된다.
복잡도 환원
어려운 문제를 잘 알려져 있고 바람직하게는 점근 최적 알고리즘으로 풀 수 있는 문제로 변환하는 기법(reduction)이다. 정렬되지 않은 목록의 중앙값을 찾기 위해 먼저 목록을 정렬한 뒤 가운데 원소를 꺼내는 방법이 예다. 변환 정복이라고도 한다.
백트래킹
여러 해 후보를 점진적으로 만들되, 완전한 유효해로 이어질 수 없다고 판단되면 그 후보를 버린다.

최적화 문제

[편집]
선형 계획법
선형 등식과 부등식 제약 아래 선형 함수의 최적해를 찾는 방법(linear programming)이다. 심플렉스 알고리즘이 대표적이며, 유향 그래프의 최대 유량 문제도 선형 계획법으로 풀 수 있다.
동적 계획법
최적 부분 구조와 중복 부분 문제를 가지는 문제에서 이미 구한 해를 다시 계산하지 않는 방법(dynamic programming)이다. 플로이드-워셜 알고리즘메모이제이션이 대표적이다. 이 기법은 많은 문제의 복잡도를 지수 시간에서 다항 시간으로 낮춘다.
탐욕법
탐욕 알고리즘(greedy algorithm)은 현재 해의 부분 구조를 살피며 작은 수정을 통해 개선한다. 일부 문제에서는 최적해를 찾지만 다른 문제에서는 국소 최적해에 멈출 수 있다. 허프만 트리, 크루스칼 알고리즘, 프림 알고리즘, 솔린 알고리즘이 이에 속한다.
휴리스틱 방법
휴리스틱 알고리즘(heuristic algorithm)은 최적해를 찾기 어려울 때 가까운 해를 구한다. 국소 탐색, 타부 탐색, 담금질 기법, 유전 알고리즘 등이 있다.

복잡성

[편집]

입력 크기가 일 때 알고리즘의 시간 복잡도(time complexity)는 점근 표기법(asymptotic notation)의 를 사용해 다음과 같이 나타낼 수 있다.

  • : 에 관계없이 일정한 시간 안에 수행된다. 예: 파일의 첫 번째 바이트가 (null)인지 검사하는 작업.
  • : 에 비례하는 시간 안에 수행된다. 예: 이진 탐색.
  • : 에 비례하는 시간 안에 수행된다. 예: 기수 정렬.
  • : 에 비례하는 시간 안에 수행된다. 예: 많은 정렬 알고리즘.
  • : 에 비례하는 시간 안에 수행된다. 예: 최장 공통 부분 수열 문제.
  • : 에 비례하는 시간 안에 수행된다. 예: 행렬 곱셈.
  • : 과 같은 꼴의 수행 시간 안에 수행된다. 예: 충족 가능성 문제.
  • : , 즉 에 비례하는 시간 안에 수행된다. 예: 배열의 모든 순열을 검사하는 작업.

빅 오 표기법은 상한을 나타내므로, 위의 복잡도들은 더 큰 복잡도 범주에 포함된다. 따라서 대부분의 알고리즘은 형식적으로는 의 수행 시간을 가진다고도 말할 수 있다.

예시

[편집]

가장 단순한 알고리즘 가운데 하나는 순서가 무작위인 수 목록에서 가장 큰 수를 찾는 것이다.

고수준 설명:

  1. 수의 집합이 비어 있으면 가장 큰 수는 없다.
  2. 집합의 첫 번째 수가 가장 크다고 가정한다.
  3. 남은 수를 하나씩 살펴보고, 현재 수가 지금까지의 가장 큰 수보다 크면 그 수를 새로운 최댓값으로 삼는다.
  4. 확인하지 않은 수가 없으면 현재의 최댓값을 집합의 최댓값으로 삼는다.

(준)형식 설명:

알고리즘 LargestNumber
입력: 수의 목록 L.
출력: 목록 L의 가장 큰 수.
if L.size = 0 return null
largestL[0]
for each item in L, do
    if item > largest, then
        largestitem
return largest
  • ""은 대입을 가리킨다. 이를테면 "α β"는 α에 β를 대입하는 것을 뜻한다.
  • "return"은 알고리즘을 종료하고 다음의 값을 출력한다.

AI를 활용한 알고리즘 발견

[편집]

인공지능 시스템은 알고리즘을 발견하고 최적화하는 데도 사용된다. 2023년 구글 딥마인드알파제로에 기반한 강화 학습 시스템 AlphaDev를 발표했으며, 이 시스템은 더 나은 정렬 및 해싱 알고리즘을 발견했다.[6] 2025년에는 대형 언어 모델 기반의 진화형 코딩 에이전트 AlphaEvolve를 발표했다. AlphaEvolve는 언어 모델로 코드 변경안을 제안하고 자동 평가기로 후보 해법을 시험하며, 유망한 알고리즘을 여러 반복에 걸쳐 개선하는 진화적 과정을 사용한다.[7]

같이 보기

[편집]

각주

[편집]
  1. Knuth 1971:5.
  2. David A. Grossman, Ophir Frieder, Information Retrieval: Algorithms and Heuristics, 2nd edition, 2004, ISBN 1402030045
  3. Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia and Grafton, Anthony. Information: A Historical Companion, Princeton University Press, 2021, p. 247.
  4. Stone 1971:8.
  5. Chabert, Jean-Luc (2012). A History of Algorithms: From the Pebble to the Microchip. Springer. 7–8쪽.
  6. AlphaDev discovers faster sorting algorithms. Google DeepMind. 2023년 6월 7일.
  7. Novikov, Alexander; Vu, Ngân 외 (2025). AlphaEvolve: A coding agent for scientific and algorithmic discovery. arXiv:2506.13131 [cs.AI].

참고 문헌

[편집]
  • Axt, P. (1959). “On a Subrecursive Hierarchy and Primitive Recursive Degrees.” Transactions of the American Mathematical Society, 92(1), 85–105. doi:10.2307/1993169.
  • Bell, C. Gordon and Newell, Allen (1971), Computer Structures: Readings and Examples, McGraw–Hill.
  • Blair, Ann; Duguid, Paul; Goeing, Anja-Silvia; Grafton, Anthony (2021), Information: A Historical Companion, Princeton University Press.
  • Blass, Andreas and Gurevich, Yuri (2003), “Algorithms: A Quest for Absolute Definitions”, Bulletin of the European Association for Theoretical Computer Science, 81.
  • Bolter, David J. (1984), Turing's Man: Western Culture in the Computer Age, University of North Carolina Press.
  • Boolos, George and Jeffrey, Richard (1999 [1974]), Computability and Logic, Cambridge University Press.
  • Burgin, Mark (2004), Super-Recursive Algorithms, Springer.
  • Campagnolo, M. L.; Moore, C.; Costa, J. F. (2000), “An Analog Characterization of the Subrecursive Functions”, Proceedings of the 4th Conference on Real Numbers and Computers, Odense University, 91–109.
  • Chabert, Jean-Luc (2012), A History of Algorithms: From the Pebble to the Microchip, Springer.
  • Church, Alonzo (1936), “An Unsolvable Problem of Elementary Number Theory”, American Journal of Mathematics, 58, 345–363.
  • Church, Alonzo (1936), “A Note on the Entscheidungsproblem”, The Journal of Symbolic Logic, 1(1), 40–41; “Correction to a Note on the Entscheidungsproblem”, 1(3), 101–102.
  • Daffa', Ali Abdullah al- (1977), The Muslim Contribution to Mathematics, Croom Helm.
  • Davis, Martin (1965), The Undecidable, Raven Press.
  • Davis, Martin (2000), Engines of Logic, W. W. Norton.
  • Dean, Tim (2012), “Evolution and Moral Diversity”, Baltic International Yearbook of Cognition, Logic and Communication, 7. doi:10.4148/biyclc.v7i0.1775.
  • Dennett, Daniel (1995), Darwin's Dangerous Idea, Touchstone/Simon & Schuster, 32–36.
  • Dilson, Jesse (2007), The Abacus, St. Martin's Press.
  • Dooley, John F. (2013), A Brief History of Cryptology and Cryptographic Algorithms, Springer.
  • Grossman, David A.; Frieder, Ophir (2004), Information Retrieval: Algorithms and Heuristics, 2판.
  • Gurevich, Yuri (2000), “Sequential Abstract State Machines Capture Sequential Algorithms”, ACM Transactions on Computational Logic, 1(1), 77–111.
  • van Heijenoort, Jean (2001 [1967]), From Frege to Gödel, A Source Book in Mathematical Logic, 1879–1931, Harvard University Press.
  • Hodges, Andrew (1983), Alan Turing: The Enigma, Simon and Schuster.
  • Kleene, Stephen C. (1936), “General Recursive Functions of Natural Numbers”, Mathematische Annalen, 112(5), 727–742.
  • Kleene, Stephen C. (1943), “Recursive Predicates and Quantifiers”, Transactions of the American Mathematical Society, 53(1), 41–73.
  • Kleene, Stephen C. (1991 [1952]), Introduction to Metamathematics, North-Holland.
  • Knuth, Donald E. (1997), Fundamental Algorithms, Addison–Wesley.
  • Knuth, Donald E. (1969), The Art of Computer Programming, Volume 2: Seminumerical Algorithms, Addison–Wesley.
  • Knuth, Donald E. (1996), Selected Papers on Computer Science, CSLI Publications.
  • Kosovsky, N. K. (1981), Elements of Mathematical Logic and Its Application to the Theory of Subrecursive Algorithms, LSU Publ.
  • Kowalski, Robert (1979), “Algorithm = Logic + Control”, Communications of the ACM, 22(7), 424–436. doi:10.1145/359131.359136.
  • Markov, A. A. (1954), Theory of Algorithms, Academy of Sciences of the USSR; 영어 번역, Israel Program for Scientific Translations, 1961.
  • Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Prentice-Hall.
  • Moschovakis, Yiannis N.; Paschalis, Vasilis (2008), “Elementary Algorithms and Their Implementations”, in New Computational Paradigms, Springer, 87–118.
  • Post, Emil (1936), “Finite Combinatory Processes, Formulation I”, The Journal of Symbolic Logic, 1(3), 103–105.
  • Rogers, Hartley Jr. (1987), Theory of Recursive Functions and Effective Computability, MIT Press.
  • Rosser, J. B. (1939), “An Informal Exposition of Proofs of Gödel's Theorem and Church's Theorem”, Journal of Symbolic Logic, 4(2), 53–60.
  • Santos-Lang, Christopher (2015), “Moral Ecology Approaches to Machine Ethics”, in Machine Medical Ethics, Springer, 111–127.
  • Scott, Michael L. (2009), Programming Language Pragmatics, 3판, Morgan Kaufmann/Elsevier.
  • Sipser, Michael (2006), Introduction to the Theory of Computation, PWS Publishing.
  • Sober, Elliott; Wilson, David Sloan (1998), Unto Others: The Evolution and Psychology of Unselfish Behavior, Harvard University Press.
  • Stone, Harold S. (1971), Introduction to Computer Organization and Data Structures, McGraw-Hill.
  • Tausworthe, Robert C. (1977), Standardized Development of Computer Software Part 1 Methods, Prentice–Hall.
  • Turing, Alan M. (1936–37), “On Computable Numbers, With An Application to the Entscheidungsproblem”, Proceedings of the London Mathematical Society, 42, 230–265.
  • Turing, Alan M. (1939), “Systems of Logic Based on Ordinals”, Proceedings of the London Mathematical Society, 45, 161–228.
  • 미국 특허상표청 (2006), Manual of Patent Examining Procedure, §2106.02, “Mathematical Algorithms: Patentability”.
  • Zaslavsky, Claudia (1970), “Mathematics of the Yoruba People and of Their Neighbors in Southern Nigeria”, The Two-Year College Mathematics Journal, 1(2), 76–99. doi:10.2307/3027363.
  • 미국 국립표준기술연구소 (2024), “NIST Releases First 3 Finalized Post-Quantum Encryption Standards”.

더 읽어 보기

[편집]
  • Berlinski, David (2001), The Advent of the Algorithm: The 300-Year Journey from an Idea to the Computer, Harvest Books.
  • Chabert, Jean-Luc (1999), A History of Algorithms: From the Pebble to the Microchip, Springer.
  • Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), Introduction To Algorithms, MIT Press.
  • Harel, David and Feldman, Yishai (2004), Algorithmics: The Spirit of Computing, Addison-Wesley.
  • Hertzke, Allen D.; McRorie, Chris (1998), “The Concept of Moral Ecology”, in Community and Political Thought Today, Praeger.
  • Kleinberg, Jon and Tardos, Éva (2006), Algorithm Design, Pearson/Addison-Wesley.
  • Knuth, Donald E. (2000), Selected Papers on Analysis of Algorithms, Center for the Study of Language and Information.
  • Knuth, Donald E. (2010), Selected Papers on Design of Algorithms, Center for the Study of Language and Information.
  • Wallach, Wendell; Allen, Colin (2008), Moral Machines: Teaching Robots Right from Wrong, Oxford University Press.
  • Bleakley, Chris (2020), Poems that Solve Puzzles: The History and Science of Algorithms, Oxford University Press.

외부 링크

[편집]