전체 글
-
다이나믹 프로그래밍(DP)공부일기/알고리즘 2020. 9. 5. 14:44
다이나믹 프로그래밍 다이나믹 프로그래밍의 가장 큰 특징은 메모리를 적절히 사용해 수행 시간을 비약적으로 증가시키는 방법이다. 메모리가 완전 탐색에 비해 더 많이 필요할 수 있지만 메모리를 조금 더 사용함으로써 수행 시간을 비약적으로 증가시킨다. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장해 다시 계산하지 않도록 하며 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식(탑다운, 버텀업)으로 구성된다. 다이나믹 프로그래밍은 문제가 다음의 조건을 만족할 때 사용할 수 있다. 최적 부분 구조 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. ex) 피보나치 수열 중복되는 부분 문제 동일한 작은 문제를 반복적으로 해결해야 한다. ex) f(2)의 반복적인..
-
정렬 & 이진 탐색공부일기/알고리즘 2020. 9. 5. 00:26
정렬 알고리즘 정렬이란 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 말한다. 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용된다. 블로그의 [모두의 알고리즘] 탐색과 정렬 편에 정리 해두긴 했지만 장기기억으로 변화시키기 위해 한번 더 정리해본다. 선택정렬 O(N^2) 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복하며 정렬한다. array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스, 첫 번재 인덱스의 값이 가장 작다고 가정. for j in range(i+1, len(array)): # i 다음 값 부터 살펴봄 ..
-
그래프탐색 알고리즘: DFS / BFS공부일기/알고리즘 2020. 9. 1. 23:14
탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정이며, 대표적인 그래프 탐색 알고리즘으로 DFS와 BFS가 있다. 그래프 탐색 알고리즘을 공부하기 전 먼저 알아두면 좋은 개념들을 먼저 정리한다. 스택: LIFO 형식의 자료구조. 입구와 출구가 동일한 형태라 생각하면 된다. 비유하자면 뷔페의 접시 파이썬에서 기본적인 리스트를 이용해 스택구조를 활용할 수 있다. stack = [] # 순서대로 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제() stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(1) stack.append(4) stac..
-
구현(시뮬레이션과 완전 탐색)공부일기/알고리즘 2020. 9. 1. 13:10
구현 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정. 대게 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다. 구현 유형의 예시는 다음과 같다. 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 완전 탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용된다. # 동, 북, 서, 남 dx = [0, -1, 0, 1] dy = [1, 0, -1, 0] # 현재 위치 x, y = 2, 2 for i in range(4): # 다음 위치 nx = x + dx[i] ny = y + dy[i] print(nx,ny) - 완전..
-
그리디 알고리즘(탐욕법)공부일기/알고리즘 2020. 8. 31. 20:33
요즘 프로그래머스나 백준 같은 알고리즘을 풀어볼 수 있는 사이트에서 알고리즘 문제들을 하나씩 풀어보고 있다. 방학동안 한 스타트업에서 IT Admin 계약직으로 일하게 돼 업무가 바쁘지 않은 동안은 내 공부를 할 수 있었는데, 이 시간에 어떤 걸 공부하면 좋을까 생각하다 알고리즘 문제를 풀어보게 됐다. 맞은 문제는 다른 사람들의 코드를 보며 더 간결한, 빠르게 작동하는 방식도 있다는 점을 배웠고, 아무리 생각해도 어떤 방법으로 풀어야 할 지 모르겠는 문제들도 있었다... 물론 이런 경우 구글링하면 대부분 나오긴 했으나 이해가..안되는.. 경우도 있었다..ㅎㅎ 알고리즘 문제에도 유형이 존재한다는 것을 알게 됐고, 유형별로 공부를 해야겠단 생각을 했다. 알고리즘 문제를 풀어보며 느낀 것은 어떤 방식으로 풀어..
-
[생활코딩 - 머신러닝 야학] 텐서플로우 day 5/ 후기공부일기/머신러닝 야학 2020. 8. 27. 00:12
1 - 18. 히든레이어 기존의 퍼셉트론을 여러 개 사용해 연결하면 신경망을 깊게 만들 수 있다. 입력 부분인 Input Layer와 출력 부분인 Output Layer 사이에 추가돼 있는 것을 Hidden Layer라고 하는데, 밑의 사진을 기준으로 인풋과 아웃풋 사이에 하나의 층을 쌓아 모델을 구성한 것이다. 층으로 쌓은 레이어는 다섯 개의 노드를 갖고 있다. 결과를 만들기 위해서 히든레이어 모든 값들을 입력으로 하는 하나의 퍼셉트론이 필요하다. 그리고 히든레이어의 첫 번째 노드를 만들기 위해서도 하나의 퍼셉트론이 필요하다. [인풋레이어 - 히든레이어]를 하나의 모델로 보게 되면 13개의 입력을 받고 5개의 출력을 하는 모델이 되고, [히든레이어 - 아웃풋레이어]를 하나의 모델로 보게 되면 5개의 입..
-
[생활코딩 - 머신러닝 야학] 텐서플로우 day 3,4공부일기/머신러닝 야학 2020. 8. 25. 22:22
1 - 10. 보스턴 집값 예측 1 - 11. 수식과 퍼셉트론 13개의 입력으로 부터 한개의 출력을 만들어내는 구조를 만든다. 한개의 출력을 만드는 구조의 완전한 표현은 y = w1x1 + w2x2 + ... + w13x13 + b 수식이다(예제 기준). 컴퓨터는 입력되는 수식의 y와 x를 보고 w와 b를 찾게 된다. 뉴런이 실제 두뇌세포의 이름이면, 이 뉴런역할을 하는 모형의 이름을 퍼셉트론이라고 한다. w는 가중치, b는 편향이라고 부른다. 1 - 12. 보스턴 집값 예측(실습) # 파일 읽어오기 파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv' 보스턴 = pd.read_csv(파일경로) # 모양 ..
-
[생활코딩 - 머신러닝 야학] 텐서플로우 day 1,2공부일기/머신러닝 야학 2020. 8. 23. 18:27
생활코딩 머신러닝 야학 머신러닝1을 다 학습하고 텐서플로우로 넘어왔다. 코딩을 몰라도 머신러닝을 체험(?)할 수 있는 오렌지3 강의도 있었지만, 코딩 공부도 같이 할 수 있게 코드를 직접 짜보는 수업을 택했다. 1 -2. 목표와 전략 1 - 3. 지도학습의 빅픽처 머신러닝의 프로세스를 설명한다. 그림으로 쉽게 나타내 보면 이렇다. 1 - 4. 환경설정 1 - 5. 판다스 표에서 변수는 열로 표현되고 관측치에 따라 값이 변화할 수 있다는 의미가 있다. 원인은 독립변수, 결과는 종속변수. 지도학습은 이 두 가지를 분리하는 것에서 시작할 수 있다. 1 - 6. 판다스(실습) pd.read_scv('/경로/파일명.csv') # 파일 읽어오기 print(데이터.shape) # 모양 확인하기 데이터[['칼럼명1',..