계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

Algorithm/SW Expert Academy

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

2022. 3. 13. 22:43
반응형
본 글은 [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

    티스토리툴바