알고리즘
알고리즘(algorithm)은 주어진 문제를 해결하거나 특정한 계산을 수행하기 위해 정의된 유한한 규칙과 절차의 집합이다. 알고리즘은 입력을 받아 정해진 연산을 수행하고, 문제에서 요구하는 출력을 생성한다. 같은 문제를 해결하는 알고리즘이 여러 개 존재할 수 있으며, 각 알고리즘은 정확...
알고리즘(algorithm)은 주어진 문제를 해결하거나 특정한 계산을 수행하기 위해 정의된 유한한 규칙과 절차의 집합이다. 알고리즘은 입력을 받아 정해진 연산을 수행하고, 문제에서 요구하는 출력을 생성한다. 같은 문제를 해결하는 알고리즘이 여러 개 존재할 수 있으며, 각 알고리즘은 정확성, 실행 시간, 메모리 사용량, 구현 난이도와 적용 가능한 입력의 범위에서 서로 다른 특성을 가진다.
알고리즘은 특정 프로그래밍 언어로 작성된 소스 코드 그 자체가 아니라, 계산 과정을 추상적으로 기술한 것이다. 하나의 알고리즘은 자연어, 의사 코드, 순서도, 수학적 표기 또는 여러 프로그래밍 언어로 표현될 수 있다. 프로그램은 이러한 알고리즘을 실제 컴퓨터에서 실행할 수 있도록 자료형, 자료구조, 입출력 처리와 실행 환경을 포함해 구현한 결과이다.
컴퓨터 과학에서 알고리즘을 연구할 때는 원하는 결과를 생성하는지만 확인하지 않는다. 모든 허용된 입력에서 알고리즘이 종료하고 올바른 결과를 생성하는지 증명하는 정확성 분석, 입력 크기가 증가할 때 필요한 실행 시간과 저장 공간이 어떻게 변하는지를 다루는 복잡도 분석, 그리고 문제의 구조에 적합한 해결 절차를 만드는 알고리즘 설계가 함께 다뤄진다.
알고리즘의 효율성은 일반적으로 특정 컴퓨터의 실제 실행 시간보다 입력 크기에 따른 연산량의 증가율로 분석한다. 이를 위해 점근 표기법을 사용하며, 최악의 경우, 평균적인 경우와 최선의 경우를 구분할 수 있다. 그러나 실제 성능은 자료구조, 메모리 접근 패턴, 캐시, 병렬성, 컴파일러 최적화, 입력 데이터의 분포와 하드웨어 특성에도 영향을 받는다.
알고리즘은 정렬, 검색, 그래프 탐색, 문자열 처리, 수치 계산, 최적화, 암호화, 압축과 스케줄링을 비롯한 거의 모든 계산 분야의 기반을 이룬다. 또한 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹과 같은 설계 기법은 서로 다른 문제에서 반복적으로 활용되는 일반적인 문제 해결 구조를 제공한다.
역사
알고리즘 개념의 기원
고대와 중세의 계산 절차
알콰리즈미와 명칭의 유래
근대 수학의 알고리즘
계산 이론의 형성
전자식 컴퓨터와 현대 알고리즘
기본 개념과 성질
계산 문제
입력과 출력
절차와 상태
명확성과 실행 가능성
유한성과 종료
결정성과 비결정성
정확성과 완전성
알고리즘과 휴리스틱
알고리즘과 프로그램
표현 방법
자연어
의사 코드
순서도
수학적 표기
프로그래밍 언어
재귀적 표현과 반복적 표현
계산 모델
계산 모델의 역할
포인터 기반 계산 모델
회로와 병렬 계산 모델
외부 메모리와 스트리밍 모델
분산 계산 모델
양자 계산 모델
정확성 검증
사전 조건과 사후 조건
부분 정확성과 전체 정확성
반복문 불변식
수학적 귀납법
재귀 알고리즘의 정확성
종료 증명
형식 검증
테스트와 정확성 증명의 관계
효율성과 복잡도 분석
입력 크기와 기본 연산
시간 복잡도
공간 복잡도
최선·평균·최악의 경우
점근 표기법
상환 분석
재귀식과 점화 관계
실험적 성능 측정
이론적 복잡도와 실제 성능
알고리즘 설계 기법
완전 탐색
분할 정복
감소 정복
변환 정복
탐욕 알고리즘
동적 계획법
백트래킹
분기 한정법
무작위 알고리즘
근사 알고리즘
온라인 알고리즘
병렬 알고리즘
분산 알고리즘
자료구조와의 관계
데이터 표현과 알고리즘
추상 자료형
배열과 연결 구조
스택과 큐
트리와 힙
해시 테이블
그래프
자료구조 선택과 성능
주요 알고리즘 분야
정렬
검색
선택과 순위
문자열 처리
그래프 탐색
최단 경로
최소 신장 트리
네트워크 흐름
계산 기하학
수치 알고리즘
행렬과 선형대수
수론 알고리즘
조합 알고리즘
최적화 알고리즘
압축 알고리즘
암호 알고리즘
스케줄링 알고리즘
계산 가능성과 계산 복잡도
결정 문제
계산 가능성
결정 가능 문제와 결정 불가능 문제
문제와 알고리즘의 환원
복잡도 종류
P와 NP
NP-완전성과 NP-난해성
공간 복잡도
매개변수 복잡도
하한과 최적 알고리즘
알고리즘의 분류
결정적 알고리즘과 무작위 알고리즘
정확 알고리즘과 근사 알고리즘
순차 알고리즘과 병렬 알고리즘
중앙 집중형 알고리즘과 분산 알고리즘
온라인 알고리즘과 오프라인 알고리즘
재귀 알고리즘과 반복 알고리즘
정적 알고리즘과 동적 알고리즘
구현과 평가
자료형과 수치 표현
경계 조건과 예외 처리
메모리 계층과 캐시
지역성과 데이터 배치
병렬성과 동기화
입력 데이터의 분포
벤치마크
프로파일링
정확도와 성능의 절충
라이브러리와 기존 구현체
활용 분야
시스템 소프트웨어
데이터베이스
컴퓨터 네트워크
컴퓨터 그래픽스
게임과 시뮬레이션
인공지능과 머신러닝
과학 계산
정보 검색
보안과 암호학
로봇공학과 제어
일상적인 자동화와 의사 결정
장점과 한계
관련 문서