분류 전체보기 243

[Project Review] 2020_1 도서 대여 시스템

지금으로부터 4년 전인 2020년에 진행했던 프로젝트 1학년 새내기때 C언어도 제대로 다루지 못했지만, 동아리 선배가 이끌어줘서 나름 성공적(?)으로 마무리했던 C언어 프로젝트 이다.지금 돌아보면 이 프로젝트가 지금까지 대학교 생활하는데 큰 도움이 되지 않았나 싶다. 첫 단추를 잘 끼운 느낌이다. 동아리 C언어 스터디에서, 2명이 팀을 이뤄서 C언어를 이용해서 자유 주제로 프로그램 하나를 만드는 것이 목표였다. 주제 선정은 그 당시 구글링을 하다가 너무 어렵지도, 복잡하지도 않은 무난한 주제로 선택했던 걸로 기억 구현했던 기능은도서 검색도서 대출도서 반납도서 삭제도서 추가정도 였다. 이때는 GUI를 이용할 생각도 못했다. 그냥 구조체, 포인터만 조금 다룰 줄 아는 수준이었기 때문에..      https..

Project Review 2024.06.24

[자료구조] 블룸 필터(bloom filter)

블룸 필터(bloom filter)블룸 필터는 해시 테이블에 비해 공간 효율이 매우 높은 방법이지만, 결정적(deterministic) 솔루션 대신 부정확한 결과를 얻을 수 있다.거짓-부정(false-negative)dl 이 없다는 것은 보장하지만, 거짓-긍정(false-positive)는 나올 수 있다.즉, 특정 원소가 존재한다는 긍정적인 답변을 받을 경우, 이 원소는 실제로 있을 수도 있고 없을 수도 있다.그러나 특정 원소가 존재하지 않는다는 부정적인 답변을 받았다면 이 원소는 확실히 없다뻐꾸기 해싱과 마찬가지로 블룸 필터도 여러 개의 해시 함수를 사용한다정확도를 위해 세 개 이상을 사용해야 한다블룸 필터는 실제 값을 저장하지는 않으며, 대신 특정 값이 있는지 없는지를 나타내는 부울 타입 배열을 사용..

[C++ STL] 3.4 C++ 해시 테이블

C++ 해시 테이블해시 구현에서 항상 양의 정수만 취급할 수는 없다.오히려 문자열 데이터를 다루게 되는 경우가 더 많다영어 사전을 구현하려면 영어 단어를 키로 사용하고, 뜻을 값으로 사용해야 한다모듈로 함수는 문자열에는 적용할 수 없다간단한 해결책은 문자열의 모든 문자에 대한 ASCII 코드 값을 모두 더한 후에 모듈로 연산을 하는 것이다.위 방법은 충돌이 빈번하게 발생할 수 있다C++은 문자열로부터 해시 값을 생성하는 용도로 std::hash>(std::string) 함수 객체를 제공한다이 함수 객체 내부에는 해시 함수 알고리즘이 구현되어 있다.C++은 문자열 이외에도 모든 기본 데이터 타입에 대한 해시 값을 생성하는 기능도 제공한다"체이닝을 사용하는 해시 테이블"에서 구현했던 해시 테이블 코드를 템플..

[자료구조] 해시 테이블(2)- 충돌

해시 테이블에서 충돌다수의 키를 저장할 수 없는 문제를 해결해보자체이닝앞에서는 하나의 해시 값에 대해 하나의 원소만을 저장했다.따라서 특정 해시 값 위치에 이미 원소가 존재한다면 새로운 값과 예전 값 중 하나를 버릴 수밖에 없었다.체이닝(chaining)은 두 값을 모두 저장할 수 있는 여러 방법 중 하나이다이 방법은 해시 테이블의 특정 위치에서 하나의 키를 저장하는 것이 아니라, 하나의 연결 리스트를 저장한다새로 삽입된 키에 의해 충돌이 발생하면, 리스트의 맨 뒤에 새로운 키를 추가한다따라서 다수의 원소를 원하는 만큼 저장할 수 있다벡터 대신 연결 리스트를 사용하는 이유는, 특정 위치의 원소를 빠르게 삭제하기 위함이다Example) 체이닝을 사용하는 해시 테이블#include #include #incl..

[자료구조] 해시 테이블(1)

해시 테이블lookup(룩업, 조회)는 특정 원소가 컨테이너에 있는지 확인하거나 또는 컨테이너에서 특정 키(key)에 해당하는 값(value)를 찾는 작업을 의미한다DB에서 원하는 자료를 찾거나, 사전에서 단어의 뜻을 찾는 문제들이 이에 해당모든 원소를 선형으로 검토하여 원하는 값을 찾는 작업은 일반적으로 매우 많은 시간이 소요된다O(N) 시간 복잡도를 가짐이 작업을 훨씬 빠르게 수행할 수 있는 효과적인 알고리즘이 필요하다.해시 테이블과 블룸 필터라는 효과적인 구조에 대해 살펴본다.해시 테이블O(N)을 갖는 선형 검색보다 더 나은 검색 방법은 BST와 같은 속성을 갖도록 높이 균형 트리에 데이터를 저장하는 것이다.시간 복잡도가 O(log N)이므로 선형 검색보다 훨씬 빨라진다검색 횟수가 증가하면 이 정도..

[C++ STL] 2.6 그래프(graph)

그래프(graph)트리는 원형 또는 순환적인 종속성을 표현할 수 없다.하나의 노드에서 다른 노드로 이동하는 경로가 하나만 존재하기 때문에도로망을 생각해보자. 특정 노드에서 다른 노드로 이동하기 위한 다양한 경로가 존재할 수 있다.이러한 경우에는 그래프(graph) 구조를 사용해야 한다그래프 구분 - weight그래프는 노드 데이터뿐만 아니라 노드 사이의 에지 데이터도 저장해야 한다.도로망을 예로 들면 각각의 노드에 다른 어떤 노드들이 연결되어 있는지에 대한 정보를 가지고 있어야 한다.이런 방법으로 필요한 모든 노드와 에지가 있는 그래프를 만들 수 있다.이러한 그래프를 비가중 그래프(unweighted graph)라고 한다.에지에 가중치 또는 더 많은 정보를 부여할 수 있다.도로망에서 에지에 노드와 노드 ..

[C++ STL] 2.5 힙(Heap)

힙(heap)std::priority_queue에서 다룬 heap에 대해 더 깊이 있게 알아보자힙은 앞서 말했던 것처럼 다음과 같은 시간 복잡도를 만족해야 한다O(1) : 최대 원소에 즉각적으로 접근할 수 있어야 한다.O(log N) : 원소 삽입에 대한 시간 복잡도O(log N) : 최대 원소 삭제에 대한 시간 복잡도원소 삽입 또는 삭제에 대해 O(log N)의 시간 복잡도를 만족하기 위해 트리 구조를 사용해야 한다.특히 이 경우 완전 이진 트리를 사용해야 한다.완전 이진 트리는 트리의 데이터를 배열을 이용하여 저장할 수 있다.루트 노드를 배열 또는 벡터의 맨 처음에 저장하고, 그다음 레벨의 모든 노드는 왼쪽부터 오른쪽 순서로 저장한다포인터를 사용하지 않아서 메모리 사용 측면에서 효율적이다.부모 노드로..

[운영체제] 14. File System Implementation

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

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

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 주소 공간이 시스템 메모리 주..