분할정복 알고리즘 예제

컴퓨터 과학에서 분할 및 정복은 다중 분기 재귀에 기반한 알고리즘 설계 패러다임입니다. 분할 및 정복 알고리즘은 문제를 동일한 또는 관련 형식의 두 개 이상의 하위 문제로 재귀적으로 분해하여 직접 해결할 수 있을 정도로 단순해질 때까지 작동합니다. 그런 다음 하위 문제에 대한 솔루션을 결합하여 원래 문제에 대한 해결책을 제공합니다. 하위 문제가 원래 크기의 약 절반인 감소 및 정복 알고리즘인 이진 검색은 긴 역사를 가지고 있습니다. 컴퓨터의 알고리즘에 대한 명확한 설명은 존 Mauchly에 의해 기사에서 1946 년에 나타났지만, 적어도 기원전 200 년 바발로니아까지 거슬러 올라가는 날짜를 검색하기 위해 정렬 된 항목 목록을 사용하는 아이디어. [4] 또 다른 고대의 감소 및 정복 알고리즘은 유클리드 알고리즘으로, 수세기 전BC로 거슬러 올라가는 숫자를 더 작고 더 작은 동등한 하위 문제로 줄임으로써 두 숫자의 가장 큰 공통 제수를 계산합니다. 전문가 의 혼합물 : 단일 게이팅 네트워크는 전문가의 개별 응답의 비선형 기능을 나타내므로 분할 및 정복 알고리즘은 한 번만 적용됩니다. 분할 및 정복 알고리즘은 스택, 큐 또는 우선 순위 큐와 같은 일부 명시적 데이터 구조에 부분 하위 문제를 저장하는 재귀가 아닌 프로그램에서 구현할 수도 있습니다. 이 방법을 사용하면 다음에 해결해야 할 하위 문제(예: 너비 우선 재귀 및 함수 최적화를 위한 분기 및 바인딩 된 메서드)에서 중요한 기능을 선택할 때 더 많은 자유를 누릴 수 있습니다. 이 방법은 재귀 프로시저에 대한 지원을 제공하지 않는 프로그래밍 언어의 표준 솔루션이기도 합니다.

대부분의 재귀 알고리즘은 반복 모델로 표현될 수 있으며, 일반적으로 GPU의 기본 타일 기반 분해 모델에 더 잘 맞기 때문에 GPU에 매핑하기가 다소 쉽습니다. 간단히 말해서, 분할 및 정복 알고리즘의 실행 시간은 두 가지 역습 세력에 의해 결정됩니다: 더 큰 문제를 작은 문제로 전환하여 얻을 수있는 이점, 그리고 더 많은 문제를 해결하기 위해 지불하는 가격. 알고리즘의 세부 사항에 따라 문제를 두 개 이상의 조각으로 분할하기 위해 지불 하거나 지불하지 않을 수 있습니다. 각 단계에서 동일한 수의 하위 문제로 분할하고 각 단계에서 결과를 결합하는 시간 복잡성을 알고 있는 경우 마스터 정리는 전체 알고리즘의 시간 복잡성을 알려줍니다.

분할정복 알고리즘 예제