반응형

분류 전체보기 509

개인 프로젝트 : 개발

1. 학습시키는 알고리즘 1) 데이터 묶기 - 경로 저장 : Dictionary를 만들어서 'drowsy', 'normal'를 key로 설정하고 drowsy 이미지 경로와 normal 이미지 경로를 value로 저장합니다. - 데이터 분할 : Drowsy와 normal 이미지 데이터를 train : validation = 0.8 : 0.2로 분할합니다. - 묶음 : [normal, normal, normal, drowsy, normal, normal, normal, drowsy, ...] 형식으로 리스트에 이미지들의 경로를 저장힙니다. 즉, (A, A), (A, B)가 짝을 이루어 차례대로 정렬됩니다. - 데이터 가져오기 : Image와 numpy를 통해 이미지 경로에서 이미지 데이터를 가져옵니다. - ..

Heap sort (힙 정렬)

힙 정렬 - 힙 알아보기 - 최대 힙/최소 힙을 구성하여 정렬 동작 - 정렬할 배열을 최대 힙으로 구성 - Root 노드를 힙의 마지막 노드와 교환 - 마지막 노드를 제외하고 다시 최대 힙 구성 - Root 노드를 힙의 두 번째 마지막 노드와 교체 - 위 과정 반복 - 예시 : 애니메이션 - 예시 : 전체 과정 * 초기 배열 * 최대 힙으로 구성 + 힙 삽입 방법과 거의 동일 * 교환과 힙 구성 반복 + 교환과 힙 구성은 힙 삭제 방법과 거의 동일 구현 - 오름차순 정렬을 위해서 최대 힙 이용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43..

Quick sort (퀵 정렬)

퀵 정렬 - 분할 정복 알고리즘 - 배열의 요소들을 Pivot이라는 요소와 비교하여 비균등하게 2개의 배열로 분할해서 정렬 동작 - 정렬할 배열에서 첫 요소를 Pivot으로 선택 - i는 i가 가리키는 요소가 Pivot보다 크거나 같을 때까지 그리고 배열의 오른쪽 끝일 때까지 이동 - j는 j가 가리키는 요소가 Pivot보다 작거나 같을 때까지 그리고 배열의 왼쪽 끝+1일 때까지 이동 - i와 j가 멈추면, 두 요소를 교환 - i와 j가 엇갈릴 때까지 반복 - i와 j가 엇갈리면, Pivot과 j를 요소를 교환하고 Pivot을 제외한 2개의 배열에서 위 과정 반복 * Pivot이 j의 위치로 이동하고 2개의 배열이 생성 * Pivot을 기준으로 왼쪽은 Pivot보다 작은 값들이 모임 * Pivot을 기준..

개인 프로젝트 : 전처리

1. 유의미하지 않은 features 제거 1) 문제 - 같은 행동을 취하고 있는 두 이미지의 Euclidean distance가 2.3, 그리고 다른 행동을 취하고 있는 두 이미지의 Euclean distance가 2.4로 전혀 구별하지 못했습니다. 2) 해결 - Coursera 강의에서 배운 meaningful features가 생각이 났습니다. 그래서 구글에 meaningful feature extraction라는 키워드로 검색을 진행했습니다. - 검색 결과, 저의 이미지에는 쓸모 없는 부분이 너무 많다는 사실을 알 수 있었습니다. 아래의 예시를 보면, 아버지가 행동하고 있는 범위는 사진의 절반 만으로도 충분히 볼 수 있습니다. 가운데를 기준으로 오른쪽은 실제로 쓸모 없는 부분입니다. - 따라서 유..

[나 혼자 지구 한 바퀴] 28.02.2018 폴란드로 가자!

호스텔에 한국 분이 오셨습니다. 저는 장난끼가 있어서 한국인 아닌 척 했습니다. 장발 때문에 실제로 한국 사람 아니게 보는 경우가 많았습니다. 영어로 말을 하다가 한국인이라고 말했습니다. 놀라셨습니다. ㅎㅎㅎ 함께 시내를 돌아다니기로 했습니다. 어제 갔던 구시가지를 함께 갔습니다. 무척 추운 날씨였지만, 누군가와 함께 걸으며 구경하니 즐거웠습니다. 좋은 음질과 좋지 못한 음질을 구분 못해서 아무 이어폰으로 듣는 사람을 막귀라고 합니다. 저는 막입인 것 같습니다. 그냥 입에 들어오면 다 잘먹습니다. 그래서 식탐도 없고 맛집을 찾아 먹지 않습니다. 이는 여행에서도 마찬가지였습니다. 굳이 맛있는 음식, 색다른 음식을 찾아 먹지 않았습니다. 그런데 이 분은 맛집을 가고 싶어하셨습니다. 저도 함께 동행했습니다. ..

[나 혼자 지구 한 바퀴] 27.02.2018 폴란드로 가자!

폴란드로 넘어가는 국경지대입니다. 여기서 부터는 정돈된 모습입니다. 폴라드의 수도 Warsaw(바르샤바)에 도착했습니다. 무거운 짐을 내려 놓고 시내를 돌아다니기로 했습니다. 가는 중에 한강 같은 강이 있길래 따라가 보았습니다. 그런데 우리나라에서 보지 못한 신기한 것들이 둥둥 떠다녔습니다. 가까이에서 보니 얼음 덩어리들이었습니다. 강에 얼었던 얼음이 부셔진 건지, 육상에서 부셔진 얼음들이 떠내려 온지 모르겠지만 보는 내내 새로웠습니다. 엄청나게 추웠던 그때의 모습이 담긴 영상입니다. 이후 계속해서 도시를 거닐었던 것으로 기억합니다. 거의 3년이 지난 시점에서 기억을 되살려 보려고 하니 작은 이야기들은 기억이 나지 않습니다. 아쉽습니다. 시내를 걷다가 어느 성당으로 발걸음을 돌렸습니다. 가는 길에 다시 ..

Merge sort (병합 정렬)

병합 정렬 - 분할 정복 알고리즘으로 정렬하려는 배열을 균등하게 분할하여 정렬 동작 - 정렬할 배열을 균등하게 분할하고 - 분할된 부분 배열을 정렬하고 - 두 개의 정렬된 부분 배열을 병합하여 전체를 정렬 - 예시 : 애니메이션 - 예시 : 전체 과정 예시 - 예시 : 추가 배열이 필요한 이유 (마지막 정복 결합을 예시로) 구현 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 // 정렬과 병합하는 함수 void merge(int list[], int ..

Bubble sort (버블 정렬)

버블 정렬 - 두 인접한 요소를 검사하여 정렬 동작 - 오름차순으로 정렬 - 1회 * 1번째 요소와 2번째 요소를 비교하고 순서가 맞지 않으면 교환 * 2번째 요소와 3번째 요소를 비교하고 순서가 맞지 않으면 교환 * n-1번째 요소와 n번째 요소를 비교하고 순서가 맞지 않으면 교환 * n번째에 가장 큰 요소가 위치 - 2회 * 1번째 요소와 2번째 요소를 비교하고 순서가 맞지 않으면 교환 * 2번째 요소와 3번째 요소를 비교하고 순서가 맞지 않으면 교환 * n-2번째 요소와 n-1번째 요소를 비교하고 순서가 맞지 않으면 교환 * n-1번째에 두 번째로 큰 요소가 위치 - 이하 과정 동일 - 예시 구현 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 void bubb..

Shell sort (쉘 정렬)

쉘 정렬 - 삽입 정렬의 문제점 * 삽입할 위치가 현재 삽입할 요소와 멀리 떨어져 있다면, 많은 요소들을 옮겨야 함 - 삽입 정렬의 문제점을 보완하는 정렬 - 쉘 정렬은 특정 간격(k)에 있는 요소들을 부분 배열으로 하고 삽입 정렬을 진행하여 정렬 - 쉘 정렬의 원리 * 배열의 요소들이 정렬되어 있으면 삽입 정렬의 시간복잡도 O(N) * 배열의 요소들을 어느 정도 정렬 시켜 놓으면 삽입 정렬은 빠름 * 어느 정도 정렬 시키기 위해서 배열을 간격 별로 모아서 부분 배열을 만들어 정렬 동작 - 초기 간격(k)를 구함 : 정렬할 배열의 길이 / 2 - 간격(k) 만큼 떨어진 요소들을 부분 집합으로 하고 삽입 정렬 - 위 과정으로 한 번의 정렬이 끝나면, k = k / 2 하여 위 과정 반복 - 간격(k)의 크..

Insertion sort (삽입 정렬)

선택 정렬 - 두 번째 위치부터 시작하여, 왼쪽에 정렬된 배열과 비교하여 요소의 위치를 찾아 삽입하는 정렬 동작 - 주어진 리스트 두 번째 위치부터 차례대로 요소를 선택 - 선택한 요소를 왼쪽에 정렬된 배열과 비교하여 자신의 위치를 찾고 삽입 - 위 과정 반복 - 예시 * 1번 : 요소 2를 선택하고 왼쪽에 정렬된 배열에서 들어갈 위치를 찾아 삽입 * 2번 : 요소 4를 선택하고 왼쪽에 정렬된 배열에서 들어갈 위치를 찾아 삽압 * 이하 과정 동일 구현 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void insertionSort (int *list, int n){ // 요소가 들어갈 위치, 요소 값 int j, value; for(int i=1; i=0 &&..

반응형