퀵 정렬은 정렬을 하는 알고리즘이다. 퀵 정렬은 말의 뜻 그대로 빠른 정렬이다. 선택 정렬보다 더욱 빠를 뿐더러 실제로도 더 자주 사용되는 정렬이다. 그 예로 C언어 표준 라이브러리에서는 qsort라는 함수가 있다. 이 녀석은 바로 퀵 정렬을 구현한 함수라고 할 수 있다. 퀵 정렬에서도 분할 정복 전략(Devide and Conquer)를 적용할 수가 있다. 배열을 퀵정렬로 정렬해서 사용을 해보자. 정렬을 시키는데 필요한 가장 간단한 배열은 무엇일까? 예전에 필자가 언급했던 어드바이스를 기억하는가? 그렇다. 아예 정렬을 할 필요가 없는 정렬도 있다. 비어있는 배열, 원소가 하나인 배열. 이런 종류의 배열은 정렬할 필요가 없다. 비어있는 배열이나 원소가 하나인 배열은 배열이라는 것의 어떤 기본적인 단계가 ..
재귀함수 (recursive function) 개념 리커시브는 반복이라는 뜻이다. 코딩에서 재귀함수는 특정 함수를 생성했을때 그 안에서 다시 스스로 호출하여 기능이 수행되도록 만든 개념이다. 만약, k까지의 합산을 구하는 펑션을 프로그래밍하기 위해서 5까지 합을 만들어내야 한다고 해보자. 만약 5 + 4 + 3의 경우, 5 + 4 의 더하기로 볼 수도 있다. 때문에 4까지의 더하기도 4 + 3 + 2 + 1 까지의 더하기라고 쓸수도 있다. k까지의 더하기를 산출하는 이 함수를 sum(k)라고 부른다면 sum 펑션의 내부에서 또 sum 펑션을 불러서 프로세스를 수행하는게 가능해지는 것이다. 재귀 함수는 다른 여러가지 필드에서도 찾아볼 수가 있다. 프렉탈 모형이 스스로와 유사한 패턴을 가진 작은 모형을 무한..
딥러닝 (deep learning) 이란? 딥러닝이라는 것은 사람처럼 기계가 사유를 하면서 학습을 가능케하는 기술이다. 여러 데이터를 처리해서 유사한 집합끼리 그룹화하고 위계 관계를 알아내는 방식이다. 이건 머신러닝의 한가지 갈래라고 볼수도 있다. 차이는 무엇이냐면 머신러닝은 먼저 기계에게 여러가지 지식을 가르치고나서 그 결과를 가지고 컴퓨터 다른 무언가를 예상하게 하는데 딥러닝은 인간이 기계를 가르치지 않고도 기계가 스스로 공부를해서 나중일을 예상해낼 수 있다는 점이다. 예를들어, 머신러닝은 강아지 사진을 컴퓨터가 보도록하고 '이건 개야'라고 훈련시킨 다음에 나중에 개 사진을 보여주면서 '개'라고 맞추도록 유도하는것이라고 볼 수 있다. 반면 딥러닝은 기계가 스스로 개와 강아지의 이미지를 알아보도록 하고..
인터넷 중독 (internet addiction) 의미 우리는 인터넷을 이용하여 굉장히 많은 정보들을 체험해볼 수 있다. 그렇지만 쓸데없이 너무 많은 리소스를 인터넷 이용에 허비하게 된다면, 필요한것보다 더 많은 수준으로 인터넷에 크게 빠지게되어 비효율이 초래되기도 한다. 심하면 기운이 쳐지거나 초조해지거나 안절부절 못하는 상황까지 겪을 수 있다. 웹에 존재하는 인터넷은 무엇보다도 현실과 구분이 필요한 곳이다. 만약 인터넷 중독이 된다면 일상적인 생활을 영위하는데 있어서까지 영향을 받게 되는 사례가 많다. 현실에서 인간관계가 망가지거나 하는 등을 불쌍사가 일어나기도 한다. 그러다보면 결국 현실과의 거리가 점점 멀어지게 되어 사회생활을 제대로 할 수 없는 경우까지 나아갈수가 있는 것이다. 대표적으로 어린이..
인공지능 (artificial intelligence) 설명 인공지능은 인간의 배우는 능력, 사유 능력, 발화 능력 같은 것을 프로그래밍으로 구현한 테크닉이다. AI라고 불리우는 이 인공지능 기술을 기반으로 기계는 인간과 유사한 지능을 가진 것 같은 구동을 보여주기도 한다. 현재는 이미 가지고 있는 데이터를 기반으로 정해진 환경에서 프로세스가 진행되는 수준이 인공지능의 한계라고 볼 수 있다. 그렇지만 이제는 문제를 스스로 찾고 상황을 파악하여 솔루션을 만들어내고 스스로 의사표현을 진행하는 수준까지 이르게 될 것으로 여겨진다. 지금의 인공지능은 번역기를 좀더 매끄럽게 처리되도록 하는 수준을 행하고 있지만 미래에는 인간과 컴퓨터가 마치 인간대 인간으로 대화를 나누는 수준까지 나아갈수도 있다고 보고 있다. 4..
시간 복잡도 (time complexity) 이란? 양질의 프로그램을 구분하는 척도 중 한갈래인 시간복잡도는 작성한 코드들인 상황을 해결하는데에 있어서 어느정도의 시간을 많이 필요로 하는지 알아보는 것이다. 문제를 해결하기만 하면 이것이 구동되는데 걸리는 시간같은것은 중요하지 않지 않느냐라고 생각해보는것도 타당하지만 수행 시간이 늦어질수록 해당 프로그램이 씨피유를 점유하는 기간이 늘어나고 그러면 결국 CPU가 다른 프로세스를 처리하지 못하게되어 프로그램의 능률이 낮아질수 있다. 이런 이유로 프로그램을 작성함에 있어서 시간복잡도를 생각해서 코드를 짜야 한다. 시간복잡도에는 갖가지 항목들이 있는데 그 중에서도 최대 걸리는 시간의 개념이 가장 필요한 개념이라고 볼 수 있다. 이걸 빅오 표기라고 일컫는다. 프로..