병합 정렬

1. 병합 정렬이란?

- 분할 정복 ( DAC - Divide And Conquer ) 알고리즘 디자인 기법에 근거하여 만들어진 정렬 방법

* 분할정복이란? 복잡한 문제를 분할 하여 정복 후 결합하는 방법

∙ 1단계 분할(Divide) 해결이 용이한 단계까지 문제를 분할해 나간다.

∙ 2단계 정복(Conquer) 해결이 용이한 수준까지 분할된 문제를 해결한다.

∙ 3단계 결합(Combine) 분할해서 해결한 결과를 결합하여 마무리한다

2. 분할 방법


3. 재귀적 구현 (최소단위 까지 분할)

4. 병합을 위한 함수 정의



'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort]간단한 정렬 알고리즘  (0) 2016.06.26
자료구조 - [Tree]수식 트리  (0) 2016.05.16
자료구조 - [Tree]순회  (0) 2016.05.07
자료구조 - [Tree]이진 트리  (0) 2016.04.28
자료구조 - [Tree] 의 개요  (0) 2016.04.27

간단한 정렬 알고리즘


1. 버블 정렬

- 버블 정렬의 이해


- 소스 코드


- 성능 평가

* 비교 횟수 : 두 데이터간의 비교연산 횟수

* 이동 횟수 : 위치의 변경을 위한 데이터의 이동 횟수

-> 실제로 시간 복잡도에 대한 빅-오(O)를 결정하는 기준은 '비교 횟수'이다. 하지만, 이동 횟수에 관한 성능까지 체크 한다면 동일 한 빅-오 연산에 대한 세밀한 성능평가가 가능하다.


- 비교 횟수 : O(n^2)

- 이동 횟수

-> 정렬이 되어 있는 경우 : 한번도 이동이 발생 하지 않음

-> 역순으로 정렬 되어 있는 경우 : O(n^2) 

(실제론 비교 횟수의 3배 소요)


2. 선택 정렬

- 선택 정렬의 이해

- 소스 코드


- 성능 평가

- 비교 횟수 : O(n^2)

- 이동 횟수 : O(n) Worst Case와 Best Case관계 없이 동일

3. 삽입 정렬

- 삽입 정렬의 이해


- 소스 코드


- 성능 평가


- 비교 횟수 : O(n^2)

- 이동 횟수 : 

Worst Case -> O(n^2)

Best Case -> 한번도 발생 안함



'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort] 병합 정렬  (0) 2016.06.26
자료구조 - [Tree]수식 트리  (0) 2016.05.16
자료구조 - [Tree]순회  (0) 2016.05.07
자료구조 - [Tree]이진 트리  (0) 2016.04.28
자료구조 - [Tree] 의 개요  (0) 2016.04.27

수식 트리

1. 수식 트리의 이해

- 중위 표기법은 사람이 보기에는 좋으나 컴퓨터가 인식하기 어려운 표기법이다.

- 후위 표기법을 이용한 수식 트리를 이용하면 쉽게 수식 연산을 할 수 있다.

(중위 표기법 -> 후위 표기법 -> 수식 트리 순)

*후위 표기법 이란 7+4*2-1 -> 74+2*1- 처럼 연산자를 숫자 뒤에 표현하는 것을 말한다.

2. 수식 트리 구성 방법

- root노드는 연산자로 구성한다.

- 피연산자는 연산자 노드의 하단 부터 구성한다.

- 수식 트리를 구성하기 위해선 스택을 이용해야 된다. 

(이때 후위 연산자 표기법으로 반드시 변경해야 한다.)

1. 후위 표기법 순서대로 피연산자 노드를 스택에 Push한다.

2. 연산자 Node를 만나면 연산자 Node의 서브 Node로 스택의 들어있는 피연산자 Node를 오른쪽부터 연결시킨다.

3. 연결된 수식 트리를 다시 스택에 Push시킨다.

4. 이 후 다시 1번부터 같은 로직으로 진행한다.


2. 수식 트리 구현


'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort] 병합 정렬  (0) 2016.06.26
[Sort]간단한 정렬 알고리즘  (0) 2016.06.26
자료구조 - [Tree]순회  (0) 2016.05.07
자료구조 - [Tree]이진 트리  (0) 2016.04.28
자료구조 - [Tree] 의 개요  (0) 2016.04.27

이진 트리의 순회


1. 순회의 세 가지 방법

- 기준 : root node를 언제 방문 하는지

- 재귀적 형태로 구성하면 높이 상관없이 순회 가능


2. 순회의 재귀적 표현



- 1단계 : 왼쪽 서브 트리의 순회

- 2단계 : root node의 방문

- 3단계 : 오른쪽 서브 트리의 순회

※ VisitFuncPtr 함수 포인터를 사용하여 트리 구조를 이용한 원하는 행동을 할 수 있음

'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort] 병합 정렬  (0) 2016.06.26
[Sort]간단한 정렬 알고리즘  (0) 2016.06.26
자료구조 - [Tree]수식 트리  (0) 2016.05.16
자료구조 - [Tree]이진 트리  (0) 2016.04.28
자료구조 - [Tree] 의 개요  (0) 2016.04.27

이진 트리


1. 이진 트리의 조건

- root node를 중심으로 두 개의 sub tree로 나뉘어진다.

- 나누어진 두 sub tree도 모두 이진 트리이어야 한다.

※ 트리 그리고 이진 트리는 그 구조가 재귀적이다. 따라서 트리와 관련된 연산은 재귀적 사고와 구현을 할 필요가 있다.


2. 이진 트리와 공집합 노드

- 하나의 노드에 두 개의 노드가 달리는 형태의 트리는 모두 이진 트리이다

- 공집합(Empty set)도 이진 트리에서는 노드로 간주한다.

 -> 그러므로 형제 노드가 비어 있다고 해도 공집합으로 간주하여 이진 트리      가 성립 된다.


3. 이진 트리의 레벨과 높이

- root 노드 부터 0레벨로 시작하고, 아래로 갈수록 레벨이 증가한다.

- 레벨의 최대값과 트리의 높이는 같다.


3. 완전 트리와 포화 트리

- 완전 이진 트리는 위에서 아래로 왼쪽에서 오른쪽으로 채워진 트리를 의미한다.

- 따라서 포화 이진 트리는 동시에 완전 이진 트리이다.

- 하지만 와전 이진 트리는 포화 이진 트리가 될 수 없다.


4. 이진 트리 구현의 두 가지 방법

4_1 배열을 이용한 표현

노드에 번호를 부여하고 그 번호를 배열의 인덱스 값으로 활용

- 편의상 배열의 첫 번째 요소는 사용하지 않음

- 트리가 완성 된 이후부터 탐색이 자주 일어날 경우 효율적


4_2 연결리스트를 이용한 표현

- 트리의 구조와 리스트의 연결 구조가 일치한다.

- 구현과 관련된 직관적인 이해가 더 좋은 편


5. 이진 트리 구현 - 노드 구조체 정의


6. 이진 트리 구현 - 트리 기능관련 함수 정의


7. 이진 트리 구현 - 트리 동작



'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort] 병합 정렬  (0) 2016.06.26
[Sort]간단한 정렬 알고리즘  (0) 2016.06.26
자료구조 - [Tree]수식 트리  (0) 2016.05.16
자료구조 - [Tree]순회  (0) 2016.05.07
자료구조 - [Tree] 의 개요  (0) 2016.04.27

Tree란?

"개층적 관계(Hierarchical Relationship)를 표현하는 자료구조"


트리의 예


트리의 용어 정리

- 노드(node) : 트리의 구성요소에 해당하는 'A, B, C, D, E, F'와 같은 요소

- 간선(edge) : 노드와 노드를 연결하는 연결선

- 루트 노드(root node) : 트리 구조에서 최상위에 존재하는 'A'와 같은 노드

- 단말 노드(terminal node) : 아래로 또 다른 노드가 연결되어 있지 않은 'E, F, C, D'와 같은 노드

- 내부 노드(internal node) : 단말 노드를 제외한 모든 노드로 'A, B'와 같은 노드


트리의 노드간 관계

- 노드 A는 노드 B, C, D의 부모 노드(parent node)이다.

- 노드 B, C, D는 노드 A의 자식 노드(child node)이다.

- 노드 B, C, D는 부모 노드가 같아, 서로가 서로에게 형제 노드(sibling node)이다.


서브 트리의 이해

서브 트리 역시 서브 트리로 이뤄져 있으며, 그 서브 트리 역시 또 다른 서브 트리로 이뤄져 있다. 

 -> 특징 : 재귀적!

- 하나의 트리를 구성하는 왼쪽과 오른쪽의 작은 트리를 가리켜 서브 트리라 한다.




'프로그래밍 > 자료구조' 카테고리의 다른 글

[Sort] 병합 정렬  (0) 2016.06.26
[Sort]간단한 정렬 알고리즘  (0) 2016.06.26
자료구조 - [Tree]수식 트리  (0) 2016.05.16
자료구조 - [Tree]순회  (0) 2016.05.07
자료구조 - [Tree]이진 트리  (0) 2016.04.28

+ Recent posts