<aside> <img src="/icons/list-indent_lightgray.svg" alt="/icons/list-indent_lightgray.svg" width="40px" />

Table Of Content

</aside>

비선형 자료 구조

비선형 자료구조란 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말한다.

일반적으로 트리나 그래프를 말한다.

그래프

그래프 (Graph)

정점과 간선으로 이루어진 자료 구조

정점과 간선

어떠한 곳에서 어떠한 곳으로 무언가를 통해 간다고 했을 때 ‘어떠한 곳’은 정점(vertext)이 되고 ‘무언가’는 간선(edge)이 된다.

정점으로 나가는 간선 : 해당 정점의 outdegree

정점으로 들어오는 간선 : 해당 정점의 indegree

정점과 간선으로 이루어진 집합을 ‘그래프’라고 한다.

가중치

간선과 정점 사이에 드는 비용을 뜻한다.

트리

트리 (Tree)

그래프 중 하나로 그래프의 특징처럼 정점과 간선으로 이루어져 있고, 트리 구조로 배열된 일종의 계층적 데이터의 집합이다.

루트 노드, 내부 노드, 리프 노드 등으로 구성된다.

참고로 트리로 이루어진 집합을 숲이라고 한다.

특징

image.png

  1. 부모, 자식 계층 구조를 가진다.
  2. V - 1 = E, 간선 수 = 노드 수 - 1
  3. 임의의 두 노드 사이의 경로는 ‘유일무이’하게 ‘존재’한다. 즉, 트리 내의 어떤 노드와 어떤 노드까지의 경로는 반드시 있다.

트리의 구성

트리는 루트 노드, 내부 노드, 리프 노드로 이루어져 있다.

  1. 루트 노드 : 가장 위에 있는 노드
  2. 내부 노드 : 루트 노드와 리프 노드 사이에 있는 노드
  3. 리프 노드 : 자식 노드가 없는 노드

트리의 높이와 레벨

image.png

이진 트리

image.png

자식의 노드 수가 두 개 이하인 트리를 의미하며, 다음과 같이 분류한다.

이진 탐색 트리 (BST)

image.png

노드의 오른쪽 하위 트리에는 ‘노드 값보다 큰 값’이 있는 노드만 포함되고, 왼쪽 하위 트리에는 ‘노드 값보다 작은 값’이 들어 있는 트리를 말한다.

이때 왼쪽 및 오른쪽 하위 트리도 해당 특성을 가진다.

이렇게 두면 ‘검색’을 하기에 용이하다.

보통 요소를 찾을 때 이진 탐색 트리의 경우 O(log n)이 걸린다. 최악의 경우 O(n)이 걸린다.

그 이유는 이진 탐색 트리는 삽입 순서에 따라 선형적일 수 있기 때문이다.

AVL 트리 (Adelson-Velsky and Landis tree)

최악의 경우 선형적인 트리가 되는 것을 방지하고 스스로 균형을 잡는 이진 탐색 트리

두 자식 서브트리의 높이는 항상 1만큼 차이 난다는 특징이 있다.

이진 탐색 트리는 선형적인 트리 형태를 가질 때 최악의 경우 O(n)의 시간 복잡도를 가진다.

이러한 최악의 경우를 배제하고 항상 균형 잡힌 트리로 만들자 라는 개념을 가진 트리가 바로 AVL 트리이다.

탐색, 삽입, 삭제 모두 시간 복잡도가 O(log n)이며 삽입, 삭제를 할 때마다 균형이 안 맞는 것을 맞추기 위해 트리 일부를 왼쪽 혹은 오른쪽으로 회전시키며 균형을 잡는다.

레드 블랙 트리

균형 이진 탐색 트리로 탐색, 삽입, 삭제 모두 시간 복잡도가 O(log n)이다.

각 노드는 빨간색 또는 검은색의 색상을 나타내는 추가 비트를 저장하며, 삽입 및 삭제 중에 트리가 균형을 유지하도록 하는 데 사용된다.

참고로 ‘모든 리프 노드와 루트 노드는 블랙이고 어떤 노드가 레드이면 그 노드의 자식은 반드시 블랙이다’ 등의 규칙을 기반으로 균형을 잡는 트리이다.

힙 (Heap)

완전 이진 트리 기반의 자료 구조이며, 최소힙과 최대힙 두 가지가 있고 해당 힙에 따라 특정한 특징을 지킨 트리를 말한다.

image.png

최대힙의 삽입

힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 이어서 삽입한다.

이 새로운 노드를 부모 노드들과의 크기를 비교하며 교환해서 힙의 성질을 만족시킨다.

image.png

예시:

8이라는 값을 가진 노드 밑에 15라는 값을 가진 노드를 삽입한다고 하면, 이 노드가 점차 올라가면서 해당 노드 위에 있는 노드와 스왑하는 과정을 거쳐 최대 힙 조건을 만족하게 된다.

최대 힙의 삭제

최대 힙에서 최댓값은 루트 노드이므로 루트 노드가 삭제되고, 그 이후 마지막 노드와 루트 노드를 스왑하여 또다시 스왑 등의 과정을 거쳐 재구성된다.

우선순위 큐

우선순위 큐

우선순위 큐는 우선순위 대기열이라고도 하며, 대기열에서 우선순위가 높은 요소가 우선순위가 낮은 요소보다 먼저 제공되는 자료 구조이다.

우선순위 큐는 힙을 기반으로 구현된다.

맵 (Map)

맵은 특정 순서에 따라 키와 매핑된 값의 조합으로 형성된 자료 구조이다.

[예시] “이승철”: 1, “박동영”: 2 와 같이 string: int 형태로 값을 할당할 경우에 사용

맵을 쓸때는 map<string, int> 형태로 구현한다.

해시 테이블


📚 용어


🤔 면접 예상 질문