활동 선택 문제
Activity selection problem이 글은 검증을 위해 인용구가 추가로 필요하다. – · · 책 · · (2021년 1월) (이 를 |
활동 선택 문제는 각각의 시작 시간과 종료 시간(fii)으로 표시된 일련의 활동을 주어진 주어진 주어진 주어진 시간 내에 수행할 충돌하지 않는 활동의 선택에 관한 결합 최적화 문제다.문제는 한 사람이 한 번에 한 가지 활동만 할 수 있다고 가정해 한 사람 또는 기계가 수행할 수 있는 최대 활동 횟수를 선택하는 것이다.활동 선택 문제는 또한 ISMP(Interval Scheduling maximization problemization problemization probleming probleming probleming probleming problem, ISMP)라고도
이 문제의 고전적인 적용은 여러 경쟁 이벤트를 위한 방을 예약하는 데 있으며, 각 이벤트는 고유한 시간 요구사항(시작과 종료 시간)을 가지고 있으며, 운영 연구의 틀 안에서 더 많은 것이 발생한다.
형식 정의
각 활동이 시작 시간 s와i 종료 시간i f로 표현되는 n개의 활동이 있다고 가정한다.i와 j 두 가지 활동은 si ≥ fj 또는 sj ≥ f일i 경우 충돌하지 않는다고 한다.활동 선택 문제는 비충돌 활동의 최대 해결책 집합(S)을 찾는 데 있거나, 보다 정확하게는 다중 최대 해결책의 크기가 동일한 경우 S' > S와 같은 해결책 집합이 없어야 한다.
최적용액
활동 선택 문제는 탐욕스러운 알고리즘을 사용하여 해결책을 찾는 것이 항상 최적의 해결책이 될 것이라는 점에서 눈에 띈다.알고리즘의 반복 버전에 대한 유사 코드 스케치와 그 결과의 최적성에 대한 증거가 아래에 포함되어 있다.
알고리즘.
탐욕스러운-반복적-활동-선택기(A, s, f): 정렬 A 에 의해 마무리를 짓다 시대 저장된 에 f S = {A[1]} k = 1 n = A.길이 을 위해 i = 2 로 n: 만일 s[i] ≥ f[k]: S = S U {A[i]} k = i 돌아오다 S
설명
라인 1: 이 알고리즘을 탐욕스러운-반복적인-활동-선택자라고 하는데, 처음에는 탐욕스러운 알고리즘이고, 그 다음에는 반복적이기 때문이다.이 탐욕스러운 알고리즘의 재귀 버전도 있다.
- 은(는) 활동을 포함하는 배열이다.
- 은(는) 의 활동 시작 시간을 포함하는 배열이다
- 은(는) 의 활동 종료 시간을 포함하는 배열이다
이러한 배열은 1에서 해당 배열의 길이까지의 색인화에 유의하십시오.
라인 3: f 에 저장된 결승 시간을 사용하여 활동 의 배열끝 시간 증가 순서로 정렬이 작업은 병합 정렬, 힙 정렬 또는 빠른 정렬 알고리즘을 사용하여 ) 번으로 수행할 수 있다.
라인 4 S {\을(를) 생성하여 선택한 활동을 저장하고, 종료 시간이 가장 빠른 A[ 으로 초기화한다.
라인 5: 마지막으로 선택한 활동의 인덱스를 추적하는 k 을(를) 생성한다.
라인 9: 해당 어레이 의 두 번째 요소부터 마지막 까지의 반복을 시작한다
Lines 10,11: If the start time of the activity () is greater or equal to the finish time of the last selected activity (), then is co세트 에서 선택한 활동에 적합하므로 에 추가할 수 있다
12호선:마지막으로 선택한 활동의 색인이 방금 추가된 활동 [ 로 업데이트된다
최적성 증명
={ ,, 을(를) 결승 시간별로 정렬된 일련의 활동이 되도록 한다. 이 (가) 피니시 시간으로 정렬된 최적의 솔루션이며, A의 첫 번째 활동 지수가 ≠ 1 1 즉 이 최적의 솔루션은 욕심 많은 선택으로 시작하지 않는다고 가정해 보십시오.탐욕스러운 선택(활동 1)으로 시작하는 = { } 이(가) 또 다른 최적의 해결책임을 보여주겠다. 와 A에서의 활동은 정의상 분리되므로 B에서의 활동도 해체된다.B는 A와 같은 수의 활동을 하기 때문에, 즉 = A = B B도 최적이다.
일단 탐욕스러운 선택이 이루어지면 문제는 하위 문제에 대한 최적의 해결책을 찾는 것으로 줄어든다.If A is an optimal solution to the original problem S containing the greedy choice, then is an optimal solution to the activity-selection problem .
왜? 만약 그렇지 않다면, S에 대한 탐욕스러운 선택이 포함된 A than보다 더 많은 활동이 있는 S′에 대한 해결책 B′을 선택하라.그러면 B에 1을 더하면 A보다 더 많은 활동으로 S에 실현 가능한 해결책 B를 산출하게 되어 최적성과 모순된다.
가중활동선택문제
활동 선택 문제의 일반화된 버전은 총 가중치가 극대화되도록 최적의 비과잉 활동 세트를 선택하는 것을 포함한다.가중치 없는 버전과 달리 가중치 있는 활동 선택 문제에 대한 탐욕스러운 해결책은 없다.그러나 동적 프로그래밍 솔루션은 다음과 같은 접근방식을 사용하여 쉽게 구성할 수 있다.[1]
활동 k를 포함하는 최적의 솔루션을 고려하십시오.우리는 지금 k의 왼쪽과 오른쪽에서 겹치지 않는 활동을 하고 있다.우리는 최적의 하부 구조 때문에 이 두 세트에 대한 해결책을 재귀적으로 찾을 수 있다.k를 모르기 때문에 각각의 활동을 시도해 볼 수 있다.이 접근방식은 3 ) 솔루션으로 이어진다.이는(, j) 의 각 활동 집합에 대해 우리가 ( ,) 에 대한 솔루션을 알고 있었다면 최적의 솔루션을 찾을 수 있다는 점을 고려할 때 더 최적화될 수 있다 여기서 t는 (, ) 와 마지막 비overlapping sty) 구간이다 이 값은 ). 솔루션.이는 모든 범위, ) 을 (를) 고려할 필요가 없고 (j ){\1,j만을 고려할 필요가 있다는 사실을 고려할 때 더욱 최적화될 수 있다 따라서 다음 알고리즘은 ( n) O 솔루션을 산출한다.
가중치-활동-선택(S): // S = 활동 목록 분류하다 S 에 의해 마무리를 짓다 시간 선택하다[0] = 0 // opt[j]는 S[1,2,j]에 대한 최적 솔루션(선택한 활동의 가중치 합계)을 나타낸다. 을 위해 i = 1 로 n: t = 이진의 샅샅이 뒤지다 로 찾아내다 활동 와 함께 마무리를 짓다 시간 <= 출발하다 시간 을 위해 i // 이러한 활동이 두 개 이상 있는 경우 마지막 마감 시간이 있는 활동을 선택하십시오. 선택하다[i] = 맥스.(선택하다[i-1], 선택하다[t] + w(i)) 돌아오다 선택하다[n]