[자료구조 목차]

1. Tree 개요

 가. Tree 정의

 - 노드(Node)들이 나무 가지처럼 연결된 비선형 계층적 자료 구조

 - 아래 그림 같이 나무를 거꾸로 뒤집어 놓은 모양과 유사함

 나. Tree 특징

  - 그래프의 한 종류이며, '최소 연결 트리' 불림

  - 계층적 모델이고, DAG(Directed Acyclic Graphs, 방향성이 있는 비순환 그래프)의 한 종류

  - 노드가 N개인 트리는 항상 N-1 개의 간선(Edge)를 가짐

  - 루트에서 어떤 노드로 가는 경로는 유일함

  - 1개의 Root Node만 존재하며, 모든 자식 Node는 1개의 부모 노드만 가짐

 

2. Tree 구성도 및 구성요소

 가. Tree 구성도

 나.Tree 구성 요소 설명

구성 요소 설 명
루트 노드(Root Node) - 부모가 없는 노드, 트리는 하나의 루트 노드만 가짐
단말 노드(Leaf Node) - 자식이 없는 노드, '말단 노드' 또는 '잎 노드'라고 함
내부 노드(Internal Node) - 단말 노드가 아닌 노드
간선(Edge) - 노드를 연결하는 선(Link, branch)
형제(Sibling) - 같은 부모를 가지는 노드
노드의 크기 - 자신을 포함한 모든 자손 노드의 개수
노드의 깊이 - 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
노드의 레벨 - 트리의 특정 깊이를 가지는 노드의 집합
노드의 차수 - 하위트리 개수/간선 수(degree) = 각 노드가 지닌 가지의 수
트리의 차수 - 트리의 최대 차수
트리의 높이 - 루트 노드에서 가장 깊숙히 있는 노드의 깊이

 

3. Tree 순회 방식

 

 

[자료구조 목차]

 

이진트리 (Binary Tree)

 

1. 탐색작업의 효율화를 위한 자료구조, 이진트리 개념

  • 각 노드가 2개 이하의 자식노드를 가지는 트리형 자료구조로 탐색 작업을 효율적으로 하기 위한 자료구조
  • 노드의 차수(degree)가 2 이하로 구성된 트리
  • 왼쪽 자식 노드는 부모보다 작고, 오른쪽 자식 노드는 부모보다 큰 트리구조 형태
  • (연산유형) 탐색, 삽입, 삭제

 

2. 이진트리의 순회방식 및 유형

1) 이진트리 순회방식

  • 전위 순회 : 루트노드를 먼저 탐색하고, 자식노드를 탐색하는 방식
  • 중위 순회 : 왼쪽 자식 노드를 탐색하고, 루트노드를 탐색하고,오른쪽 자식 노드를 탐색하는 방식
  • 후위 순회 : 왼쪽 자식 노드를 탐색하고, 오른쪽 자식 노드를 탐색하고, 루트 노드를 탐색하는 방식
순회 방식 그림 설명
전위 순회
- 루트노드를 먼저 탐색하고, 자식노드를 탐색하는 방식
중위 순회
- 왼쪽 자식 노드를 탐색하고, 루트노드를 탐색하고,오른쪽 자식 노드를 탐색하는 방식
후위 순회
- 왼쪽 자식 노드를 탐색하고, 오른쪽 자식 노드를 탐색하고, 루트 노드를 탐색하는 방식
레벨 순회

- 루트 노드를 먼저 탐색하고, 그 다음 레벨의 노드를 탐색하는 방식
- 큐를 선언하고 루트노드를 넣어준 다음, 큐에 넣어준 노드를 하나씩 탐색하면서 자식 노드를 큐에 넣고 큐가 비어있을 때까지 반복

 

2) 이진트리 유형

유형 개념도 설명
포화 이진
  • leaf 노드들이 모두 같은 높이에 존재
  • 총 노드 개수 : 2^k - 1 (k ≥ 1)
완전 이진

  • leaf 노드들이 트리의 왼쪽부터 차곡차곡 채워진 형태
  • 총 노드 개수 : 2^(k-1) ~ 2^k -1 
경사 이진
  • 한쪽 방향으로 노드들이 채워진 형태
  • 깊이가 k인 이진트리의 최대 노드의 수 : 2^k - 1
  • 이진 트리의 레벨 i에서 최대 노드의 수 : 2^(i - 1)
  • n0 = n2 + 1 (n0 : 이진 트리의 터미널 노드, n2 : 차수가 2인 노드 수)

 

'메가노트 > 토픽과제(정리)' 카테고리의 다른 글

해싱(배준호 대리님)  (0) 2022.11.19
Tree(이재용 부장님)  (0) 2022.11.19
Heap(이강욱 선임님)  (0) 2022.11.19
재귀 알고리즘(문경숙 수석님)  (0) 2022.11.19
Greedy 알고리즘(황선환 이사님)  (0) 2022.11.19

[자료구조 목차]

 

  

1. 우선순위 큐를 위한 Heap

1) 정의 

- 여러 개의 드들 가운서 최대값이나 최소값을 빠른 시간에 도록 들어진 완전 이진 트리 자료 

** 이진트리,  우선순위 큐

2) 특징

- 힙 순서 속성 만족, 대부분 이진 힙, O(log n)

 

2. Heap 의 종류 및 연산

1) Max Heap과 Min Heap

구분 Max Heap Min Heap
개념도
개념 부모노드의 키 값이 자식노드의 키 값보다 크거나 같은 완전 이진 트리 부모노드의 키 값이 자식노드의 키 값보다 작거나 같은 완전 이진 트리
힙 순서 속성 key(부모노드) ≥ key(자식노드) key(부모노드) ≤ key(자식노드)

2) Heap의 연산

구분 설명
삽입 연산

1. 최고 깊이, 최우측에 새 노드 추가
2. 삽입 노드와 부모노드 비교
3. 삽입노드보다 부모노드가 작으면 연산 종료, 크면 위치 교환
4. 2번 단계 다시 진행
삭제 연산

1. 최고 깊이, 최우측에 있던 노드를 루트노드로 이동(힙속성 파괴)

2. 옮겨온 노드와 양쪽 자식 비교, 작은쪽 자식과 위치 교환
3. 옮겨온 노드가 더 이상 자식이 없거나 양쪽 자식보다 작은 값인 경우 연산 종료, 아닌 경우 2번 진행

[자료구조 목차]

 

 

I.  재귀알고리즘의 개요

가.  재귀알고리즘의 정의

-   수학적 귀납법을 역순으로 이용하여 자신의 함수를 반복적으로 호출하는 알고리즘

수행 과정 중 스스로 호출하는 함수

재귀의 설명 그대로 함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식이다.

그렇기에 특정 분기까지 자기 자신을 계속해서 호출하는데, 주로 반복문을 구현할 때 사용한다.

 

우리가 흔히 알고 있는 반복문은 for, while 등이 있는데, 이러한 반복문으로 구현가능한 로직은 모두 재귀함수로도 가능하고 그 반대 역시 가능하다.

 

II. 종료조건

가 종료조건 필요성

종료조건이 없으면 무한 루프 및 Stack Overflow 발생

def rec()  ==> Stack(호출1) Stack(호출2) (아주 여러번) Stack(꽉참)
{     리턴주소
(stack overflow 오류)
 print("나는 재귀함수")     리턴주소
 rec()     리턴주소
}   리턴주소 리턴주소
 rec()  리턴주소 리턴주소 리턴주소

 

나. 종료조건

호출이 일어날때마다 재귀 케이스에서 인자 값이 감소

최종적으로 if 문의 조건을 만족시켜 기본 케이스 실행 후 종료

if(함수 호출 멈출 조건) : #기본 케이스

    마지막으로 실행할 명령

else: #재귀 케이스

    재귀함수 호출

 

III.  재귀알고리즘의 작성절차 및 효율성

가. 재귀알고리즘의 작성절차

작성절차 내용
Step1 -더 작은 문제로 표시할 수 있는지 시도(문제 크기를 하나씩 줄이는 방법, 반으로 줄이는 방법, 다른 여러 개의 작은 문제의 조합으로 표시하는 방법)
-문제 크기 파라미터 N을 확인
Step2 -문제를 직접 풀 수 있는 것이 어떤 경우인지 베이스 케이스 확인
Step3 -N이 줄어서 반드시 베이스 케이스를 만나는지 확인
-N이 양수인지 음수인지, 짝수인지 홀수인지, 또는 부동소수인지 정수인지 모든 경우에 대해 검증
Step4 -베이스 케이스와 베이스 케이스가 아닌 경우를 나누어서 코드 작성

 

나. 재귀 알고리즘의 효율성

-   공간적 비효율(저장공간)

-   시간적 비효율(저장, 복원에 걸리는 시간)

-   가능하다면 반복문으로 대치하는 것이 유리

 

 

 

[자료구조 목차]

 

개념

  • 선택 시 마다 그 순간 최적의 해를 선택하여 최종적인 해를 도출하는 알고리즘
  • 최적해를 구하는 목적으로 사용하는 근시안적인 알고리즘 기법

도출 해의 최적에 대한 보장은 불가

 

그리디 알고리즘의 특징

특징 설명
최적성의 원리 주어진 선택 시점마다 최상의 해를 선택
최적해 미보장 결론적인 해가 최적의 해라는 보장은 불가능
효율성 개선 동적 계획법 대비 효율성(수행시간) 개선

그리디 알고리즘 수행절차

No 수행 절차 수행 항목
문제 정의 - 문제 조건 확인
- 제약 사항 확인
해 선택
(Select Procedure)
- 부분 해 집합에 추가 다음 항목 선택
- 현재 상태 최적화 기준 만족 여부
적합성 확인
(Feasibility Check)
- 새로운 부분 해 집합 제약조건 여부
- 현재 집합이 해가 될 가능성 검사
해 검증
(Solution Check)
- 신규 구성 집합이 해인지 검사
- 문제 해가 아니면 단계로 반복
해 도출 - 최종 해 도출

그리디 알고리즘 적용조건

  • 탐욕적 선택 속성(Greedy Choice Property) : 앞의 선택이 이후의 선택에 영향을 주지 않음.
  • 최적 부분 구조(Optimal Substructure) : 문제에 대한 최종 해결 방법은 부분 문제에 대한 최적해로 구성.
  • 이러한 조건이 성립하지 않는 경우에는 탐욕 알고리즘은 최적해를 구하지 못함 
    -> 이러한 경우에도 탐욕 알고리즘은 근사 알고리즘으로 사용이 가능, 계산 속도 빨라 실용적 사용 가능.
  • Matroid 구조에서는 탐욕 알고리즘은 언제나 최적해 구할 수 있음
    * Matroid : 일차독립의 성질을 공리화하여 얻은 조합론적 구조
     매트로이드 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

+ Recent posts