본문 바로가기

Programming399

도커(Docker)란 무엇인가? 초보를 위한 도커 안내서 https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html 목차 도커란 무엇인가.설치하고 컨테이너 실행하기.이미지 만들고 배포하기. 서버를 관리한다는 건 복잡하고 어려우며 고급 개발자들의 섬세한 작업이 필요한 영역입니다. 맨 처음 했던 일은 매뉴얼을 보고 Redhat Enterprise Linux 4에 Oracle 10g을 설치하는 일이였습니다. 정확히 기억이 나지는 않지만 설치 매뉴얼은 길고 복잡했고 알 수 없는 이유로 자꾸 설치를 실패하였습니다. 제대로 설치가 되지 않으면 다시 OS를 설치하는 것부터 반복하여 몇 번을 재설치한 끝에 성공하곤 했습니다. 회사에서 사용하는 리눅스와 오라클 버전은 딱 정해져 있었고 버전을 .. 2018. 5. 4.
힙(heap) 목차 개요기본 구조값 삽입최대값 삭제힙 정렬C++ STL priority_queue 개요 힙은 이진 트리를 활용한 자료구조이며, 종류로는 최소 힙과 최대 힙이 있습니다. 최대 힙을 알면 최소 힙을 만드는 건 어렵지 않습니다. 최대 힙 자료구조는 기본적으로 아래의 세 연산을 빠르게 수행하기 위한 자료구조입니다. 최대 힙에 새로운 값을 삽입.최대 힙 안의 최대값을 삭제.최대 힙 안의 값 중에 최대값 찾기. 세 연산을 배열로 간단하게 처리하려고 하면, 삽입은 오1로 가능하더라도 최대값을 찾기에서 오엔이 필요함을 알 수 있습니다. 배열에서 최대값을 찾기 위해서, 배열 안의 모든 값을 조사하는 선형 검색이 필요하기 때문입니다. 반면에 힙은 이 세 개의 연산을 모두 빠르게 수행하기 위해 사용하는 자료구조로 삽입과 .. 2018. 5. 4.
크루스칼 알고리즘(Kruskal's algorithm) 목차 개요최소 스패닝 트리크루스칼 알고리즘크루스칼 알고리즘의 구현문제 개요 크루스칼 알고리즘은 무향 연결 그래프가 주어질 때, 최소 스패닝 트리라고 부르는 서브 그래프를 찾는 알고리즘입니다. 크루스칼 알고리즘은 유니온 파인드 자료구조에 사용합니다. 최소 스패닝 트리(minimum spanning tree) 해당 그래프의 모든 정점을 포함하는 트리 형태의 서브 그래프를 뜨샇ㅂ니다. 왼쪽 그래프에서 스패닝 트리를 하나 찾아보면 오른쪽 트리가 나옵니다. 스패닝 트리는 여러개 있을 수 있습니다. 그런 스패닝 트리들 중에서 간선의 가중치의 합이 가장 작은 스패닝 트리를 최소 스패닝 트리라고 부릅니다. 최소 스패닝 트리 중 하나를 찾음으로서 간선의 가중치의 합의 최솟값을 찾는 알고리즘입니다. 크루스칼 알고리즘 크루.. 2018. 5. 4.
유니온 파인드(Union-find) 목차 개요초기화간단한 방법최적화 단계 1최적화 단계 2 - 유니온 파인드 트리유니온 파인트 트리 - 코드문제 개요 집합을 관리하는 자료구조로서, disjoint set이라고 부르기도 합니다. 이 자료구조를 활용하면 아래의 두 가지 연산을 수용할 수 있습니다. 요소 에이와 요소 비가 같은 집합에 속하는지 확인.요소 에이가 속한 집합과 요소 비가 속한 집합을 병합. 이런 식의 두 연산을 효율적으로 하기 위한 자료구조가 유니온 파인드, disjoint set 입니다. 초기화 초기 상태는 각각의 요소가 따로 따로 집합에 속하는 상태입니다. 이 상태를 만들어 주는 간단한 방법으로 아이번째 요소는 아이번째 집합에 속한다 라고 지정하는 방법이 있습니다. 간단한 방법 same_set()함수의 시간복잡도는 O(1) me.. 2018. 5. 3.
Traning/test dataset, Learning rate, normaliztion 07-1 : training/test dataset, learning rate, normalization. 알파값을 임의로 정하였습니다. 소스코드에서 코스트를 정의하고. 미니마이즈할때. 러닝레이트를 임의의 값을 넘겨 주었습니다. 러닝 레이트를 잘 정하는 것이 중요합니다. 굉장히 큰 값을 정한다고 보면, 경사면을 따라서 한발자국의 스텝이 있습니다. 그레디언트 디센트. 코스트 함수 웨이트가 여러개있을때 2차원상에서 표현을 하게 됩니다. 왜곡된 형태의 등고선이 나타날 것입니다. 알파값을 잡았을 때, 노말라이즈 할 필요가 있습니다. 보통 많이 쓰는 방법이 제로 센터 데이터입니다. 또 가장 많이 사용하는 것은 이 값 전체의 범위가 항상 범위안에 들어가도록 노말라이즈 하는 것입니다. 러닝 레이트. 코스트 함수 발산.. 2018. 5. 3.
CNN(Convolutional Neural NetworK) 개념 정리 Machine/Deep Learning 수업의 개요와 일정 요약 2016년 3월 컴퓨터 역사, 인류 역사에 기록될 사건입니다. 알파보가 이세돌 선수에게 4:1의 승을 거두었습니다. 머신 러닝의 대가 앤드류 응교수님. 지금 시대에 머신 러닝을 잘 이해하고 잘 활용해서 슈퍼파워를 가질 수 있다고 말씀하심. 머신러닝을 블랙박스로 사용하다 간단한 이해를 가지고 사용만 합니다. 와이는 더블유엑스 플러스 비 입니다. 목표는 다음과 같습니다. 기본 머신 러닝 알고리즘을 이해하는 것입니다. 선형 회귀와 로지스틱 회귀(분류). 뉴럴 네트워크, 컨볼루션 뉴럴 네트워크, 리커런트 뉴럴 네트워크, 파이선과 텐서플로를 사용하여 나의 문제를 풀고자 합니다. 보고 배우면서 사용하고 있습니다. 대력적인 스케쥴은 머신러닝은 무엇인지 .. 2018. 5. 3.
기계학습(Machine Learning) 시간이 지남에 따라 세상은 사람조차 어떻게 작동되는지 아직 정확히 모르는 영역을 구현하는 프로그램을 요구하기 시작했습니다. 대표적으로 음성인식을 들 수 있습니다. 애플의 시리 같은 프로그램을 만든다고 생각해봅니다. 일단 사람이 어떤 문장을 말했는지 소리 -> 알파벳으로 알아들을 수 있어야 하며, 알파벳으로 이루어진 그 문장이 어떠한 의미를 갖는지 해석 할 수 있어야 합니다. 전체적인 데이터를 보고 그것이 의미하는 정보들을 명확히 짚어낼 줄 알아야 합니다. 기계학습. 이름에서 알 수 있듯이 기계학습은 기계, 즉 컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성 할 수 있지 않을까하는 시도에서 비롯되었습니다. 주로 통계적인 접근 방법을 사용하는데, 위의 독감의 예와 반대로 독감이 걸린 사람은 대부분 열이 많이 .. 2018. 5. 3.
SIMD 병렬 프로그래밍 예제 1 멀티 데이터를 하나의 명령어로 처리하는 것. 시간을 재보니 4배가량의 속도 차이가 남.. #include #include #include const int n = 1000000000;__m128i a, b, r;__declspec(align(16)) short v1[8] = { 1,2,3,4,5,6,7,8 };__declspec(align(16)) short v2[8] = { 8,1,7,2,6,3,5,4 };__declspec(align(16)) short result[8]; int main() {clock_t startTime, endTime;double nProcessExcuteTime;startTime = clock(); /*현재 시각을 구한다.*/// SISDfor (int i = 0; i < n.. 2018. 4. 27.
QuickSort #include #include using namespace std; void Swap(int arr[], int idx1, int idx2) {int temp = arr[idx1];arr[idx1] = arr[idx2];arr[idx2] = temp;} int Partition(int arr[], int left, int right) { int pivot = arr[left];int low = left + 1;int high = right; while (low = arr[low] && low 2018. 4. 25.
선택 정렬 최소값을 찾아서 왼쪽으로 이동시키는데 배열크기만큼 반복하여 정렬하는 방법.선택정렬의 비교회수는 다음과 같습니다. 선택정렬의 연산시간은 다음과 같습니다.선택정렬의 장점은 데이터의 양이 적을 때 아주 좋은 성능을 나타냅니다.데이터의 양이 적을 떄 아주 좋은 성능. 작은 값을 선택하기 위해서 비교는 여러 번 하지만 교환횟수가 적습니다. 선택정렬의 단점. 가장 작은 값과 현재값을 교환하는 방식. 100개 이상의 자료에 대해서는 속도가 떨어져서 적절히 사용되기가 어렵습니다. #include #include void Select_Sort(int parm_data[], int parm_count){int min_data = 0, min_index = 0;int i, j;int comparison_count = 0; .. 2018. 4. 20.