IT용어위키



병합 알고리즘

병합 알고리즘(Merging Algorithm)은 두 개 이상의 정렬된 리스트를 하나의 정렬된 리스트로 합치는 알고리즘이다. 이 알고리즘은 정렬 알고리즘(예: 병합 정렬) 및 데이터 병합 과정에서 중요한 역할을 한다.

개요

병합 알고리즘은 주어진 정렬된 배열(또는 리스트)을 하나의 정렬된 배열로 합치는 과정에서 사용된다. 병합 알고리즘은 두 개의 정렬된 리스트를 비교하면서 작은 값을 차례로 선택하여 새로운 리스트를 생성하는 방식으로 동작한다.

아래는 {x1, x2}, {y1, y2, y3, y4}를 병합하는 과정을 트리로 나타낸 것이다.

병합 알고리즘 비교 트리.png

병합 알고리즘의 동작 방식

두 개의 정렬된 리스트 A와 B를 병합하여 새로운 정렬된 리스트 C를 만드는 과정을 설명하면 다음과 같다.

입력

A = [1, 3, 5, 7] B = [2, 4, 6, 8]

과정

  • A와 B의 첫 번째 원소를 비교하여 작은 값을 C에 추가.
    • A = [1, 3, 5, 7] B = [2, 4, 6, 8] C = [1]
  • 선택된 원소를 A 또는 B에서 제거하고, 다음 원소를 비교.
    • A = [3, 5, 7] B = [2, 4, 6, 8] C = [1]
    • A = [3, 5, 7] B = [4, 6, 8] C = [1, 2]
  • 이 과정을 반복하여 두 리스트 중 하나가 비게 될 때까지 수행.
  • 남아 있는 원소를 그대로 C에 추가.

출력

C = [1, 2, 3, 4, 5, 6, 7, 8]

병합 알고리즘의 구현

다음은 두 개의 정렬된 리스트를 병합하는 파이썬 코드이다.

def merge_sorted_lists(A, B):
    C = []
    i, j = 0, 0

    while i < len(A) and j < len(B):
        if A[i] < B[j]:
            C.append(A[i])
            i += 1
        else:
            C.append(B[j])
            j += 1

    C.extend(A[i:])
    C.extend(B[j:])
    
    return C

# 예제 실행
A = [1, 3, 5, 7]
B = [2, 4, 6, 8]
print(merge_sorted_lists(A, B))  # 출력: [1, 2, 3, 4, 5, 6, 7, 8]

시간 복잡도

병합 알고리즘은 각 리스트의 원소를 한 번씩 비교하면서 새로운 리스트를 생성하므로 O(n + m)의 시간 복잡도를 가진다.

  • n = 첫 번째 리스트의 길이
  • m = 두 번째 리스트의 길이

병합 알고리즘의 응용

  • 병합 정렬(Merge Sort)
    • 정렬을 위해 리스트를 분할 후 병합하는 과정에서 사용됨.
  • 외부 정렬(External Sorting)
    • 대용량 데이터를 정렬할 때 여러 개의 정렬된 블록을 병합하는 데 사용됨.
  • 데이터베이스 병합
    • 정렬된 데이터베이스 테이블을 효율적으로 병합할 때 사용됨.
  • 스트림 병합
    • 정렬된 데이터 스트림을 실시간으로 병합하는 데 사용됨.

같이 보기


  출처: IT위키(IT위키에서 최신 문서 보기)
  * 본 페이지는 공대위키에서 미러링된 페이지입니다. 일부 오류나 표현의 누락이 있을 수 있습니다. 원본 문서는 공대위키에서 확인하세요!