728x90
반응형

Algorithm 17

도서 [추천 알고리즘의 과학]을 소개합니다.

추천 알고리즘의 과학 / 저자 박규하 네 제 책이 나왔습니다. 사실 책을 쓴다는 미명하에 블로그도 소홀히했었는데요. 작년 11월에 드디어 책이 출간되었습니다. 이 자리를 빌어 먼저 집필을 권해주신 로드북 임성춘 대표님께 감사의 말씀을 전합니다. 이 책에서는 추천 알고리즘의 기본 원리부터 우리 생활속에서 쉽게 접하지만 알쏭달쏭했던 추천 알고리즘을 설명하고 있어요. 쉽게 설명하려고 노력했고요, 이해하고나서 활용하는 방법도 작성해두었습니다. 예를 들어 인스타그램 인플루언서가 되기 위해 해야하는 활동이나, 유튜브 구독자 수를 늘리기 위한 활동같은 방법말이죠. 구매링크는 여기를 클릭하세요! 컴퓨터를 공부하는 학생이나 개발자뿐만 아니라, IT 산업을 이끌어가는 기획자, 마케터, 데이터 사이언티스트, 저널리스트 등 ..

Algorithm 2023.02.07

[Algorithm] K-nearest neighbors algorithm: KNN 알고리즘

KNN 알고리즘은 추천 시스템의 기본이 되는 알고리즘이다. 우리는 한 번 쯤 이미 비슷한 경험을 해본 적이 있다. 넷플릭스나 와챠에서 나와 비슷한 성향을 가진 사람이 본 영상을 추천받기도 하고, 유튜브나 페이스북에서 친구들이 봤거나 좋아요, 댓글달기와 같이 참여한 게시물 또는 영상이 추천된다. 여기에 조미료처럼 머신러닝 한 스푼을 넣어주면 내가 봐 온 영화를 토대로 어떤 영화를 내가 좋아할 지 추천하는 것도 가능하고, 새로나온 영화에 대해서 내가 별점을 얼마나 줄 지 예측할 수도 있다. 하지만 머신러닝은 단순한 조미료가 아니므로 ( 참고로 한국 구글에서 머신러닝 부트캠프를 무료로 진행한다 ) 지금은 아 그렇구나~ 정도로만 하고 넘어가도록 하자. K-nearest neighbors algorithm ( K..

Algorithm 2020.09.20

[Algorithm] Dynamic Programming - 동적 프로그래밍

동적 프로그래밍은 말이 동적이지 쉽게 이해하자면 프로그램이 돌아갈 때 자체적으로 기억을 하게 하는 것이다. 모든 값을 검사할 때, 이전의 값 중 최적의 해를 저장해두었다가, 다음 값을 검사할 때 비교하는 방식이다. 아주 아주 간단한 동적 프로그래밍은 최댓값 혹은 최솟값을 찾는 문제이다. 숫자로만 이뤄진 배열을 입력받는 경우, 가장 작은 수를 이미 가지고 있는 최댓값을 구하는 함수 또는 가장 큰 수를 이미 가지고 있는 최솟값을 구하는 함수를 이용해 문제를 풀 수 있을 거다. const findMax = (arr) => { let max = -Infinity; for ( let value of arr ) { // value 는 arr[index] 와 같다 ( for...of 검색 ) if ( max < va..

Algorithm 2020.09.20

[Algorithm] NP-completeness : NP-완전문제, Non-deterministic Polynomial time, 비결정론적 다항시간 문제, 난해문제

일단 이름이 짜증 난다. NPC라고도 불리는 Nn Polynomial time completeness problem ( NP-완전 문제 ) 는 쉽게 말해서 컴퓨터로 돌려서 결과를 얻는 데 며칠이 걸릴지 모르는 문제다. 그런데 심지어 어떤 문제가 NPC 문제인 지 아는 것도 쉽지 않다. 빠른 해답이 알려지지도 않았기 때문에 정확한 답을 찾아내기 힘들다. 그나마 다행인 게 근사 알고리즘을 통해 비슷한 결과를 꺼내는 것으로 대체 가능하다는 정도일까. 대표적인 예시로 외판원 문제가 있다. 도시를 돌아다니며 방문판매를 하는 외판원이 도시를 돌아다닐 수 있는 모든 경우의 수를 나타내고자 할 때의 시간 복잡도는 O(n!) 이다. 도시 2개나 3개 정도까지는 파악하는 데 오래 걸리 지 않지만, 도시가 10개만 되어도 ..

Algorithm 2020.09.19

[Algorithm] Greedy algorithm - 탐욕 알고리즘

탐욕 알고리즘은 현재 주어진 상황에서 최적의 값을 골라 결과를 채우는 알고리즘을 말한다. 가장 많은 예시인 배낭 채우기는 간단하게 설명하고, 다른 예시를 보도록 하자. 탐욕 알고리즘은 그 이름에서 유추할 수 있듯이 욕심쟁이라면 당연히 따를 법한 알고리즘이다. 배낭 채우기 ( 갑자기 ) 우리는 도둑이다. 도둑이라면 응당 가장 비싼 물건을 훔쳐야 할 것이다. 맥북을 훔치기 위해 도둑이지만, 일반 고객인 척 위장하여 애플매장을 방문하였다. 우리에게는 남들에게는 보이지 않는 마법의 '배낭' ( 혹은 가방 ) 이 있다. 이 배낭은 보이지않는 대신에 너무 작게 만들어져서 중량 초과를 할 경우 밑바닥이 터져버린다! ( 요즘 종이 가방도 이것보단 튼튼하겠다! ) 내 배낭이 버틸 수 있는 총 중량과 애플매장에서 훔칠 수..

Algorithm 2020.09.18

[Data Structure] Trees - 트리구조

많은 자료구조 중에서 자주 사용되는 구조 중 하나는 트리구조이다. 어떤 웹사이트에서, 사이트맵 이라는 걸 본 적이 있다면 이해하기 쉽다. 또, 우리가 사용하는 PC를 폴더단위로 관리한다면, 더 이해하기가 쉽다. 따오기라는 폴더 안에는 꿩, 가마우지, 새폴더, 새 새폴더 라는 이름의 4개의 폴더가 있다. 하나의 부모 아래에 여러개의 자식이 있는 구조. 이게 트리구조 다. 우리가 자료를 찾거나 정리하기 위해 사용하는 자료구조 중에서 트리를 기반으로 한 다양한 구조가 있다. Binary Tree ( 이진 트리 ) 이진 트리는 하나의 부모가 가질 수 있는 자식의 수가 최대 2개인 트리를 말한다. Full Binary Tree ( 포화 이진 트리 ) 포화 이진 트리는 모든 부모노드가 두 개의 자식노드를 가지고 있..

Algorithm 2020.09.16

[Algorithm] N-Queens, N 퀸즈, N개의 여왕, N 여왕

DFS ( Depth-first search ) 의 꽃인 N queens 를 구현하였다. 물론 자의로 주어진 스켈레톤에 구현하였고, 타의로 내 레포지토리에 하나가 쌓이게 되었다. 우선 N queens를 구현하기에 앞서, BFS 와 DFS를 모른다면 이 링크를 통해 개념 정도는 숙지를 해두자. [Algorithm] BFS, DFS - 너비우선탐색, 깊이우선탐색 BFS와 DFS는 탐색에서 대조적으로 설명하는 대표적인 두가지 방법이다. BFS와 DFS의 중간 그 어딘가에는 Heuristic ( 휴리스틱 ) 함수를 사용한 A* search ( 에이스타 서치 ) 등이 존재한다. 오늘은 BFS와 DFS dev-gp.tistory.com Backtracking ( 백트래킹, 퇴각검색 ) 백트래킹은 한정 조건을 가지는..

Algorithm 2020.09.15

[Algorithm] Dijkstra's algorithm - 다익스트라 알고리즘

BFS는 가중치가 없는 균일 그래프에서 최단경로를 계산하는 반면, 다익스트라 알고리즘은 가중치가 있는 그래프에서 최단 거리를 계산하는 데 사용된다. 아래 그림은 균일 그래프이다. 1번 vertex에서 출발하여 4번 vertex에 도착하기까지의 최단경로는 A, B 둘 중의 하나이다. 그렇다면 가중치가 있는 경우는 어떨까? 아까의 A경로 혹은 B경로 모두 7이라는 가중치를 가진다. 그런데, 우리는 직관적으로 더 짧은 길이 있음을 알 수 있다. 아래 그림의 화살표를 따라 이동하면, 가중치 6만에 도착할 수 있다. 대체 가중치가 뭐길래? 쉽게 이해하자. 1번은 서울이고, 4번은 부산이다. 2번은 울산이고, 3번은 대전이다. 그래프의 간선에 표기된 가중치는, 현실 시간으로 30분이라고 가정하자. 서울에서 부산까지..

Algorithm 2020.09.15

[Data Structure] Graph - 그래프

그래프는 자료의 관계도에 주로 사용되는 자료구조이다. 가장 대표적인 예는 역시 싸이월드 페이스북 친구이다. 나와 친구의 관계를 가중치1이라고 한다면, 친구의 친구는 가중치2 정도로 두고, 친구의 친구의 친구는 가중치3정도로 두는 것이다. 그러면 나를 기준으로 가중치가 1인 사람은 가장 가까운 사람들이고, 가중치가 2인 사람들은 그 다음으로 가까운 사람들이고, 3정도의 가중치는 내 친구와 그 사람의 친구가 서로 친구인 경우니까 그냥 남이다. Graph 그래프는 이전의 링크드리스트에서 보던 노드라는 개념을 가져와서 사용한다. 다른 점이 있다면, 실제로 그래프에서는 노드 대신 Vertex ( 점 ) 와 Edge ( 간선 ) 을 사용한다. ( 참고로 vertex의 복수형은 vertices 이다 ) 그래프에는 방..

Algorithm 2020.09.14

[Algorithm] BFS, DFS - 너비우선탐색, 깊이우선탐색

BFS와 DFS는 탐색에서 대조적으로 설명하는 대표적인 두가지 방법이다. BFS와 DFS의 중간 그 어딘가에는 Heuristic ( 휴리스틱 ) 함수를 사용한 A* search ( 에이스타 서치 ) 등이 존재한다. 오늘은 BFS와 DFS에 대한 간략한 설명과, 트리구조에서 어떤 방식으로 접근하여 사용하는 지 이야기해보자. BFS ( Breadth-First Search, 너비 우선 탐색 ) BFS는 시작점에서 출발하여 종점에 도착할 때 까지 시작점으로부터 같은 거리에 있는 좌표 혹은 노드를 가장 먼저 탐색한다. 위 그림에서 왼쪽의 grid는 start로부터 end까지 도달하기 위해 BFS가 동작하는 모습을 단편적으로 보여준다. 마찬가지로 오른쪽의 트리에서 루트로부터 end에 도달할 때까지 거리가 가까운 ..

Algorithm 2020.09.13
728x90
반응형