복잡도란?

복잡도: 복잡도는 알고리즘의 성능을 표현하기 위하여 사용하는 개념이야. 누군가가 우리가 짠 알고리즘의 성능에 대해서 물어본다고 치자.

그 때 복잡도가 없이 설명하라면 나는 그저 이렇게 밖에 말하지 못할거야.

https://media3.giphy.com/media/yJFeycRK2DB4c/giphy.gif?cid=7941fdc6gx4wusbziughyr51aakhhz844f3a2tnomme4z5q1&ep=v1_gifs_search&rid=giphy.gif&ct=g

그리고 물어본 사람은 애써 웃어주며 날 피하겠지?

그래서는 좋은 개발 친구를 사귈 수 없을거야…(나 같은 좋지 않은 개발 친구는 사귈 수 있어….ㅎㅎ)

https://media3.giphy.com/media/pMePjXUqNNND2/giphy.gif?cid=7941fdc6uvf6b1mhgrsvfcm9k8efsc7ck2vx5vxsl9jy8od5&ep=v1_gifs_search&rid=giphy.gif&ct=g

이런 상황을 방지하기 위해서는 우리는 특정 로직에 대하여 성능을 표현해주는 공통된 방법을 고안하게 되었어. 그게 복잡도야!

복잡도의 종류 (시간/공간)

우리는 특정 로직의 성능을 나타내주는 복잡도를 크게 두가지의 측면에서 나눠서 표현해.

https://media3.giphy.com/media/5OWLUbuMq4YXEl2ECg/giphy.gif?cid=7941fdc6nx9j6mxfp40rry6claygszbgpjjtmydq0sshnkng&ep=v1_gifs_search&rid=giphy.gif&ct=g

시간복잡도와 공간복잡도가 바로 두 표현방식이야.

시간 복잡도(Time complexity)는 입력의 증감에 따라서 우리가 작성한 로직을 다 돌리기까지 시간이 얼마나 드는지를 표현해줘.

https://media3.giphy.com/media/uffabXjPLeRDIVUelb/giphy.gif?cid=7941fdc6ofz46nz3sk89wswn32so1bn7drxrtsm85e32xomh&ep=v1_gifs_search&rid=giphy.gif&ct=g

그리고 공간 복잡도(Space complexity)는 특정 로직이 작동되기 위하여 필요한 자원 공간을 표현해준다고 할 수 있어.

https://media1.giphy.com/media/10kxE34bJPaUO4/giphy.gif?cid=7941fdc6vscorlw9os86wpt24l4p7g7jgh8frcgzj3sonvhf&ep=v1_gifs_search&rid=giphy.gif&ct=g

예시로는 자바를 통해서 개발을 하는 사람이라면 해당 로직을 실행하는데 사용되는 호출 스택이 그 예시가 될 수 있어.

알고리즘을 처음 공부하는 나의 경우에는 공간 복잡도는 개념만 이해하고 시간 복잡도에 초점을 맞춰서 설명을 진행할 계획이야.

https://media4.giphy.com/media/d2ZcfODrNWlA5Gg0/giphy.gif?cid=7941fdc67qfdiw7xefac40az2qtbed47qxlx9w4w05or0n4w&ep=v1_gifs_search&rid=giphy.gif&ct=g