[SWEA] 분할 정복(Divide and Conquer)

2022. 3. 13. 22:43·Algorithm/SW Expert Academy
본 글은 [SW Expert Academy]의 파이썬 SW문제 해결 응용-구현2 분할 정복 강의를 보고 정리한 글입니다

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYFsQq11kDFAVT 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

분할 정복(Divide and Conquer)

목차

01 분할 정복 기법

02 병합 정렬

03 퀵 정렬

04 이진 검색

05 분할 정복 사례

 

 

01 분할 정복 기법


분할 정복(DnQ)이란?

탑다운 접근(Top-down approac)으로, 문제의 크기가 n인 경우 분할을 통해 크기가 n/2인 부분문제로 나누고 각각의 해를 구해 정복한 후 전체 문제의 해를 구하는 통합과정을 거친다

분할(Divide) 정복(Conquer) 통합(Combine)
해결할 문제를 여러 개의 작은 부분 문제들로 분할 나눈 작은 문제를 각각 해결 필요 시 해결된 해답을 모음

 

예시: 거듭제곱

1) 반복(Iterative) 알고리즘: $O(n)$

C의 거듭제곱 = 1에 거듭제곱 값만큼 C를 곱하는 방법으로 연산 수행

def IterativE_Power(C,n): # return C power of n
	result = 1
    for _ in range(n):
    	result *= C
    return result

2) 분할 정복 기반의 알고리즘: $O(logn)$

거듭제곱을 반씩 나누어서 곱해 나가는 방법으로 풀이

def Recursive_Power(C,n):
	if n == 1:
    	return C
    elif n % 2 == 0: # even
    	y = Recursive_Power(C, n/2)
        return y*y
    else: # odd
    	y = Recursive_Pwer(C,(n-1)/2)
        return y*y*C

 

 

02-03 병합정렬&퀵정렬


1) 병합정렬(Merge sort): $O(nlogn)$

자세한 내용은 아래 게시글을 참고해주세요

https://codingsmu.tistory.com/133?category=871719 

 

파이썬으로 구현하는 병합정렬(Merge Sort)

Concept 병합정렬은 분할 정복(Divide and Conquer) 기법과 재귀 알고리즘을 이용한 정렬 알고리즘으로, 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의

codingsmu.tistory.com

 

2) 퀵 정렬(Quick sort): $O(nlogn)$

자세한 내용은 아래 게시글을 참고해주세요

https://codingsmu.tistory.com/134

 

파이썬으로 구현하는 퀵 정렬(Qucik Sort)

Concept 병합 정렬(Merge Sort)과 마찬가지로, 퀵 정렬은 분할 정복(Divide and Conquer) 기법과 재귀 알고리즘을 이용한 정렬 알고리즘으로, 시간복잡도는 $O(nlogn)$이다 하나의 리스트에서 피봇(pivot)이라고

codingsmu.tistory.com

 

04 이진 검색


이진 검색(Binary Search)이란?

정렬된 리스트에서 특정 값을 찾아내는 방법으로, 가운데에 있는 항목의 키 값과 비교하여 해당 값보다 작은 경우 왼쪽에서 이진 검색을, 큰 경우에는 오른쪽에서 이진 검색을, 같은 경우 해당 값을 반환하게 된다.

 

구현 코드

1) 반복(Iterative) 구조:

def binarySearch(a, key):
    s, e = 0, len(a)-1
    
    while s <= e:
    	mid = s + (e-s) // 2
        if key == a[mid]:
            return mid
        elif key < a[mid]:
            e = mid - 1
        else:
            s = mid + 1
    return -1

2) 재귀(Recursive) 구조:

def binarySearch(a, low, high, key):
	if low > high:
    	return -1
    else:
    	mid = (low+high) // 2
        if key == a[mid]:
        	return mide
        elif key < a[mid]:
        	return binarySearch(a, low, mid-1, key)
        else:
        	return binarySearch(a, mid+1, high, key)

 

05 분할 정복 사례


  개념 요약 활용 예시
병합 정렬 외부 정렬의 기본이 되는 정렬 알고리즘 멀티 코어 CPU나 다수 프로세서에서 정렬 알고리즘 병렬화에 활용
퀵 정렬 매우 큰 입력 데이터에 대해서 좋은 성능을 보이는 알고리즘 생물 정보 공학에서 특정 유전자를 효율적으로 찾는데 접미어 배열과 함께 사용
최근접 점의 쌍 문제 2차원 평면상의 n개의 점이 입력으로 주어질 때, 거리가 가장 가까운 한 쌍의 점을 찾는 문제 컴퓨터 그래픽스, 컴퓨터 비전, 지리 정보 시스템, 항공 트래픽 제어, 마케팅 등의 분야

 

반응형

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[SWEA] 그래프의 최소 비용 문제  (1) 2022.05.16
[SWEA] 완전 검색(Brute-force search)  (0) 2022.02.26
[SWEA] 그래프의 기본과 탐색  (0) 2020.09.15
[SWEA] 탐욕 알고리즘(Greedy Algorithm)  (0) 2020.09.08
[SWEA] 동적 계획법(Dynamic Programming)  (0) 2020.08.18
'Algorithm/SW Expert Academy' 카테고리의 다른 글
  • [SWEA] 그래프의 최소 비용 문제
  • [SWEA] 완전 검색(Brute-force search)
  • [SWEA] 그래프의 기본과 탐색
  • [SWEA] 탐욕 알고리즘(Greedy Algorithm)
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    f1-score
    경사하강법
    네트워크플로우
    machinelearning
    MaximumFlow
    networkflow
    ComputerVision
    컴퓨터비전
    패턴인식
    DIP
    알고리즘
    지도학습
    NLP
    파이썬 클린코드
    군집화
    비용함수
    DigitalImageProcessing
    언어모델
    선형회귀
    최대유량
    디지털이미지처리
    비지도학습
    결정경계
    SIFT
    ML
    LM
    기계학습
    손실함수
    에지검출
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[SWEA] 분할 정복(Divide and Conquer)

티스토리툴바