1. 알고리즘과 문제 해결
in Study on Data Structure
Overview
컴퓨터에서 말하는 데이터란 컴퓨터가 처리해야 될 대상으로 주어지는 모든 것을 의미한다.
컴퓨터는 이런 데이터를 처리하여 정보를 생성하는 기계로, 데이터를 처리하는 것을 컴퓨터 분야에서는 문제 해결(problem solving)이라는 용어로 표현하기도 한다.
특정 문제를 해결하기 위해 논리적으로 기술해 놓은 일련의 명령문을 알고리즘(algorithm)이라고 한다.
이때 컴퓨터로 실제 문제를 풀기 위해서는 결국 이 알고리즘이 컴퓨터가 이해하고 실행할 수 있는 특정 프로그래밍 언어로 표현되어야 하는데, 이것이 컴퓨터 프로그램(program)이다.
알고리즘을 컴퓨터가 실행할 수 있는 프로그램으로 표현할 때는 데이터도 함께 표현해야 한다.
즉, 데이터의 표현이 어떤 특성을 갖느냐에 따라 주어진 알고리즘의 성능이 좌우되기 때문에 데이터에 따라 적합한 알고리즘이 올바르게 선정되어야 하고, 반대로 특정 알고리즘이 먼저 정해지면 주어진 데이터를 이 알고리즘이 적용될 수 있는 구조로 표현해야 된다.
알고리즘의 필요 요건
보통 알고리즘에는 숫자뿐만이 아니라 심벌 데이터도 처리할 수 있는 다양한 명령문들을 포함한다.
이 일련의 명령문들이 알고리즘으로 되기 위한 자격 요건은 명령문들의 본질에 의해 결정되며, 적용되는 대상에 의해 결정되는 것은 아니다.
명령문들이 알고리즘으로 되기 위해서는 다음 세 가지 요건을 갖춰야 한다.
알고리즘은 수행해야 될 작업의 내용과 순서가 명령문으로 완전하고 명확하게 명세되어야 한다. 각 명령문은 그 명령문을 수행하는 컴퓨터나 사람의 어떤 다른 지능에 의존적이여서는 안된다. 순수하게 알고리즘이 지시하는 그대로 실행하기만 하면 의도한 결과가 얻어져야 한다. 또한 모든 명령문들은 분명하고 확실하여 애매모호하지 않아야 한다.
알고리즘은 보통 외부나 내부적으로 입력이 주어지며 실행 결과로 하나 이상의 출력을 생성한다. 여기서 입력이란 알고리즘이 처리해야 할 대상으로 제공되는 데이터를 의미하고, 출력이란 입력 데이터를 처리하여 얻은 결과를 의미한다.
알고리즘은 실행 뒤에 반드시 종료되어야 한다. 알고리즘이 아무리 길다 하더라도 알고리즘 끝에 도달하여 출력을 생성하고 종료되어야 한다. 유한한 시간 내에 종료되어야 하며 무한한 시간이 흐르면서 의도된 결과를 생성하지 못하면 알고리즘이라 할 수 없다.
참고 문서
- 이석호. (2004). 자료 구조와 JAVA. 정익사.