STUDY LOG/Algorithms

알고리즘이란

Jinwang Mok 2021. 9. 27. 10:52

# 알고리즘의 발음에 대해서는 논란이 많습니다. 실제 발음은 알고리듬과 유사하나, 여기에서는 대중성을 고려해 알고리즘이라고 사용하겠습니다.

 

💡 생각하는 방법을 터득한 것은 미래의 문제를 미리 해결한 것이다. -James Watson

알고리즘이란 문제의 해결 절차를 체계적으로 기술한 것을 의미합니다.

여기서 문제입력과 출력을 명시할 수 있어야 합니다. 즉, 입력으로부터 출력을 만들어내는 과정을 알고리즘이라고 부릅니다.

 

예를 하나 들어보죠.

학생이 30명인 한 반에 대하여 학생들을 키 순서로 정렬하는 문제가 있다고 가정하겠습니다.

 

문제는 키 순서로 정렬하는 것이고,

입력은 학생 30명의 학번과 키이며,

출력은 키 순서로 정렬된 학번 목록이라고 하겠습니다.

 

이렇게 입력이 주어지고, 문제를 통해 출력을 해내는 일련의 과정을 알고리즘이라고 부릅니다.

 

알고리즘을 배우기 전에..

컴퓨터 공학적으로, 알고리즘의 목표는 결국 최적화라고 할 수 있습니다. 따라서, 처음 시작할 때는 순서도의 기호정도를 이해하는 수준에서 시작하게 되겠지만 결국 프로그래밍 언어자료구조를 모르면 최적화라는 목표에 도달하기에는 힘들 것입니다.

 

그 중에서도 특히 자료구조는 알고리즘과 떼려야 뗄 수 없는 관계에 있습니다. 스택, 큐, 연결리스트, 이진트리 등등 이 자료구조를 이해하고 설계할 수 있어야 이후 알고리즘을 적용하는 것이 수월할 것입니다. 따라서, 자료구조 공부를 선행하거나 혹은 적어도 동행해야 하겠습니다.

 

좋은 알고리즘

그렇다면 좋은 알고리즘은 무엇일까요?

좋은 알고리즘은 명확하고 효율적이어야 합니다. 이해하기 쉽게 되도록 간단하고, 순서도의 경우 기호가 아니라 일반 언어라도 좋으니 그 표현이 명확해야 합니다. 또한, 같은 문제를 해결하는 알고리즘이라고 하더라도 수행 시간이 크게 차이날 수 있기에 효율적이어야 합니다. 효율적이라는 말은 알고리즘이 최적화되었다는 것이겠지요.

 

하지만, 어떤 알고리즘을 추상적으로 좋다고 표현하는 것은 애매합니다. 우리에겐 평가할 수 있는 지표가 필요하지요.

알고리즘의 평가요소는 크게 두가지 입니다.

  1. 효율성Efficiency
  2. 정확성Effectiveness

효율성을 나타내는 지표는 Big-O라고 부르는 시간복잡도Time Complexity가 있겠습니다. 이에 대해서는 다음에 더 자세히 다루겠습니다. 다음으로 정확성은 아주 간단합니다. 주어진 문제에 대해 정확한 답을 하였는가? 이것입니다. 과일을 개수별로 오름차순 정렬해달라는 문제에 내림차순으로 정렬했다면 틀린 알고리즘이겠지요?


이상으로 알고리즘이란 무엇인지에 대해 정리해보았습니다.

강의하신 개론적인 이야기를 정리해보았고, 예시를 나름대로 추가해서 보충해보았습니다.

사실, 시간복잡도나 재귀 구조에 대해서도 강의하셨지만, 이는 따로 정리할 필요가 있어보이고 과제로도 주어졌기에;;ㅋㅋ 이후에 다른 글에서 정리하도록 하겠습니다.

 

이상으로 글을 줄입니다.📝

'STUDY LOG > Algorithms' 카테고리의 다른 글

엘레베이터 순서도  (1) 2021.09.26