목차 객체지향의 개념 객체지향 프로그래밍은 객체가 상호작용하는 방식으로 프로그램을 만드는 방법이다. 이런 객체지향 프로그래밍은 캡슐화, 다형성, 상속이라는 특성이 있다. 이 특성들을 가지고 있지 않으면 객체지향 언어라고 불릴 수 없을 만큼 중요한 특성이다. 내가 공부해온 책에서는, 또 하나의 특성, '합성'을 더해 객체지향을 말한다. 그런 객체지향의 특성을 나열해보자면 캡슐화 다형성 상속 합성 이 되겠다. 객체지향 프로그래밍을 하기 전에, 일단 객체가 무엇인지 알아야 객체지향적이 무엇인지 알고 프로그래밍을 할 수 있지 않겠는가? 먼저 객체가 무엇인지 알아보도록 하자 객체란? 일단 책에서 말하는 객체의 정의를 보고 알아가자. '객체는 우리가 인식하는 모든 대상, 물체 등 객관적으로 인식할 수 있는 대상이다..
목차 세그먼트 트리 어떤 수들의 집합이 있다. 그 집합은 원소가 마구마구 변할 수 있다고 한다. 이 때, 그 집합의 부분합을 아주 빠르게 구하기 위해서 만들어진 구조이다. 예를 들어서.. 1, 5, 6, 7, 4, 8, 2, 3 이렇게 수가 있다고 하자. 우리가 이 수들에서 특정 범위의 합을 구하려면 어떻게 해야할까? 역시 제일 간단한 방법은 다 더하는 것이다. 3~6번째 원소를 더하면. 6+7+4+8 = 25 이렇게 다 더하는 경우 시간복잡도는 O(N)으로 작은 범위 내에서 보면 나쁠 수 있다. 하지만, 이 합을 원하는 곳이 많아서 수천, 수만명이 요구를 한다면?? 또, 이 데이터에 접근 가능한 사람이 많아서 계속해서 값이 바뀐다면?? 참으로 난감할 것이다. 데이터는 바꿔줄 수 있지만. 합을 계속 해서..
목차 백준 7662번 이중 우선순위 큐. 우선순위는 큐에 들어가는 정수값 자체를 우선순위로 하는 이중 우선순위 큐이다. 최대힙과, 최소힙을 이용해서 구현을 해 보았다. 최대값을 제거할때는 최대힙에서 삭제연산을 하고, 삭제한 요소를 저장해둔다. 그리고 최소값을 제거할때 만약 제거하는 요소가 저장해둔 배열에 있다면, 한번더 삭제한다. void pop(heap *h, heap *h2, int num){ int temp; //최대값 삭제 if(num == 1){ temp = popM(h); for(int i = h->numsize-1; i > -1 ; i--){ if(temp == h->nums[i]){ temp = popM(h); h->nums[i] = h->nums[h->numsize--]; } } } //..
목차 Neural Network Basics Binary Classification -> 이진 분류 뭐가 맞다 아니다 => 1, 0으로 나타낼 수 있는것을 구별하는것 이런 이진분류를 한번 해보도록 하자. 일단 첫번째로 입력과 출력이 필요하다. 이런 하나의 입력과 출력을 training set이라 하고 $$ (x, y) \to x \in \mathbb{R}^{nx}, y \in {1, 0}$$ 라고 말할 수 있다. 이진분류를 이미지로 나타내면 training set은 어떻게 구성될까? 먼저 이미지가 어떻게 표현되는지 알아야 한다. 이미지는 $$ n \times m$$행렬로 이루어져 있고 빨강, 초록, 파란색의 3원색이 각각 어떤 값을 갖고 있는지를 저장한다. 이를 훈련예제로 옮기면 각각의 행렬을 하나의 열..