프로그래밍을 공부하다 보면 꼭 듣게 되는 Blocking과 NonBlocking 그리고 Sync와 Async에 대하여 알아보겠습니다. 목차 Blocking과 NonBlocking Sync와 Async Blocking과 NonBlocking Blocking Blocking은 작업이 진행 중일 때, 다른 작업은 앞의 작업이 끝나기를 기다려야 하는 방식을 의미합니다. I/O작업이나 시간이 오래 걸리는 작업을 수행할 때, 앞의 작업이 끝난 후에 다음 작업을 시작하므로 자원이 효율적으로 사용되지 않을 수 있습니다. 예를 들어 '빨래하기', '청소기 돌리기', '빨래 널기' 3가지 작업을 순서대로 실행한다면 Blocking의 경우 빨래를 친구에게 부탁하고 빨래가 되는 동안 청소기를 돌리는 것이 아닌 세탁이 완료될 ..
그래프 알고리즘은 그래프 자료구조에서 특정 목정을 달성하기 위해 사용되는 알고리즘입니다. 그래프는 정점과 간선으로 이루어진 네트워크 형태의 자료구조로, 다양한 상호 관계를 모델링할 수 있습니다. 그중 깊이 우선 탐색과 너비 우선 탐색에 대하여 알아보겠습니다. 목차 깊이 우선 탐색 (DFS) 너비 우선 탐색 (BFS) 깊이 우선 탐색 (DFS) 깊이 우선 탐색은 그래프를 탐색하는 알고리즘 중 하나로, 현재 정점과 연결된 간선 중 아직 방문하지 않은 정점을 재귀적으로 탐색하는 방식입니다. 깊이 우선 탐색은 스택(Stack) 자료구조를 활용하여 구현할 수 있습니다. 탐색 과정 1. 시작 정점을 선택하고 해당 정점을 방문했다는 표시와 함께 시작 정점을 스택에 넣습니다. 2. 스택에서 값을 뽑아 정점으로 정하고 ..
검색 알고리즘은 데이터 집합에서 특정 값을 찾는 데 사용되는 중요한 알고리즘입니다. 다섯 가지 주요 검색 알고리즘인 선형 검색, 이진 검색, 트리 검색, 해시 검색, 보간 검색에 대하여 자세히 알아보겠습니다. 목차 선형 검색 (Linear Search) 이진 검색 (Binary Search) 트리 검색 (Tree Search) 해시 검색 (Hash Search) 보간 검색 (Interpolation Search) 선형 검색 (Linear Search) 선형 검색은 데이터 집합에서 특정 값을 찾기 위해 처음부터 끝까지 순차적으로 탐색하는 간단한 검색 알고리즘입니다. 시간복잡도는 O(n)입니다. 작동 방식 1. 데이터 집합의 첫 번째 요소부터 마지막 요소까지 순차적으로 탐색하면서 대상 값을 찾습니다. 2. ..
알고리즘은 문제를 해결하기 위한 명령어의 집합이며, 입력 데이터를 받아서 출력 데이터를 생성하는 과정을 의미합니다. 이러한 알고리즘 중 정렬 알고리즘에 대하여 알아보겠습니다. 목차 버블 정렬 선택 정렬 삽입 정렬 퀵 정렬 병합 정렬 힙 정렬 버블 정렬 버블 정렬은 인접한 두 개의 원소를 비교하고, 필요에 따라 위치를 교환하면서 정렬하는 알고리즘입니다. 시간 복잡도는 최선, 평균, 최악의 경우 모두 O(n^2)입니다. 따라서 큰 크기의 배열에서는 비효율적일 수 있습니다. 동작 방식 1. 배열의 첫 번째 원소부터 인접한 원소와 비교합니다. 2. 만약 인접한 원소가 순서에 맞지 않다면 위치를 교환합니다. 3. 배열의 끝까지 위의 과정을 반복하며, 가장 큰 원소가 배열의 마지막으로 이동합니다. 4. 위의 과정을..