나누기와 정복의 이론적 기초


22

알고리즘 설계와 관련하여 종종 다음 기술을 사용합니다.

  • 다이나믹 프로그래밍
  • 욕심 전략
  • 나누고 정복

처음 두 가지 방법에는 잘 알려진 이론적 기초, 즉 Bellman Optimity Principle과 matroid (regre. greedoid) 이론이 있지만 D & C 기반 알고리즘의 일반적인 프레임 워크를 찾을 수는 없습니다.

먼저, 나는 우리 (또는 오히려 교수)가 "알고리즘 스켈레톤 (algorithmic skeleton)"이라 불리는 기능적 프로그래밍 클래스에서 소개 한 것들을 알고있다. 이의 예로서, 우리는 다음과 같은 D & C 알고리즘에 대한 골격을 제공했습니다.

정의 : 비어 있지 않은 세트로한다. 우리의 요소 호출 솔루션 과의 요소 (즉,의 서브 세트 )라고도 문제 . 그런 다음 D & C-skeleton 은 4 개의 튜플 .A,SS P:=P(A)A(Pβ,β,D,C)

  • Pβ 는 일련의 문제에 대한 술어이며 문제 기본 iff P β ( p ) 가 있다고 말합니다 .pPβ(p)
  • 는각 기본 문제에 솔루션을 할당하는 매핑 P βS 입니다.βPβS
  • 는각 문제를 일련의 하위 문제로 나누는매핑 P P ( P ) 입니다.DPP(P)
  • 는하위 문제의 솔루션 ( "피벗 문제"에 따라 다름)을 결합하여 솔루션을 생성하는매핑 P × P ( S ) S 입니다.CP×P(S)S

그런 다음 주어진 골격 및 문제 p 에 대해 다음 일반 함수 f s : P S 는 공식적인 의미에서 p 에 대한 솔루션을 계산합니다 .s=(Pβ,β,D,C)pfs:PSp

fs(p)={β(p)if p is basicC(p,f(D(p)))otherwise

두번째 라인에서 우리가 사용 표기 여기서 집합에 대한 X 매핑의 공역의 F .f(X):={f(x):xX}X에프

그러나 우리는 이런 식으로 공식화 할 수있는 문제의 기본 "구조적"속성을 더 이상 조사하지 않았습니다 (내가 말했듯이 함수형 프로그래밍 클래스였으며 이것은 단지 작은 예일뿐입니다). 불행히도, 나는이 접근법에 대한 추가 참조를 찾을 수 없었습니다. 따라서 위의 정의가 표준이라고 생각하지 않습니다. 누군가 내가 위에서 언급 한 것을 인식하면 관련 기사에 대해 기쁠 것입니다.

둘째, 탐욕스러운 전략의 경우 솔루션이 가중 마트 로이드를 구성하는 경우에만 일반적인 탐욕 알고리즘에 의해 문제가 올바르게 해결된다는 유명한 결과를 얻었습니다. D & C 알고리즘에 대해 비슷한 결과가 있습니까?

답변:


5

복잡성에 대한 고려는 물론 의사 모의 ( pseudo-morphisms) (즉, 사전 및 사후 계산이 수행 된 거의 모든 형태의 기능)를 사용하여 피험자의 공식 치료 (문제에서 제안 된 모델과 유사 ) 이러한 알고리즘의 분석 및 병렬 구현은 다음과 같습니다.

Zhijing G. Mou와 Paul Hudak의 분할 및 정복과 병렬 처리대한 대수 모델 ( Supercomputing , 2 권, 3 호, 1988 년 11 월 257-278 페이지)


1

Bellman의 Divide and Conquer 알고리즘에 대한 최적의 원리와 같은 구체적인 내용은 알지 못합니다. 그러나 나눗셈과 정복의 기초 는 문제의 입력에 대한 재귀 적 (또는 귀납적) 정의 이며 문제에 대한 솔루션을 더 큰 솔루션으로 결합하는 수단 인 것처럼 보입니다 . 여기서 중요한 통찰력은 문제의 입력을 재귀 적으로 생각하고이를 재귀적인 D & C 알고리즘에 활용하는 것입니다.

mergesort를 예로 들어 보겠습니다. 입력, 요소 의 배열로 시작합시다 . 다음과 같이 배열의 구조를 재귀 적으로 정의 할 수 있습니다 .n

  • 들면 , 어레이는 비어있다.n=0
  • 들면 , 어레이는 단일 소자이며n=1
  • 들면 , 어레이 사이즈의 배열을 연결 한 N은n>1(왼쪽) 및 크기nn2(오른쪽)n2

그런 다음 정렬 을이 구조에 매핑하여 mergesort 알고리즘에 접근합니다 . 기본 사례 는 간단하게 정렬됩니다. 재귀 적 케이스에서 시작 재귀 데이터 재귀이다 정렬 , 즉, 좌측우측 . 우리는 본질적으로 대체 찾을 합칠 수 있는 끝, 병합 . 기본적으로 데이터의 재귀 구조를 취하여 재귀 솔루션에 매핑했습니다. n1

이것이 반드시 D & C 알고리즘에서 기대하는 결과로 이어지는 것은 아니라는 점에 유의해야합니다. 다음과 같이 배열 구조를 정의 할 수 있습니다.

  • 들면 , 어레이는 비어있다.n=0
  • 들면 , 어레이 크기의 어레이에 연결된 하나의 원소이며 , N - 1 . n>0n1

우리가 mergesort에 사용한 것과 동일한 전략에 따라 재귀 삽입 정렬이 발생합니다. 따라서 일반적으로 여러 재귀 요소를 포함하는 재귀 정의를 개발합니다. 즉, 데이터 세트를 절반 또는 3으로 줄입니다.

이제 D & C 알고리즘 분석을위한 마스터 정리 (Master Theorem) 가 있으며 이는 특정 전체 런타임 효율성을 가진 D & C 알고리즘의 하위 구성 요소에 대한 효율성 기대치를 보여줍니다.


귀하가 제공 한 예는 제가 제 질문에 제시 한 일반적인 맥락에 맞습니다 (실제로 구체적인 적용을하는 것이 도움이 될 수 있습니다). 그러나 내 질문은 이 패턴에 맞는 알고리즘으로 해결할 수있는 문제에 대한 기준 (BOP 또는 matroid 구조) 이 있는지 여부 입니다.
Cornelius Brand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.