Computer Science

Computer Science/Data Structure

Heap(힙)

Heap(힙) 완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 💡 완전 이진 트리 : 이진 트리의 일종으로, 자식은 왼쪽부터 연결한다. (왼쪽 자식이 없으면서 오른쪽 자식이 존재할 수 없다) 일종의 반정렬 상태를 유지한다. 부모와 자식간에 정렬된 상태지만, 형제 노드간의 정렬은 이루어지지 않은 상태다. 중복된 값을 허용한다. (이진 탐색트리는 중복허용 X) 힙 종류 최대 힙(Max Heap) 부모 노드가 자식 노드보다 크거나 같은 완전 이진 트리 최소 힙(Min Heap) 부모 노드가 자식 노드보다 작거나 같은 완전 이진 트리 힙 구현 일반적으로 배열을 사용한다.(연결 리스트로 구현할 수도 있긴 하다.) 구현의 편의성을 위해 0번 인덱스는 사용하지 않는다. 일정한 규칙을 유지한다...

Computer Science/Data Structure

트리, 이진트리, 이진탐색트리

트리(Tree) 계층적인 자료를 표현하는 자료구조다. 나무를 거꾸로 한 모습이다. 사이클이 존재하지 않고, 모든 노드가 연결되어 있다. 방향 그래프이다 트리 관련 용어 이진 트리(Binary Tree) 자식의 노드의 수가 최대 2개인 트리를 의미한다. 트리 순회(Tree Traversal) 전위 순회(Pre-order Traversal) : 노드, 왼쪽 자식, 오른쪽 자식 순서로 방문하는 순회 방법 A-B-D-E-C-F-G 의 순서 중위 순회(In-order Traversal) : 왼쪽 자식, 노드, 오른쪽 자식 순서로 방문하는 순회 방법 D-B-E-A-F-C-G 의 순서 후위 순회(Post-order Traversal) : 왼쪽 자식, 오른쪽 자식, 노드 순서로 방문하는 순회 방법 D-E-B-F-G-C..

Computer Science/Data Structure

Stack(스택), Queue(큐), Deque(데크)

Stack(스택) 삽입(push)과 삭제(pop)이 한쪽 끝(top)에서만 일어나는 자료구조다. top : 가장 상단에 위치한 원소를 가리키는 용어 push() : top 위치에 데이터를 삽입하는 기능 시간복잡도 : O(1) 용량이 꽉 찬 스택에 push()를 시도하면 Stack Overflow 에러가 발생한다. pop() : top 위치의 데이터를 삭제/반환 하는 기능 시간복잡도 : O(1) 데이터가 없는 스택에 pop()을 시도하면 Stack Underflow 에러가 발생한다. 특징 후입선출 LIFO(Last In First Out) 특정 데이터를 찾기 위해서는 해당 값을 찾을 때 까지 pop()을 반복해야 한다 - O(N) JAVA 에서는 Stack 라이브러리를 제공한다. Queue(큐) 삽입(en..

Computer Science/Data Structure

Linked List(연결 리스트)

Linked List(연결 리스트) 특징 노드가 연결되어 있는 형태의 자료구조다. 노드 : 데이터 + 다음 노드를 가리키는 포인터 연속되지 않은 메모리 공간에 저장(+동적 할당) 시간복잡도 접근 / 탐색 : O(N) 첫 번째 노드부터 (N-1)번을 거쳐 가야 한다. 삽입 / 삭제 : 단순 삭입/삭제 : O(1), but 현실적으로 O(N) 단순하게 연결된 구조만 변경하면 된다. 그러나, 원하는 위치에 삽입/삭제 하기위해서는 접근, 탐색의 과정이 필요하다. 따라서, O(1 + N - 1) ⇒ O(N)이 된다. 배열(Array)과의 차이 배열과 달리 크기에 제한이 없어 삭제/추가 작업이 자유롭다. 배열에 비해 접근, 탐색에 시간이 오래걸린다. 배열의 접근,탐색 시간복잡도 : O(1) 참고 간략 설명! 배열(..

Computer Science/Operating System

Thread Pool(스레드 풀) / Monitor(모니터) / Fork-Join(포크-조인)

Thread를 단순하게 사용할 때 문제점 스레드는 생성 비용이 많이 든다. 스레드를 생성할 때마다 Kernel 레벨의 스레드와 연결해야 한다. Kernel의 작업이 필요하다. 스레드가 많아질수록 Context-Switching이 더 자주 발생하게 되어 CPU overhead가 증가한다. → Thread Pool을 사용하여 문제점을 해결한다. Thread Pool 스레드를 허용된 개수 안에서 사용하도록 제한하는 시스템을 말한다. 스레드의 최대 개수를 제한하고 미리 생성한다. 사용자로부터 들어온 요청을 작업 큐에 넣는다. 작업 큐에 들어 있는 작업을 스레드 풀의 스레드가 맡아 처리한다. 작업이 끝난 스레드는 다시 3번 과정을 진행한다. 장점 스레드를 재사용할 수 있기 때문에 새로운 스레드를 생성하는 비용을 ..

Computer Science/Operating System

Thread Safe(스레드 안전)

Thread Safe Race Condition 상황이 발생해도 실행에 문제가 생기지 않는 것을 의미한다. 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것을 의미한다. Race Condition(경쟁 상태) 공유 자원에 대해 두 개 이상의 스레드가 동시에 읽거나 쓰는 상황을 의미한다. 접근의 순서에 따라 결과값에 영향을 주는 문제가 발생할 수 있다. Thread Safe를 지키는 방법 Re-entrancy(재진입성) 정적(전역) 변수를 사용하면 안 된다. 정적(전역) 변수의 주소를 반환하면 안 된다. 호출자가 호출 시 제공한 매개 변수만으로 동작해야 한다. 싱글톤 객체의 잠금에 의존하면..

Computer Science/Operating System

IPC(Interprocess Communication) 프로세스 간 통신

IPC(Interprocess Communication) 프로세스는 유저 영역의 독립된 공간에서 실행되어 서로간에 통신이 어렵다. 그러나, 협력해야 되는 경우가 발생한다. IPC 기법은 이러한 독립적인 프로세스들 간에 데이터 및 정보를 주고받기 위한 메커니즘을 말한다. 1. 공유 메모리(Shared Memory) 모델 주소 공간의 일부를 공유하는 방식이다. 일반적으로 OS는 프로세스 간 접근을 금지하는데, 이 제약 조건을 제거해야 한다. 시스템 콜을 통해 공유 메모리가 설정되고, 그 이후의 통신은 커널의 관여 없이 진행이 가능하다. 장점 커널의 관여가 없기에 속도가 빠르다. 양방향 통신이다. 단점 Producer-Consumer Problem 을 발생시킬 수 있다. 1. Producer가 기존의 data..

Computer Science/Operating System

Compile(컴파일)

프로그램을 컴파일하고 실행하는 방법은 크게 3가지로 나뉜다. 1. Compiler(컴파일러) 정적 컴파일 방식을 사용하는 언어 번역 프로그램이다. 런타임 전 소스 코드 전체를 미리 기계어로 변환하고 컴퓨터에서 실행한다. 다른 프로그램이나 하드웨어가 처리하기에 용이한 코드로 변환하기도 한다. 장점 실행 전에 미리 기계어로 변환했기 때문에 실행 속도가 빠르다. 단점 실행 파일 전체를 전송해야 하므로, 용량이 크다. 수정 후 실행하기 위해서는 컴파일 과정을 다시 거쳐야 한다. 특정 시스템에서 번역된 실행 파일은 다른 시스템에서 실행되지 않는다. 컴파일 언어 : C, C++, C#, Basic 등 2. Interpreter(인터프리터) 런타임에 프로그래밍 코드를 직접 한 줄씩 읽어가며 해당 기능에 대응하는 기계..

Computer Science/Operating System

Deadlock(데드락)

Deadlock 두 가지 이상의 작업이 서로 상대방의 작업이 끝나기를 하염없이 기다리고 있는 상태 Deadlock 발생 조건 Mutual Exclusion(상호 배제) 한 프로세스가 공유 자원을 점유중일 때 다른 프로세스가 동일한 자원에 접근하지 못하게 통제하는 것 Hold & Wait(보유 대기) 프로세스가 하나의 공유 자원을 점유한 상태에서 다른 공유 자원에 접근하기 위해 대기하는 상태 No preemption(비선점) 다른 프로세스가 점유한 자원을 다른 프로세스가 강제로 빼앗을 수 없다. Circular Wait(순환 대기) 요청 관계가 그림과 같이 순환 구조를 이루는 상태 → 4가지를 모두 만족해야 Deadlock이 발생한다. Deadlock 처리 방법 1. Deadlock Prevention(데..

Computer Science/Operating System

Mutex(뮤텍스) & Semaphore(세마포어)

Deadlock(교착 상태) 두 가지 이상의 작업이 서로 상대방의 작업이 끝나기를 하염없이 기다리고 있는 상태 다음 페이지에서 깊게 설명 Race Condition(경쟁 상태) 공유 자원에 대해 두 개 이상의 스레드가 동시에 읽거나 쓰는 상황을 의미한다. 접근의 순서에 따라 결과값에 영향을 주는 문제가 발생할 수 있다. Critical Section(임계 영역) 공유 자원의 독점을 보장하는 코드 영역이다. Race Condition 이 발생해 문제가 일어날 수 있는 영역이다. 문제 방지를 위해 뮤텍스와 세마포어를 사용한다. 뮤텍스(MUTual EXclusion, 상호 배제) 여러 스레드를 사용하는 환경에서 공유 자원에 대한 접근을 제한하는 동기화 메커니즘이다 Boolean 타입의 Lock 변수를 사용한다..

호준송
'Computer Science' 카테고리의 글 목록 (3 Page)