1. 알고리즘 algorithm
알고리즘이란
알고리즘은 수학과 컴퓨터과학 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법입니다. 알고리즘은 “문제를 해결하는 방법”이기 때문에 언어는 상관없습니다. 같은 원리에 따라 동작한다면 다른 언어로 작성되었더라도 같은 알고리즘을 사용했다고 볼 수 있습니다.
개발자는 현실의 문제를 해결하기 위해 코드를 작성하여 프로그램을 개발합니다. 한 문제를 해결하는 방법은 한 가지만 있는게 아니라 무수히 많을 수 있습니다. 그 중에서 자주 쓰이는 문제 해결 방법에는 BFS, DFS, DP, 다익스트라 등과 같이 이름을 붙여서 문제 해결 방법을 패턴화 하였습니다. 이렇게 패턴화된 문제 해결 방법을 보통 알고리즘이라고 부릅니다. 알고리즘을 학습하여 응용, 적용할 수 있게 된다면 비슷한 문제를 보다 쉽게 해결할 수 있습니다.
같은 문제상황에서도 개발자마다 해결 방법으로 내놓은 알고리즘이 다를 수 있습니다. 문제만 해결하면 되므로 아무 알고리즘으로 코드를 작성하면 될까요? 그렇지 않습니다. 문제를 해결할 수 있는 알고리즘이 여러 가지가 있더라도, 상황에 맞는 알고리즘을 잘 선택해야 합니다. 잘 선택할 수 있으려면 알고리즘을 평가할 수 있어야 합니다. 평가 기준에 대해서 간략히 살펴보도록 하겠습니다.
2. 알고리즘 평가기준
1.
시간 복잡도
2.
공간 복잡도 (메모리)
3.
구현 복잡도
시간과 공간은 보통 trade-off 관계입니다. 꼭 그렇진 않지만, 실행시간을 줄이려면 메모리를 더 사용해야 하고, 메모리 사용량을 줄이려면 실행시간이 늘어나게 됩니다. 또한 실행시간이 적게 걸리고 메모리를 적게 차지하는 알고리즘이 무조건 좋은 것은 아닙니다. 결국 개발자가 알고리즘을 코드로 구현해야하는데, 너무 복잡한 알고리즘이라면 개발시간이 너무 늘어날 수 있습니다. 시간과 공간을 좀 더 차지하더라도 간단한 코드를 작성하는 편이 더 좋을 수 있습니다. 따라서 시간복잡도와 공간복잡도를 미리 계산하여 요구상황에 맞으면서도 간단한 알고리즘을 적절히 사용하는 것이 중요합니다.
알고리즘 평가기준 & 시간복잡도
Copyright 2023. 노씨데브. All rights reserved. 무단 공유 및 배포를 금합니다.