분류 전체보기 210

23.09.22 Call by reference

Call by reference 함수 호출 방식 중 하나로, 함수에 변수를 전달할 때 메모리 상의 해당 변수의 주소를 전달하는 방법을 의미합니다. 이로 인해 함수 내에서 해당 변수의 값을 변경하면, 이 변경은 원래의 변수에도 반영됩니다. 즉, 원본 변수와 함수 내의 매개변수는 동일한 메모리 주소를 참조하게 됩니다. Call by reference의 특징: 변수의 주소 전달: 함수를 호출할 때 변수의 실제 메모리 주소가 전달됩니다. 원본 데이터 수정: 함수 내에서 매개변수를 변경하면, 이 변경은 원본 변수에도 반영됩니다. 메모리 효율: 데이터의 복사본을 만들지 않기 때문에 큰 데이터 구조를 전달할 때 메모리 사용이 효율적입니다. 주의 사항: 함수 내에서 매개변수의 값을 변경하면 원본 데이터도 변경되므로 실..

23.09.21 Base64 인코딩

Base64 바이너리 데이터를 ASCII 문자열로 표현하기 위한 인코딩 방식입니다. 문자 세트: Base64 인코딩에 사용되는 문자 세트는 대문자 A-Z, 소문자 a-z, 숫자 0-9, 그리고 '+' 와 '/' 총 64개의 문자로 이루어져 있습니다. 또한, *패딩에 '=' 문자가 사용됩니다. *패딩: 데이터를 특정 크기나 형식에 맞추기 위해 추가하는 여분의 데이터를 의미 작동 방식: *바이너리 데이터를 3바이트씩 그룹화합니다. 즉, 24비트의 데이터 블록을 형성합니다. 이 24비트 블록을 4개의 6비트 블록으로 나눕니다. 각 6비트 블록은 Base64 문자 세트의 하나의 문자에 매핑됩니다. 따라서, 3바이트의 바이너리 데이터는 4개의 Base64 문자로 변환됩니다. 데이터의 길이가 3의 배수가 아닐 경우..

23.09.20 동시성과 병렬성

동시성 (Concurrency) 정의: 여러 작업이 시간적으로 겹치게 실행되는 것. 이것은 실제로 작업들이 동시에 실행되는 것을 의미하는 것은 아니며, 단일 코어 시스템에서도 동시성을 구현할 수 있습니다. 목적: 동시성은 효율성과 반응성을 향상시키기 위해 사용됩니다. 예를 들어, 한 작업이 I/O 바운드 작업 (예: 디스크에서 데이터 읽기)을 수행하는 동안 다른 작업을 수행하여 시스템의 활용도를 높일 수 있습니다. 구현: 쓰레드, 코루틴, 비동기 I/O 등과 같은 기술로 구현됩니다. 병렬성 (Parallelism) 정의: 두 개 이상의 작업이 동시에, 즉 동시에 실행되는 것. 병렬성은 일반적으로 여러 코어나 프로세서에서 작업을 동시에 실행하여 작업을 빠르게 완료하는 데 초점을 맞춥니다. 목적: 병렬성의 ..

23.09.19 복합 인덱스(Composite Index, Compound Index)

복합 인덱스 데이터베이스 테이블에서 두 개 이상의 컬럼을 합쳐서 하나의 인덱스로 생성한 것이다. 이러한 인덱스는 여러 컬럼의 조합에 대한 쿼리 성능을 개선하는 데 유용하다. 복합 인덱스의 특징: 순서 중요: 복합 인덱스에서 컬럼의 순서는 매우 중요하다. index(first_name, last_name)은 first_name 후에 last_name 순으로 데이터를 정렬 한다. 따라서 first_name에 대한 검색은 빠르지만, last_name만을 사용하여 검색하면 인덱스가 사용되지 않을 수 있다. 효율적인 검색: 복합 인덱스는 해당 컬럼들의 조합에 대한 검색이나 정렬에서 효율적이다. 데이터베이스 공간: 인덱스는 추가적인 저장 공간을 사용하므로, 불필요한 복합 인덱스는 피하는 것이 좋다. 복합 인덱스 사..

23.09.18 해시테이블 다시 학습

해시 테이블 해시함수를 사용하여 변환한 값을 색인(index)으로 삼아 키(key)와 데이터(value)를 저장하는 자료구조를 말한다. 기본연산으로는 탐색(Search), 삽입(Insert), 삭제(Delete)가 있다. 구성요소 버킷 (Bucket) 해시 테이블의 각 슬롯을 나타내며, 하나 이상의 키-값 쌍을 저장할 수 있다. 충돌 해결 방법에 따라 버킷의 구현이 달라진다. 해시 함수 (Hash Function) 키를 받아 정수 값을 반환하는 함수로, 반환된 정수 값은 버킷의 인덱스로 사용된다. 해시 함수는 균등하게 값을 분포시켜야 하며, 동일한 키에 대해서는 항상 동일한 해시 값을 반환해야 한다. 해시 함수의 품질과 특성은 해시 테이블의 성능, 효율성, 그리고 안정성에 큰 영향을 미친다. 충돌 해결 ..

23.09.17 힙 더 알고 가자

전에 힙을 알아봤을 때는 내가 이해한 것을 기반으로 정리가 되어있지 않아서 가독성도 많이 떨어졌는데 이번에 다시 정리하면서 한 번 더 보려고 한다. 힙 특정한 속성을 가진 완전 이진 트리의 일종이다. 최대 힙 (Max Heap) 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 같습니다. 즉, 루트 노드는 힙 내의 최댓값을 가집니다. 최소 힙 (Min Heap) 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 작거나 같습니다. 즉, 루트 노드는 힙 내의 최솟값을 가집니다. 주요 기능 삽입 (Insertion) 힙에 새로운 요소를 추가한다. 추가 후에는 힙 속성을 유지하기 위해 재정렬을 하는데, 이 과정은 통상적으로 O(log n) 시간 복잡도를 가진다. 새로운 값을 가진 노드를 힙의 가장..

23.09.16 우선순위 큐(Priority Queue)

우선순위 큐 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 것을 말한다. 특징 모든 항목에는 우선순위가 있다. 우선순위가 높은 요소는 우선순위가 낮은 요소보다 먼저 queue에서 제외된다. 두 요소의 우선순위가 같으면 queue의 순서에 따라 제공된다. 우선순위 큐와 일반적인 큐 비교 4 → 8 → 2 순으로 데이터가 들어간다고 했을 때 큐와 우선순위 큐의 처리 순서는 다음과 같다. (여기서 높은 값이 높은 우선순위) input : 4 → 8 → 2 큐 : 4 → 8 → 2 우선순위 큐 : 8 → 4 → 2 우선순위 큐의 주요 기능 enqueue()- queue에 새 요소를 삽입합니다. dequeue() - queue에서 최대 우선순위 요소를 삭제하고 그 값을 반환합니다. peek() - ..

23.09.15 이진트리(Binary tree)

트리 자체는 기존에 찾아봤었다. 하지만 내용도 많고 종류도 많아서 이런 형태구나 하는 정도만 알고 넘어갔다. 그러다 이번에 이진트리에 대해서 보다 자세히 찾아봤다. 이진트리란 모든 노드들이 둘 이하의 자식을 가진 트리이다. 이진트리의 순회 이진트리 순회 알고리즘은 트리에 저장된 모든 노드를 빠짐없이 살펴보고 싶을 때 사용한다. 깊이 우선 순회 방법으로는 전위 순회, 중위 순회, 후위 순회 가 있고, 너비 우선 순회 방법으로는 레벨 순회 가 있다. 전위 순회(pre-order): NLR 중위 순회(in-order): LNR 후위 순회(post-order): LRN 레벨 순회(level-order): NLR 전위 순회(pre-order): 1 2 4 5 3 6 7 중위 순회(in-order): 4 2 5 1..

23.09.14 인덱스(index)

데이터베이스에서 인덱스는 데이터 검색 속도를 향상시키기 위한 자료구조이다. 인덱스를 사용하면 테이블의 모든 데이터를 순차적으로 검색하지 않고도 빠르게 원하는 데이터를 찾을 수 있다. 일반적인 원리 정렬과 트리 구조: 일반적으로 인덱스는 B-트리, B+ 트리, 해시 테이블 등 다양한 자료구조를 사용할 수 있다. 이러한 구조를 통해 데이터의 검색, 삽입, 삭제 연산이 빠르게 이루어진다. 키와 값: 인덱스는 '키(key)'와 '값(value)'의 쌍으로 구성된다. 키는 인덱스를 구성하는 열(column)의 값이며, 값은 실제 데이터 레코드를 가리키는 포인터 또는 해당 레코드의 위치이다. ( userId가 1이라면 1이 키이고, 1이 가리키는 위치가 값이다.) 쿼리 최적화: SQL 쿼리가 실행될 때 데이터베이스..

23.09.13 시간 복잡도와 공간 복잡도

시간 복잡도 (Time Complexity) 알고리즘이 실행되는 데 얼마나 시간이 걸리는지를 나타내는 지표이다. 이는 일반적으로 입력 크기에 대한 함수로 표현되는데, Big-O 표기법이 자주 사용된다. 예시 O(1): 상수 시간 (Constant time) O(log n): 로그 시간 (Logarithmic time) O(n): 선형 시간 (Linear time) O(n^2): 제곱 시간 (Quadratic time) O(2^n): 지수 시간 (Exponential time) 참고 Big-O (O): 알고리즘의 최악의 경우를 평가 ("빅 오") Big-Θ (Θ): 알고리즘의 평균적인 경우를 평가 ("빅 세타") Big-Ω (Ω): 알고리즘의 최선의 경우를 평가 ("빅 옴") 공간 복잡도 (Space Co..