알고리즘 설계와 관련하여 종종 다음 기술을 사용합니다.
- 다이나믹 프로그래밍
- 욕심 전략
- 나누고 정복
처음 두 가지 방법에는 잘 알려진 이론적 기초, 즉 Bellman Optimity Principle과 matroid (regre. greedoid) 이론이 있지만 D & C 기반 알고리즘의 일반적인 프레임 워크를 찾을 수는 없습니다.
먼저, 나는 우리 (또는 오히려 교수)가 "알고리즘 스켈레톤 (algorithmic skeleton)"이라 불리는 기능적 프로그래밍 클래스에서 소개 한 것들을 알고있다. 이의 예로서, 우리는 다음과 같은 D & C 알고리즘에 대한 골격을 제공했습니다.
정의 : 비어 있지 않은 세트로한다. 우리의 요소 호출 솔루션 과의 요소 (즉,의 서브 세트 )라고도 문제 . 그런 다음 D & C-skeleton 은 4 개의 튜플 .
- 는 일련의 문제에 대한 술어이며 문제 는 기본 iff P β ( p ) 가 있다고 말합니다 .
- 는각 기본 문제에 솔루션을 할당하는 매핑 P β → S 입니다.
- 는각 문제를 일련의 하위 문제로 나누는매핑 P → P ( P ) 입니다.
- 는하위 문제의 솔루션 ( "피벗 문제"에 따라 다름)을 결합하여 솔루션을 생성하는매핑 P × P ( S ) → S 입니다.
그런 다음 주어진 골격 및 문제 p 에 대해 다음 일반 함수 f s : P → S 는 공식적인 의미에서 p 에 대한 솔루션을 계산합니다 .
두번째 라인에서 우리가 사용 표기 여기서 집합에 대한 X 매핑의 공역의 F .
그러나 우리는 이런 식으로 공식화 할 수있는 문제의 기본 "구조적"속성을 더 이상 조사하지 않았습니다 (내가 말했듯이 함수형 프로그래밍 클래스였으며 이것은 단지 작은 예일뿐입니다). 불행히도, 나는이 접근법에 대한 추가 참조를 찾을 수 없었습니다. 따라서 위의 정의가 표준이라고 생각하지 않습니다. 누군가 내가 위에서 언급 한 것을 인식하면 관련 기사에 대해 기쁠 것입니다.
둘째, 탐욕스러운 전략의 경우 솔루션이 가중 마트 로이드를 구성하는 경우에만 일반적인 탐욕 알고리즘에 의해 문제가 올바르게 해결된다는 유명한 결과를 얻었습니다. D & C 알고리즘에 대해 비슷한 결과가 있습니까?