
알고리즘이란?
알고리즘은 컴퓨터로 문제를 풀기 위한 단계적인 절차다. 즉, 입력(Input)을 받아 처리 과정을 거쳐 출력(Output)을 생성하는 일련의 명확하고 유한한 단계의 집합이다. 좋은 알고리즘은 명백성(모호하지 않음), 유한성(반드시 끝남), 유효성(모든 단계가 실행 가능함) 등의 조건을 충족해야 한다.
컴퓨터 프로그래밍에서 알고리즘은 프로그램의 논리적 핵심으로, 자료구조와 함께 프로그램의 성능과 효율을 결정짓는 근본 요소이다.
추상데이터 타입(Abstract Data Type, ADT)이란?
추상데이터 타입은 데이터와 그 데이터에 적용할 수 있는 연산을 ‘무엇(What)’인지만 정의하고, ‘어떻게(How)’ 구현되는지는 숨긴 개념적 자료형이다.
즉, 사용자는 내부 구현을 몰라도 정해진 연산을 통해 데이터를 다룰 수 있다. 이는 정보 은닉(Information hiding) 과 추상화(Abstraction) 의 개념에 기반한다. 예를 들어 TV 리모컨을 사용할 때 내부 회로를 몰라도 기능을 사용하는 것처럼, ADT는 인터페이스만 제공하고 내부 구조는 감춘다.
프로그램 복잡도 분석이란?
복잡도 분석은 알고리즘의 효율성을 수학적으로 평가하는 과정이다.
특히 시간 복잡도(Time complexity) 는 “알고리즘이 수행하는 연산이 몇 번 실행되는가”를 수로 표현하고, 공간 복잡도(Space complexity) 는 알고리즘이 실행 중 필요한 메모리 양을 나타낸다.
이때 ‘빅오 표기법(O-notation)’은 수행 시간의 상한을, ‘빅오메가(Ω)’는 하한을, ‘빅세타(Θ)’는 평균적인 성장을 표현한다.
프로그램의 효율성은 입력 크기 n이 커질수록 급격히 차이가 나므로, 실행 속도와 자원 사용량을 최적화하기 위해 복잡도 분석은 필수적이다.
컴퓨터 프로그래밍에서의 알고리즘
프로그래밍에서 알고리즘은 단순한 계산 절차가 아니라 문제를 해결하는 논리적 전략이다. 자료구조가 데이터를 효율적으로 저장·조작하는 틀이라면, 알고리즘은 그 자료를 기반으로 문제를 해결하는 “행동의 절차”다.
예를 들어, 정렬(Sorting), 탐색(Searching), 경로 탐색(Path finding) 등 다양한 알고리즘은 자료구조와 결합하여 효율적인 프로그램을 구성한다.
핵심 단어 정리
알고리즘(算法)
- 한자: 셈할 산(算) + 법 법(法) → ‘계산의 법칙’
- 영어: Algorithm (어원: 페르시아 수학자 ‘알콰리즈미(Al-Khwarizmi)’의 이름에서 유래)
- 의미 확장: 수학적 계산 절차 → 문제 해결 절차 전반으로 확장됨
추상데이터타입(抽象資料型)
- 한자: 뽑을 추(抽), 코끼리 상(象), 자료 자(資料), 모형 형(型) → ‘형태를 뽑아낸 자료의 모형’
- 영어: Abstract Data Type (ab- ‘떼어내다’ + tractus ‘끌어내다’) → ‘세부 구현을 분리한 개념적 자료형’
복잡도(複雜度)
- 한자: 겹칠 복(複), 섞일 잡(雜), 정도 도(度) → ‘복잡한 정도’
- 영어: Complexity (com- ‘함께’ + plectere ‘엮다’) → ‘얽혀 있음’
프로그램(程序)
- 한자: 법도 정(程), 차례 서(序) → ‘정해진 순서’
- 영어: Program (pro- ‘앞으로’ + graphein ‘쓰다’) → ‘앞서 계획된 절차’