[Algorithm/Divide&Conquer] 03. Merge Sort(병합 정렬)
·
Computer Science/Algorithm
분할 정복을 이용한 정렬 알고리즘유명한 알고리즘 문제 중의 하나인 정렬(sorting)을 분할 정복으로 구현하는 방법에 대해 알아보자 정렬 알고리즘 구현에 있어 필요한 요구사항모든 데이터 타입에 대해 동작해야 한다. 심지어 C++ 구조체, 클래스에 대해서도 서로 다른 멤버를 기준으로 정렬할 수 있어야 한다많은 양의 데이터를 처리할 수 있어야 한다.점근적 시간 복잡도 측면이나 실제 동작 시에 빠르게 동작한다현실적으로 두 번째와 세 번째 요구사항을 동시에 만족하기는 어렵다. 두 번째 요구사항은 외부 정렬(external sorting), 즉 컴퓨터의 메모리에 데이터가 상주하지 않은 상태에서 수행되는 정렬을 필요로 한다.외부 정렬 알고리즘은 실행 중 임의 시점에서 전체 데이터의 일부만을 메모리에 올려놓고 동작..
[Algorithm/Divide&Conquer] 02. 이진 검색(binary search)
·
Computer Science/Algorithm
이진 검색(binary search) (a.k.a 이진 탐색) 일반적인 검색 문제정렬되어 있는 정수 시퀀스가 있고, 여기에 숫자 N이 있는지 확인하려고 한다.이러한 검색 문제는 두 가지 방법으로 접근할 수 있다.  선형 검색(linear search)시퀀스 전체 원소를 방문하면서 해당 원소가 N과 같은지를 확인하는 방식이다.bool linear_search(int n, vector& sequence) { for (auto i : sequence) { if (i == n) { return true; } } return false;} 장점 : 입력 시퀀스의 정렬 여부와 상관 없이 항상 잘 동작한다단점 : 효율적이지 않음.O(N)주어진 배열이 정렬되..
[Algorithm/Divide&Conquer] 01. 분할 정복(Divide & Conquer) 알고리즘
·
Computer Science/Algorithm
분할 정복 설계 패러다임효율적인 알고리즘을 설계하기 위한 일반적인 접근 방법이 개발되어 다양한 문제 해결에 사용되고 있다.분할 정복(divide-and-conquer)은 가장 널리 사용되는 알고리즘 설계 패러다임 중 하나이다.분할 정복 알고리즘이란?주어진 문제를 작은 부분 문제로 나누고, 나줘진 각 부분 문제의 솔루션을 구하고, 각 부분 문제 솔루션을 합쳐서 전체 문제에 대한 솔루션을 구하는 방식binary search(이진 탐색), quick sort(퀵 정렬), merge sort(병합 정렬), matrix mulitplication(행렬 곱셈), Fast Fourier Trnasform(고속 푸리에 변환), skyline algorithm(스카이라인 알고리즘) 등에서 사용되는 패러다임이다.분할 정복..
[Algorithm] Introduction
·
Computer Science/Algorithm
Introduction of Algorithm자료 구조 : 다양한 방식의 데이터 저장 방식을 의미하고, 그 안에 저장된 데이터에 접근하는 데 필요한 비용을 결정알고리즘: 주어진 문제가 있을 때, 데이터에 대한 정확한 정의와 데이터 변환 순서에 대한 일련의 명령알고리즘의 좋고 나쁨은 알고리즘 동작의 효율성에 의해 결정된다. 또는 알고리즘 수행에 필요한 명령의 개수도 판단의 근거가 될 수 있다.알고리즘 문제 분류(계산 복잡도 기준)P 문제: 다항 시간 알고리즘을 이용하여 솔루션을 구할 수 있는 문제NP 문제: 특정 솔루션을 다항 시간으로 검증할 수는 있지만 알려진 다항 시간 솔루션은 없는 경우EXPTIME 문제(지수 시간 문제): 입력 크기에 대한 지수 함수 형태의 시간 복잡도 솔루션을 갖는다PSPACE(다..
[자료구조] 블룸 필터(bloom filter)
·
Computer Science/Data Structure
블룸 필터(bloom filter)블룸 필터는 해시 테이블에 비해 공간 효율이 매우 높은 방법이지만, 결정적(deterministic) 솔루션 대신 부정확한 결과를 얻을 수 있다.거짓-부정(false-negative)dl 이 없다는 것은 보장하지만, 거짓-긍정(false-positive)는 나올 수 있다.즉, 특정 원소가 존재한다는 긍정적인 답변을 받을 경우, 이 원소는 실제로 있을 수도 있고 없을 수도 있다.그러나 특정 원소가 존재하지 않는다는 부정적인 답변을 받았다면 이 원소는 확실히 없다뻐꾸기 해싱과 마찬가지로 블룸 필터도 여러 개의 해시 함수를 사용한다정확도를 위해 세 개 이상을 사용해야 한다블룸 필터는 실제 값을 저장하지는 않으며, 대신 특정 값이 있는지 없는지를 나타내는 부울 타입 배열을 사용..
[자료구조] 해시 테이블(2)- 충돌
·
Computer Science/Data Structure
해시 테이블에서 충돌다수의 키를 저장할 수 없는 문제를 해결해보자체이닝앞에서는 하나의 해시 값에 대해 하나의 원소만을 저장했다.따라서 특정 해시 값 위치에 이미 원소가 존재한다면 새로운 값과 예전 값 중 하나를 버릴 수밖에 없었다.체이닝(chaining)은 두 값을 모두 저장할 수 있는 여러 방법 중 하나이다이 방법은 해시 테이블의 특정 위치에서 하나의 키를 저장하는 것이 아니라, 하나의 연결 리스트를 저장한다새로 삽입된 키에 의해 충돌이 발생하면, 리스트의 맨 뒤에 새로운 키를 추가한다따라서 다수의 원소를 원하는 만큼 저장할 수 있다벡터 대신 연결 리스트를 사용하는 이유는, 특정 위치의 원소를 빠르게 삭제하기 위함이다Example) 체이닝을 사용하는 해시 테이블#include #include #incl..
[자료구조] 해시 테이블(1)
·
Computer Science/Data Structure
해시 테이블lookup(룩업, 조회)는 특정 원소가 컨테이너에 있는지 확인하거나 또는 컨테이너에서 특정 키(key)에 해당하는 값(value)를 찾는 작업을 의미한다DB에서 원하는 자료를 찾거나, 사전에서 단어의 뜻을 찾는 문제들이 이에 해당모든 원소를 선형으로 검토하여 원하는 값을 찾는 작업은 일반적으로 매우 많은 시간이 소요된다O(N) 시간 복잡도를 가짐이 작업을 훨씬 빠르게 수행할 수 있는 효과적인 알고리즘이 필요하다.해시 테이블과 블룸 필터라는 효과적인 구조에 대해 살펴본다.해시 테이블O(N)을 갖는 선형 검색보다 더 나은 검색 방법은 BST와 같은 속성을 갖도록 높이 균형 트리에 데이터를 저장하는 것이다.시간 복잡도가 O(log N)이므로 선형 검색보다 훨씬 빨라진다검색 횟수가 증가하면 이 정도..
[운영체제] 14. File System Implementation
·
Computer Science/OS
File System Implementation파일 시스템 구현 (File System Implementation)사용자 관점에서의 파일 시스템 (File system of the user’s viewpoint)파일 시스템을 사용자에게 어떻게 보여줄 것인가?파일 시스템 인터페이스파일, 디렉토리, 속성 및 작업예: 트리 구조저장 관리 관점에서의 파일 시스템 (File system of the storage management viewpoint)논리적 파일 시스템을 저장 장치에 어떻게 매핑할 것인가?파일 시스템 구현레이아웃, 데이터 구조 및 알고리즘저장 내부를 이해하는 것이 필요함파일 시스템은 저장 장치를 블록의 시퀀스로 간주디스크와 메모리 간의 데이터 전송은 블록 단위로 이루어짐.각 블록에는 일반적으로 5..
[운영체제] 13. File System Interface
·
Computer Science/OS
File System파일 시스템File system저장 장치에 데이터를 조직화하는 소프트웨어.User's viewpoint (사용자의 관점)Storage management's viewpoint (저장 관리의 관점)사용자의 관점에서의 파일 시스템File system interface (파일 시스템 인터페이스)How to show the file system to user? (사용자에게 파일 시스템을 표시하는 방법)파일, 디렉터리, 속성, 그리고 작업트리 구조저장 관리 관점에서의 파일 시스템File system implementation (파일 시스템 구현)How to map the logical file system to the storage device? (논리적 파일 시스템을 저장 장치에 매핑하는 방..
[운영체제] 12. I/O Systems
·
Computer Science/OS
Modern I/O Systems다양한 종류의 I/O 장치가 있습니다CPU는 디바이스 컨트롤러(device controller)와 상호작용합니다.디바이스 컨트롤러는 읽고 쓸 수 있는 레지스터 세트를 포함합니다.Programmed I/OPort I/O특수 프로세서 명령어를 사용하여 데이터를 전송합니다.예: 인텔 아키텍처의 in/out 명령어각 장치는 다른 I/O 포트를 사용합니다. (포트 번호)Memory-mapped I/O디바이스 컨트롤러의 레지스터는 물리 주소 공간에 매핑됩니다.주소는 하드웨어 점퍼(hardware jumper) 또는 부팅 시 프로그래밍으로 설정됩니다.I/O는 로드 및 저장 명령어(load and store instructions)를 통해 수행됩니다.I/O 주소 공간이 시스템 메모리 주..