반응형
1. 머지 소트 트리(Merge Sort Tree)
머지 소트 트리(Merge Sort Tree)는 분할 정복을 활용하는 합병 정렬(Merge Sort)을 저장하는 자료구조 입니다.
2. 머지 소트 트리(Merge Sort Tree) 동작 원리
머지 소트 트리(Merge Sort Tree)는 각 노드에서 해당 노드에 포함된 모든 원소들을 정렬한 상태로 저장하는 트리입니다.
머지 소트 트리(Merge Sort Tree)는 아래와 같이 구성되어 있습니다.
1 2 3 4 5 6 7 8 | |||||||
1 2 5 6 | 3 4 7 8 | ||||||
1 5 | 2 6 | 3 7 | 4 8 | ||||
1 | 5 | 2 | 6 | 3 | 7 | 4 | 8 |
3. 머지 소트 트리(Merge Sort Tree) 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | void merge(int node, int s, int e) { int s_size = mergeSortTree[node * 2].size(); int e_size = mergeSortTree[node * 2 + 1].size(); int i = 0; int j = 0; while (1) { if (mergeSortTree[node * 2][i] < mergeSortTree[node * 2 + 1][j]) { mergeSortTree[node].push_back(mergeSortTree[node * 2][i++]); } else { mergeSortTree[node].push_back(mergeSortTree[node * 2 + 1][j++]); } if (i == s_size || j == e_size) { break; } } if (i == s_size) { for (j; j < e_size; j++) { mergeSortTree[node].push_back(mergeSortTree[node * 2 + 1][j]); } } else { for (i; i < s_size; i++) { mergeSortTree[node].push_back(mergeSortTree[node * 2][i]); } } } void makeTree(int node, int s, int e) { if (s == e) { mergeSortTree[node].push_back(arr[s]); return; } int m = (s + e) / 2; makeTree(node * 2, s, m); makeTree(node * 2 + 1, m + 1, e); merge(node, s, e); } | cs |
반응형
'자료구조' 카테고리의 다른 글
[ 자료구조 ] 트라이(Trie) (0) | 2023.06.24 |
---|---|
[ 자료구조 ] 비재귀 세그먼트 트리 (Segment Tree) (0) | 2023.05.04 |
[ 자료구조 ] 느리게 갱신되는 세그먼트 트리 (Lazy Propagation) (0) | 2023.01.16 |
[ 자료구조 ] 희소 배열(Sparse Table) (0) | 2022.08.07 |
[ 자료구조 ] 세그먼트 트리 (Segment Tree) (0) | 2022.07.02 |