서론
지난 글에서는 알고리즘의 어원, 개념, 특성에 대해 알아보았다.
알고리즘의 개념을 알았으니, 유명한 알고리즘들을 살펴보도록하자.
여러 알고리즘을 살펴보려면, 알고리즘을 ‘볼 수 있고’ 비교할 수 있어야하지 않겠는가?
그러니 우선 알고리즘의 표현 방법을 알아보려 한다.
알고리즘의 표현방법
알고리즘은 자연어, 프로그래밍 언어, 의사코드, 순서도 등의 방법으로 나타낼 수 있다.
하나씩 알아보자.
1. 자연어
우리가 일상에서 사용하는 모든 언어는 자연어이다.
영어, 한국어, 중국어 모두 자연어에 속한다.
우리가 평소 사용하는 언어이기 때문에 표현하고 이해하기 쉬울 수 있지만, 컴퓨터에게는 쉽지 않은 경우가 많다.
자연어로 빵을 굽는 알고리즘을 나타내면 다음과 같다.
170도씨로 오븐을 예열한다.
반죽을 만든다.
반죽을 틀에 넣는다.
10분간 굽는다.
꺼낸다. [1]
자연어에서도 프로그램과 비슷한 부분이 있다. “반죽을 만든다.”라는 행위는 “밀가루를 계량한다, 계란을 넣는다, 반죽을 만든다, 반죽을 치댄다.”라는 행위들로 구성되어있다.
프로그램에서는 비슷하게 ‘함수’라는 것을 사용한다.
두 값 중 큰 것을 반환하는 Max(x,y)라는 함수는 “두 값 비교하기, 큰 값 반환하기”라는 명령들로 구성된 함수이다.
2. 의사코드(pseudocode)
‘의사 코드’라는 말이 어려울 수 도 있다.
단어를 하나씩 쪼개보면 다음과 같다.
“의사”는 “doctor”가 아닌 “意思”로
무엇을 하고자 하는 생각.[2]
이고
‘코드’는 프로그래밍 언어로 작성된 코드와 닮아 붙은 말이다.
‘코드’라 하여 정말로 프로그래밍 코드와 똑같은 것은 아니다.
프로그래밍 코드를 흉내내고, 프로그램의 전체적인 논리 흐름만 나타낼 뿐이라 실제 프로그램에서 작동하지 않을 수 있다.
3. 순서도(flowchart)
알고리즘을 글로만 나타내면 복잡하고, 이해가 어려울 수 있다.
그래서 그림과 기호를 활용해 알고리즘을 나타낸 것을 순서도라고 한다.
순서도의 각 기호는 다음과 같은 뜻을 가지며 화살표로 연결된다.
순서도에서 사용되는 기호들을 표로 정리한 사진 [3]
알고리즘이 간단할 때에는, 순서도가 가장 간단한 표현방법일 수 있지만, 알고리즘이 복잡해지면 순서도가 가장 복잡할 수 있다.
4. 프로그래밍 언어
프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 언어이다. 고급 언어일수록 사람이 사용하는 언어에 가깝고, 저급 언어일수록 기계어에 가깝다.
프로그래밍 코드는 프로그래밍 언어로 작성된 코드를 뜻한다.
프로그래밍 코드가 컴퓨터에서 작동하기 용이한 것은 맞지만, 그 자체로 작동하는 것은 아니고 일련의 과정을 거쳐 컴퓨터가 이해하고 동작하게 된다.
이 과정에서 고급언어는 더 복잡한 과정을 거치기 때문에 대채로 저급 언어보다 느리다.
프로그래밍 언어는 너무 다양하기 때문에 글에서 모두 다룰 수는 없고 대표적인 언어 몇 가지만 다루려 한다.
알고리즘의 표현 방법 예시 사진[4]
이번 글에서는 알고리즘의 표현 방법에 대해 다루어 보았다. 다음 글에서는 알고리즘의 효율을 측정하는 척도에 대해 알아보려 한다.
출처 및 참고자료
1 : https://www.10000recipe.com/recipe/6939866
2 : https://dict.naver.com/search.nhn?dicQuery=%EC%9D%98%EC%82%AC&query=%EC%9D%98%EC%82%AC&target=dic&query_utf=&isOnlyViewEE=
3 : https://lsh424.tistory.com/31
4 : https://blog.daum.net/gk468401/2
https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
https://ko.wikipedia.org/wiki/%EC%9D%98%EC%82%AC%EC%BD%94%EB%93%9C
https://dict.naver.com/search.nhn?dicQuery=%EC%9D%98%EC%82%AC&query=%EC%9D%98%EC%82%AC&target=dic&query_utf=&isOnlyViewEE=