알고리즘(Algorithm)은 문제를 해결하기 위해 필요한 계산절차나 처리과정의 순서이다
알고리즘의 뜻에 대해 쉽게 이해하기 위해 우리의 일상 속에서 알고리즘을 찾아보자면 집에서 회사까지 가는 길 찾기, 샌드위치 만드는 방법, 마트에 가서 물건 구매하기 등이 있다.
최단 거리나 최단 시간내에 집에서 회사까지 가는 길을 찾는 것, 샌드위치를 만들기 위해 필요한 재료 준비와 조리를 순서대로 진행 하는 것, 마트에서 필요한 물건을 잡고 계산 하는 것 이러한 것들 모두 알고리즘이라 할 수 있다.
프로그래밍에서의 알고리즘은 input값을 통해 output값을 얻기 위한 계산 과정을 말하는 것으로, 이러한 문제를 해결할 때 정확하고 효율적으로 결과값을 얻기 위해서는 알고리즘이 필요하다.
알고리즘은 아래의 5가지 조건을 만족해야 한다.
입력 : 외부에서 제공되는 자료가 0개 이상 존재해야 함
출력 : 최소 1개 이상의 결과를 가져야 함
명확성 : 각 단계는 명확하고 애매함이 없는 명령어로 구성 되어야 하고, 모든 과정은 명백하게 실행 가능한 것 이여야 함
유한성 : 각 단계들을 유한한 횟수로 거친 후, 유한한 시간 내에서 문제를 해결하고 종료해야 함
효과성 : 모든 연산들은 유한한 시간 내에서 정확하게 수행할 수 있을 정도로 충분히 단순해야 함
이것들을 바탕으로 알고리즘은 어떠한 입력이 있다면 이 입력에 따라 명령을 명확하게 실행하고, 입력에 따른 결과물을 효과적으로 도출해 낼 수 있다면 알고리즘으로 볼 수 있다는 말이 된다.
반대로 명령에 애매함이 있거나 유한한 시간내에서 끝나는 것이 보장되지 않은 경우는 메서드(Method)라고 한다.
프로그램의 품질은 알고리즘의 좋고, 나쁨에 따라 달렸다고한다.
좋은 알고리즘과 안 좋은 알고리즘을 나누는 기준이 따로 있을까? 이것은 어떠한 기준을 두고 판단되는지에 대해 알아보자.
이해하기 쉽다
알고리즘은 가능한 알기 쉬워야 한다.
복잡하고 난해한 알고리즘을 작성하면 나중에는 본인조차 이해하기가 어렵게 되고, 여러 사람들과 협업 시 다른 사람이 곧바로 이해할 수 없게되어 문제가 생길 수 있다.
또한 이러한 알고리즘은 올바른 결과가 나타나는지도 검증하기 어렵기 때문에 틀린 부분을 찾기도 어렵게 되어 작업 능률이 저하된다.
속도가 빠르다
: 속도가 빠르다는 것은 실행을 한 뒤에 그 결과가 나타날 때 까지의 시간이 짧다는 것을 의미한다. 결과의 값이 같다면 짧은 시간안에 올바른 결과를 얻을 수 있는 알고리즘이 더 좋은 알고리즘으로 판단된다.
효율적이다
: 다른말로 프로그램을 실행할 때 사용하는 메모리 영역이 적어야 한다.
대량의 메모리가 필요한것은 프로그램의 효율이 낮다는 것으로, 비용 면에서 메모리 영역이 적은것이 더 좋다고 말할 수 있다.
재이용하기 쉽다
: 과거에 작성한 것을 그대로 사용하거나 부분적으로 이용할 수 있다면 새로운 프로그램을 만드는 데 필요한 시간을 단축시킬 수 있다.