목록Categories (1096)
KoreanFoodie's Study
해당 포스팅은 한빛 미디어에서 출판한 '밑바닥부터 시작하는 딥러닝'이라는 교재의 내용을 따라가며 딥러닝 튜토리얼을 진행하고 있습니다. 관련 자료는 여기에서 찾거나 다운로드 받으실 수 있습니다. 개발 환경 갖추기 먼저, 파이썬을 설치해주자. 파이썬을 이용해 실습을 하는 과정에서, 여러 라이브러리가 필요하게 되는데, 아나콘다를 설치하면 실습에 필요한 대부분의 라이브러리가 같이 설치되어 매우 간편하다. 아래 링크에 들어가서 https://www.anaconda.com/distribution/#download-section Python 3.7 version 이라고 적힌 곳에, 사양에 맞게 64비트 혹은 32비트를 내려받아 설치를 진행하면 된다. 이미 파이썬이 설치되어 있다면, 설치된 파이썬에 맞게 64비트, 3..
학교에서 수업을 듣고, 버스를 탄 후 관악산을 내려가던 중, 현수막에 쓰인 글귀 하나가 눈에 들어왔다. 거기에는 이렇게 적혀있었다. “우리는 타자의 권리를 부정할 권리가 있는가?” 에서 “우리는 타자의 권리를 부정할 권리가 있는가?”라는 주제로 토론을 진행한다는 홍보용 현수막이었다. 나는 집으로 돌아오는 길에, 그리고 잠시 영화관에 들러 놓고 온 모자를 분실물 센터에서 찾아보는 시간 동안에, 또는 횡단보도를 건너며, 이 주제에 대해 잠깐 생각해 보았다. 내가 내린 결론은 이것이다. 현실 세계에서 타인의 권리는 이미 (일부분)부정되고 있으며, 또한 부정되어야만 한다고 생각한다. 언뜻 보면 저 문장을 보고 사람들이 극단적이며 반인륜적인 발언이라고 하며 원색적인 비난을 펼지도 모르겠다. 하지만 타인의 권리가 ..
Heap sort python code implementation Heap sort 파이썬 코드를 작성해 보자. 힙 정렬(Heap Sort) 힙은 2진 트리인데, Min-heap(최소값이 루트 노드에 있음. 부모 노드가 자식 노드보다 작아야 함.)과 Max-heap(최대값이 루트 노드에 있음. 부모 노드가 자식 노드보다 커야 함.) 위키 피디아의 설명을 참고해 보자. n개의 노드에 대한 완전 이진 트리를 구성한다. 이때 루트 노드부터 부모노드, 왼쪽 자식노드, 오른쪽 자식노드 순으로 구성한다. 최대 힙을 구성한다. 최대 힙이란 부모노드가 자식노드보다 큰 트리를 말하는데, 단말 노드를 자식노드로 가진 부모노드부터 구성하며 아래부터 루트까지 올라오며 순차적으로 만들어 갈 수 있다. 가장 큰 수(루트에 위치)..
Quick sort python code implementation 퀵소트(Quicksort)를 파이썬 코드로 구현해 보자. 퀵 소트(Quick sort) 퀵 소트는 배열을 파티션을 이용해서 반으로 나누고, 다시 이전 배열을 반으로 나눈 방식을 재귀적으로 적용한다. 파티션은 일반적으로, 제일 끝 배열의 원소를 pivot으로 잡고, 해당 pivot값보다 작은 값은 왼쪽으로 몰아 넣고, 큰 값은 오른쪽으로 몰아넣는다. 이 과정을 재귀적으로 반복하면, 각 파티션마다 O(n) 타임이 걸리고, 총 파티션은 평균적으로 O(logn) 타임이 걸리므로, 총 시간은 O(nlogn)이 걸리는 것을 알 수 있다. 위키피디아의 설명을 참고해 보자. 파티션은 다음과 같이 작동한다. 수도 코드를 살펴보자. function par..
Merge sort python code implementation merge sort 파이썬 코드를 작성해 보자. 병합 정렬(Merge Sort) 위키피디아의 설명을 참고해 보자. 병합 정렬은 다음과 같이 작동한다. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 병합 정렬의 핵심은, 문제를 푸는 방법론을 사이즈를 반으로 쪼갠 녀석에 적용해서 정렬을 완료한 후, 정렬이 완료된 반쪽짜리 2개를 다시 합침으로써 정렬을 마친다는 것이다. 즉, merge_sort함수는 2개의 merge..
Bubble sort python code implementation. 버블 정렬을 파이썬 코드로 구현해 보자. 버블 정렬 (Bubble Sort) 위키피디아의 정의를 참고해 보자. : 거품 정렬(Bubble sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O(n^2)으로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다. 예시를 통해 버블 정렬이 어떻게 동작하는지 알아보자. 버블 정렬은 매우 단순한데, 그냥 처음부터 2개씩 짝을 지어 값을 비교한 후, 작은 녀석은 앞으로, 큰 녀석은 뒤로 보내면 된다. (55, 07)은 (07, 55)로, (55, 78)은 그대로, (78, 12)는 (12..
Insertion sort python code implemetation 삽입 정렬을 파이썬 코드로 구현해 보자. 삽입 정렬 (Insertion sort) 위키피디아에 나온 정의를 참고해 보자. 선택 정렬(選擇整列, selection sort)은 제자리 정렬 알고리즘의 하나로, 다음과 같은 순서로 이루어진다. 주어진 리스트 중에 최소값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다(패스(pass)). 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. 비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 리스트를 이와 같은 방법으로 정렬하는 데에는 Θ(n^2) 만큼의 시간이 걸린다. 선택 정렬은 알고리즘이 단순하며 사용할 수 있는 메모리가 제한적인 경우에 사용시 성능 상의 이점이..
selection sort python code 선택정렬을 파이썬 코드로 구현해 보자. 선택정렬(Selection sort 기본 설명) 위키피디아에 있는 정의를 참고해 보자. 선택 정렬(選擇整列, selection sort)은 제자리 정렬 알고리즘의 하나로, 다음과 같은 순서로 이루어진다. 주어진 리스트 중에 최소값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다(패스(pass)). 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. 비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 리스트를 이와 같은 방법으로 정렬하는 데에는 Θ(n^2) 만큼의 시간이 걸린다. 선택 정렬은 알고리즘이 단순하며 사용할 수 있는 메모리가 제한적인 경우에 사용시 성능 상의 이점이 있다. 그림으로 표..
These are OCaml Library module "List" implementation. Useful when we handle list data type in OCaml. let rec length l = match l with | [] -> 0 | _::t -> 1 + length t (* tail-recursive version of length *) let length' l = let rec f l result = match l with | [] -> result | _::t -> f t (result+1) in f l 0 let hd l = match l with | [] -> raise (Failure "hd") | h::_ -> h let tl l = match l with | [] ..
예제들을 OCaml로 구현해 보자. OCaml quicksort code (* pick the first element as a pivot *) (* ascending order *) let rec qsort comp l = match l with | [] -> [] | p::t -> let (l1,l2) = List.partition (fun x -> comp x p print_int x;print_string " ") l; print_newline(); print_endline "result of qsort : "; List.iter (fun x -> print_int x;print_string " ") (qsort compare l); print_newline() OCaml Stack code 모듈..