알고리즘, 자료구조

알고리즘(Algorithm)

LUNAV 2022. 3. 20. 19:20

알고리즘이란?

문제를 해결하기 위한 절차를 의미한다.

같은 문제를 해결하는 다른 알고리즘과 비교해 문제 해결속도가 빠를수록 좋은 알고리즘이다.

 

알고리즘의 조건 5가지

입력 외부에서 제공되는 자료가 0개 이상 존재해야 한다.
출력 모든 입력에 대해 모두 같은 출력이 나와서는 안된다.

가령 어떤 알고리즘에 대해 입력할 수 있는 수가 1부터 100까지라 가정하자.
1부터 100까지 각각 입력했을 때 모든 출력이 같아서는 안된다는 것이다.

즉, 적어도 두 가지 이상의 서로 다른 출력값이 나와야 한다.
명확성 수행 과정이 명확해야 한다.

비유하기에 무리가 있을 수 있지만, 쉬운 이해를 위해 일상 생활에 비유해 보자.
거실에 서 있는 당신이 닫힌 안방 안의 의자에 앉기 위한 방법을 컴퓨터에게 설명해 보자.

만약 '안방에 들어가서 의자에 앉는다' 라고 적는다면, 아마 컴퓨터는 이해하지 못할 것이다.
적어도 '안방 문 앞까지 걸어가고, 오른손 또는 왼손으로 안방 문 손잡이를 잡은 뒤 손목을 돌리면서 문을 밀며 문을 연다. 이후 안방에 있는 의자 앞까지 걸어간 후 앉는다' 와 같이 방법 하나하나를 제시해야만 할 것이다.

이처럼 우리가 개떡같이 말한다고 해도 찰떡같이 알아들을 만큼 프로그래밍 언어와 컴퓨터는 똑똑하지 않다.

따라서, 수행 과정 하나하나는 컴퓨터가 이해할 수 있을만큼 명확해야만 한다.
유한성 모든 알고리즘은 유한한 횟수 이내에 문제를 해결할 수 있어야 한다.
효율성 모든 과정은 명확하게 실행이 가능해야 한다.

 

알고리즘을 나타내는 방법

크게 자연어, 순서도, 의사코드, 프로그래밍 언어로 나누어 진다.

자연어 사람이 일상에서 의사소통을 할 때 사용하는 말을 자연어라고 한다.
인공적으로 만들어진 언어와 대비하기 위해 사용한다.
의사코드 알고리즘을 작성할 때 알고리즘의 작동 논리를 표현하는 코드이다.
프로그래밍 언어를 흉내내었기 때문에 프로그래밍 언어와는 문법이 다르며, 따라서 일반적인 프로그래밍을 할 때 의사코드를 실행할 수 없다.
순서도 알고리즘의 데이터 처리나 작업의 흐름을 여러 도형과 기호 등으로 나타낸 도표를 의미한다.
프로그래밍 언어 우리가 아는 Python, C, C++ 등과 같은 언어를 말한다.