본문 바로가기

전체 글547

버블 정렬(Bubble Sort) 버블 정렬은 인접한 두 개의 데이터를 비교해가면서 정렬을 진행하는 방식입니다. 두 데이터를 비교하여, 정렬순서상 위치가 바뀌어야 하는 경우에 두 데이터의 위치를 바꿔나갑니다. 정렬의 우선순위가 가장 낮은 제일 큰 값을 맨 뒤로 보내기. 앞에서부터 순서대로 비교하고 교환하는 일련의 과정이 거품이 일어나는 모습에 비유되어 버블 정렬이라 이름 지어진 것입니다. for문에 대한 반복 조건의 정확한 이해가 필요합니다. 123456789101112131415161718192021222324252627#include void BubbleSort(int arr[], int n) { int i, j; int temp; for (i = 0; i 2018. 5. 9.
재귀 함수(Recursive) 예제 이분탐색, 하노이타워 재귀함수. 흐름을 잘 파악해야 합니다. 항상 return 하는 조건을 명확히 넣어주어야 합니다. 다음 아래는 이진 탐색을 재귀함수로 구현 한 것입니다. 12345678910111213141516171819202122232425262728293031323334#include int BSearchRecur(int ar[], int first, int last, int target) { int mid; if (first > last) return -1; mid = (first + last) / 2; if (ar[mid] == target) return mid; else if (target 2018. 5. 9.
2의 보수 2의 보수 2의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급됩니다. 2의 보수를 구하기 위해서는 2가지 방법이 있으며, 첫째로는 주어진 이진수보다 한 자리 높고 가장 높은 자리가 1이며 나머지가 0인 수에서 주어진 수를 빼서 얻은 수가 2의 보수입니다. 두번째로 주어진 이진수의 모든 자리의 숫자를 반전시킨 뒤 여기에 1을 더하면 2의 보수를 얻을 수 있습니다. 예를 들어 8자리의 이진수 01001011의 2의 보수를 구하면 아래와 같습니다. (십진수 75)8+1=9자리의 비트 100000000 에서 8자리 비트 01001011 을 뺍니다. 그럼 10110101 이 나옵니다. 두번째 방법으로는 1의 보수를 이용하여 2의 보수를 구하면 됩니다.01001011 의 모든 자리의 수를 반전시킵니다. 그.. 2018. 5. 8.
SSD(Solid State Drive) / Flash Memory Solid State Drive 고형 상태 보조기억장치. HDD를 대체하기 위해 개발된 신세대 보조저장장치입니다. 하드디스크는 자기 디스크로 이루어졌으나 SSD는 플래시 메모리로 이루어집니다. 구동부가 없어 소음이 없으며, 일반용은 소모 전력 및 발열도 적습니다. 가장 큰 장점으로는 데이터 입/출력 속도입니다. 파일 전송 속도가 HDD에 비해 매우 빠릅니다. 그 다음 장점은 아주 작고 가볍다는 점입니다. 하드디스크는 플래터와 그 플래터를 감싸는 몸체, 플래터를 구동하기 위한 모터 등의 구조물로 인해 일정한 두께 이하로 줄이기 어려움. 이 떄문에 컴퓨터 체감 속도를 비약적으로 상승시켰다는 평가를 받습니다. 하드디스크의 물리적 탐색시간 앞에서 병목현상이 걸려 버벅이는 경우가 허다했습니다. 그래도 아직은 하드.. 2018. 5. 7.
캐시 메모리(Cache memory) 개요 컴퓨터 시스템의 성능으 향상시키기 위해 주로 CPU 칩 안에 포함되는 빠르고 작고 매우 비싼 메모리입니다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어합니다. 대부분의 프로그램은 한번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있습니다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, 시피유가 필요한 데이터를 캐시에서 먼저 찾도록 하면 시스템 성능을 향상 시킬 수 있습니다. CPU의 클럭속도가 매우 빨라짐에 따라 디랩과의 속도 차이가 현저하게 증가하였는데, 이 때문에 CPU클럭 속도를 아무리 올려도 DRAM에서 데이터를 빠르게 제공해 주지 못하여 전체.. 2018. 5. 7.
해쉬 테이블(Hash Table) Hash Table 저장되는 데이터는 키와 값이 하나의 쌍을 이룬다. 키가 존재하지 않는 값은 저장할 수 없다. 그리고 모든 키는 중복되지 않는다. 가장 쉬운 예로 다세대 주택이나 아파트의 우편함입니다. 우편함의 경우 호수가 키가 되고 우편함에 들어있는 우편물이 값이 됩니다. 자료구조의 테이블은 사전구조라고도 불린다. 더불어 맵이라 불리기도 합니다. 123456789101112131415161718192021222324252627#pragma warning(disable:4996) #include typedef struct _empInfo{ int empNum; // 직원의 고유번호 int age; // 직원의 나이}EmpInfo; int main(void){ EmpInfo empInfoArr[1000].. 2018. 5. 7.
Machine Learning Vs. Deep Learning Machine Learning 이란 무엇일까요? Tom Mitchell의 정의가 가장 많이 인용되고 있습니다. 어떠한 작업에 대해 꾸준한 경험을 통해 작업에 대한 성능을 높이는 것입니다. 이해를 돕기 위한 예제로 키를 기반으로 몸무게를 예측한다고 해봅시다. 가장 첫번째로 해야 할 일은 데이터를 수집하는 것입니다. 데이터가 이런 형태를 보인다고 가정해봅시다. 그래프의 각 점은 하나의 데이터를 뜻합니다. 키를 기반으로 하여 몸무게를 예측하기 위해 선 하나를 그어볼 수 있습니다. 몸무게 = 키 - 100 입니다. 이 공식만으로도 만족스럽긴 하지만 우리는 서응을 이해하고 향상시키기 위해 노력해야 할 거 싱비니다. 실제값과 예측값의 차이를 줄여야 할 것 입니다. 데이터가 많을수록 더 나은 성능의 모형이 만들어질 .. 2018. 5. 7.
Recursion (재귀함수) 재귀는 수학이나 컴퓨터 과학 등에서 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻합니다. 주로 이 방법은 함수에 적용한 재귀 함수의 형태로 많이 사용됩니다. 재귀함수는 반드시 탈출 조건이 있어야 합니다. 그렇지 않으면 무한히 호출되어 프로그램이 멈추게 됩니다.(무한루프) 아래는 간단하게 Factorial 을 구현한 코드입니다. 1234567891011121314151617#include int factorial(int n) { printf("%d ", n); if (n 2018. 5. 7.
LinkedList (연결 리스트) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include "DLinkedList.h" int WhoIsPrecede(int d1, int d2) { if (d1 2018. 5. 7.
배열기반 리스트(ArrayList) #include #include "ArrayList.h" int main(void) { List list; // 구조체 변수 선언. int data; ListInit(&list); // 선언한 변수 초기화. LInsert(&list, 11); LInsert(&list, 11); LInsert(&list, 22); LInsert(&list, 22); LInsert(&list, 33); printf("current data num : %d \n", LCount(&list)); if (LFirst(&list, &data)) { printf("%d ", data); while (Lnext(&list, &data)) printf("%d ", data); } printf("\n\n"); if (LFirst(&lis.. 2018. 5. 7.