더보기
3월 27일 (월)
- CS 스터디 진행 - 자료구조
- 채용 설명회 참여
3월 28일 (화)
- 알고리즘 풀이 및 피드백 - 완전 탐색
3월 29일 (수)
- CS 스터디 진행 - 데이터베이스
- CS 스터디 복습 - 운영체제
- 프로젝트 경험 정리
3월 30일 (목)
- 알고리즘 풀이 및 피드백 - 구현
- CS 스터디 진행 - 데이터베이스
- 직무 면접 대비 연습
3월 31일 (금)
- 프로젝트 코드 리뷰 및 PR 완료
- CS 스터디 복습 - 디자인 패턴 (싱글턴, 이터레이터 손코딩)
4월 1일 (토)
- 알고리즘 풀이 및 피드백 - 완전탐색
1️⃣ 자료 구조 : 이진트리 (Binary Tree)
트리 (Tree)
Directed Acyclic Graph(방향성이 있는 비순환 그래프)의 한 종류. 노드 N개라면 항상 간선 N-1개.
이진트리 (Binary Tree)
자식 노드 수가 2개 이하인 트리
- 정이진트리 (Full Binary Tree) : 자식 노드 수 0 or 2
- 변질 이진 트리 (Degenerate Binary Tree) : 자식 노드 수 1
- 완전 이진 트리 (Complete Binary Tree) : 왼쪽부터 채워져 마지막 레벨을 제외하고 완전히 채워진 트리.
- 포화 이진 트리 (Perfect Binary Tree) : 리프 노드 제외 자식 노드 수가 모두 2. 리프 노드 수가 해당 레벨 최대 수 만족.
- 균형 이진 트리 (Balanced Binary Tree) : 왼쪽, 오른쪽 노드의 높이 차가 1 이하.
이진 탐색 트리 (Binary Search Tree)
노드의 오른쪽 하위 트리는 '노드보다 큰 값', 왼쪽 하위 트리는 '노드보다 작은 값'이 들어 있는 트리.
- 평균 O(logN)
- 최악 O(N), 한쪽으로만 노드가 몰리는 경우 (선형적 트리)
- 저장된 값이 같더라도 들어오는 순서가 다르면 이진 탐색 트리 모습이 달라질 수 있음.
AVL 트리 (Adelson-Velsky and Landis Tree)
선형적 트리가 되는 것을 방지하고 '스스로 균형을 잡는' 이진 탐색 트리
- 균형 이진 트리 모습을 유지, 만족
- 평균 & 최악 모두, 탐색 & 삽입 & 삭제 O(logN)
- 삽입, 삭제 시 높이 균형 성질이 무너지기 때문에 이때 회전(Rotation) 동작 실행.
AVL 트리 회전
원래 z가 root인 부분 트리를 b를 root로 하는 새로운 부분 트리로 바꾸는 것
a가 b의 왼쪽 자식 T0, T1은 a의 왼쪽, 오른쪽 자식
c가 b의 오른쪽 자식, T2, T3는 각각 c의 왼쪽, 오른쪽 자식
- x, y, z : 자식 노드, 부모 노드, 할아버지 노드
- a, b, c : x, y, z를 inorder순으로 나열한 것
- T0, T1, T2, T3 : x, y, z의 부분 트리를 inorder순으로 나열한 것
- Single rotation : b = y일 때, y를 z와 회전시키는 것처럼 보이기 때문
- Double rotation : b = x일 때, x를 y와, 그리고 다시 z와 회전시키는 것처럼 보이기 때문
레드 블랙 트리 (Red-Black Tree)
각각 노드가 레드 또는 블랙 색상 속성을 가지고 있는 자기 균형 이진 탐색 트리.
- 각 노드는 빨간색 또는 검은색의 색상을 나타내는 추가 비트 저장. 이를 이용해 균형 유지.
- 평균 & 최악 모두, 탐색 & 삽입 & 삭제 O(logN)
유효한 레드 블랙 트리 조건
- Node = Red or Black
- Root Node = Black
- Leaf Node = Black
- Red Node Child = Black
- 어떤 노드로부터 시작되어 그에 속한 하위 리프 노드까지 도달하는 모든 경로에는 리프 노드 제외해 모두 같은 개수의 Black Node 존재.
2️⃣ 자료 구조 : 힙 (Heap)
완전 이진 트리 기반 자료 구조. 루트 노드에 있는 키는 모든 자식에 있는 키 중 최적값.
- 최대 힙 : 루트 노드 키가 모든 키 중 최대 값.
- 최소 힙 : 루트 노드 키가 모든 키 중 최소 값.
- 삽입 과정
- 힙에새로운 요소가 들어오면 마지막 노드에 삽입
- 새로운 노드를 부모 노드와 크기를 비교해 힙의 성질을 만족할 때까지 swap
- 삭제 과정
- 최댓값인 루트 노드 삭제
- 마지막 노드를 루트 노드로 올림
- 루트 노드에서 아래로 내려가면서, 힙의 성질 만족할 때까지 swap
3️⃣ 자료 구조 : 우선순위 큐 (Priority Queue)
높은 우선순위를 가진 원소는 낮은 우선순위를 가진 원소보다 먼저 처리되는 자료 구조.
같다면 순서에 의해 처리.
- 힙을 기반으로 구현 가능. (하지만 다른 방법으로도 구현될 수 있음. 힙 /= 우선순위 큐)
- 최소 지원 연산
- insert_with_priority : 하나의 원소를 우선순위를 지정해 큐에 추가
- pull_highest_priority_element : 가장 높은 우선순위를 가진 원소를 큐에서 제거하고 이를 반환
4️⃣ 자료 구조 : 맵, 셋, 해시 테이블 (Map, Set, Hash Table)
연관 배열 (Associative Array)
키 하나와 값 하나가 연관되어 있으며, 키를 통해 연관되는 값을 얻을 수 있는 자료 구조
맵 (Map)
키와 매핑된 값의 조합으로 형성된 자료 구조
- 키와 데이터를 같이 저장
- 키에 대한 중복은 없음
셋 (Set)
맵과 유사하나 고유한 요소를 저장하는 자료 구조
- 중복을 허용하지 않는다.
해시 테이블 (Hash Table)
무한에 가까운 데이터들을 유한한 개수의 해시 값으로 매핑한 테이블
- 해시 함수를 사용해 색인을 버킷이나 슬롯의 배열로 계산
- 삽입, 삭제, 탐색 시 평균적으로 O(1)의 시간 복잡도
각 자료구조는 언어별로 구현 세부 사항이 다르므로 참고.
5️⃣ DB : 용어
- 필드(Field) : 속성
- 레코드(Record) or 튜플(Tuple) : 테이블에 쌓이는 행
- 관계 : 1:1, 1:N, N:M 관계가 있으며, 화살표로 나타낼 수 있음. 0 포함이냐 아니냐에 따라 화살표 표기가 달라짐.
- 키(Key) : 테이블 간의 관계를 좀 더 명확하게 하고 테이블 자체 인덱스를 위해 설정된 장치
키 (Key)
- 유일성 : 해당 필드의 값들은 모두 달라야 함. 유일해서 데이터 식별 가능.
- 최소성 : 최소한의 속성들로 구성.
- 기본키(Primary Key, PK) : 유일성과 최소성을 만족하는 키. 자연키 또는 인조키 중 골라 설정.
- 자연키 : 원래 데이터에서 유일한 값이 있어서 뽑을 수 있는 키, 언젠가 변할 수도 있음. (예 : 전화번호)
- 인조키 : 인위적으로 생성한 키. 보통 인조키가 기본키가 됨. (예 : 유저 아이디)
- 외래키(Foreign Key, FK) : 다른 테이블의 기본키를 그대로 참조한 값. 개체와의 관계 식별에 사용. 중복 허용.
- 후보키(Candidate Key) : 유일성과 최소성 만족. 기본키가 될 수도 있는 후보들. 대체키와 기본키 모두 포함.
- 대체키(Alternate Key) : 후보키가 2개 이상일 경우, 하나를 기본키로 지정하면 나머지가 모두 대체키.
- 슈퍼키(Super Key) : 유일성을 갖춘 키. 각 레코드를 유일하게 식별할 수 있는 키.
6️⃣ DB : ERD (Entity Relationship Diagram)
릴레이션 간 관계들을 정의한 구조도
- 데이터베이스 구축 시, 가장 기초적 뼈대
- 관계형 구조를 표현할 수 있는 데이터를 구성하는 데 유용.
- 비정형 데이터는 충분히 표현할 수 없다.
7️⃣ DB : 정규화 (Normalization)
릴레이션 관계가 잘못 표현되어 데이터베이스 이상 현상이 발생한 것을 해결하는 과정 or
저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
이상 현상
- 갱신 이상 : 반복된 데이터 중 일부를 갱신할 시 데이터 불일치 발생.
- 삽입 이상 : 불필요한 정보를 함께 저장하지 않고는 정보 저장이 불가능.
- 삭제 이상 : 필요한 정보를 함께 삭제하지 않고는 정보 삭제가 불가능.
정규형 원칙
- 자료 중복성 감소
- 독립적 관계는 별개의 릴레이션으로
- 각 릴레이션은 독립적 표현 가능
제1 정규형
모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성
- 어떤 테이블에 속한 모든 도메인이 원자 값만으로 구성
- 모든 속성에 반복되는 그룹 X
- 기본키를 사용해 관련 데이터 집합을 고유하게 식별
제2 정규형
제1 정규형 + 부분적 함수 종속을 제거한 형태
- 부분적 함수 종속 : 릴레이션에서 종속자가 "기본키가 아닌 다른 속성에 종속"되거나, 기본키를 구성하는 "여러 속성들의 부분집합 중 일부분에만 종속"
제3 정규형
제2 정규형 + 기본키가 아닌 모든 속성이 이행적 함수 종속이 없는 형태
- 이행적 함수 종속 : A -> B, B -> C 존재 시, 논리적으로 A -> C가 성립. 이때 C가 A에 이행적으로 함수 종속되었다 함
보이스/코드 정규형 (BCNF)
제3 정규형 + 결정자가 후보키가 아닌 함수 종속 관계를 제거해 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
참고 자료
더보기
주홍철, <면접을 위한 cs 전공지식 노트>, 길벗, 2022
https://www.youtube.com/watch?v=jDM6_TnYIqE
https://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C-%EB%B8%94%EB%9E%99_%ED%8A%B8%EB%A6%AC
https://ko.wikipedia.org/wiki/%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84_%ED%81%90
https://ko.wikipedia.org/wiki/%EC%97%B0%EA%B4%80_%EB%B0%B0%EC%97%B4
https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%85%8C%EC%9D%B4%EB%B8%94
'TIL (Today I Learned)' 카테고리의 다른 글
TIL_230405 (0) | 2023.04.06 |
---|---|
TIL_230403 (0) | 2023.04.03 |
TIL_230323-0324 (0) | 2023.03.24 |
TIL_230321-0322 (0) | 2023.03.22 |
TIL_230320 (0) | 2023.03.20 |