Study Fundamental/Algorithm 3

분할 정복 알고리즘 (Divide-and-conquer)

필자는 분할 정복 알고리즘을 '협업 또는 분업'이라고 생각한다. 대학에서의 조별 과제부터 사회로 진출해 회사에 입사하여 하는 일까지 우리는 살면서 늘 협업과 분업을 하고 있다. 협업이라 하면 '서로 커뮤니케이션을 하면서 하나의 공통된 목적을 이루는 것이 처음 생각나는 것'이 겠지만 본질적으로는 한 사람이 전부 하기에는 시간적인 제약과 분야에 따른 능력적 제약이 있기 때문에 일을 나누는 것이다. 일을 나누면 결론적으로는 효율이 올라가기 때문이다. 분업은 말그대로 '업무를 나누는 것'이다. 한가지 일을 한사람이 하는 것 보다는 두사람이 하는 것이 시간적으로 많이 단축될 것이다. 생각을 해보자. 어느 기업이 있다. 기업이 성장하려면 여러 분야에서 성과를 보여야한다. 기본적인 사업모델부터 마케팅, 제무관리 등,..

알고리즘의 성능 분석(feat. 시간복잡도)

프로그램 작성 시에 계산시간을 줄이고 메모리를 효과적으로 사용하기 위해 고민해야한다. 첫 번째 이유는 프로그램의 규모가 이전에 비해서는 엄청나게 커지고 있기 때문이다. 처리해야 할 자료의 양이 많아질 수록 알고리즘의 효율성이 더욱 중요해진다. 두 번째 이유는 사용자들이 여전히 빠른 프로그램을 선호하기 때문이다. 효율적인 알고리즘이란 전체 실행 시간이 짧으면서 메모리와 같은 컴퓨터의 자원들을 적게 사용하는 알고리즘이다. 일반저으로 실행 시간이 메모리 공간보다 더 중요하게 생각되기 때문에 알고리즘의 실행 시간을 효율적인 알고리즘의 기준으로 삼는다. 공간복잡도에 대해서는 많이 기재하지 않겠다. 이유는 과학기술의 발달로 인해 일반적으로 메모리의 용량이 상당히 증가했기 때문이다. 물론 IOT(사물인터넷)이나 한정..

알고리즘

알고리즘은 우리의 일상생활에서 그리 낯익은 단어는 아니다. 2016년 알파고와 이세돌 9단의 대국이 화제가 되면서 A.I와 함께 IT분야의 핫 키워드가 되었다. 알고리즘이라는 용어는 9세기경 페르시아의 수학자인 알콰리즈미(al-Khwarizmi)의 이름으로부터 유래되었다. 알고리즘은 기본적으로 문제를 해결하기 위한 단계적인 절차를 의미한다. 우리는 알게 모르게 알고리즘을 세우거나 실천한다. 대표적인 예로 요리가 있다. 요리를 하기 위해서 식재료를 준비하는 단계부터 요리를 순차적으로 하는 과정이 알고리즘과 유사하다. 요리라는 알고리즘을 단계적으로 실행하면 음식이라는 결과물이 나온다. 이 음식은 문제를 해결하면 나오는 답과 같다. 이렇듯이 알고리즘을 단계적인 정차를 따라하면 주어진 문제의 답을 준다. 문제를..