Presentation is loading. Please wait.

Presentation is loading. Please wait.

Approaches to Problem Solving greedy algorithms dynamic programming backtracking divide-and-conquer.

Similar presentations


Presentation on theme: "Approaches to Problem Solving greedy algorithms dynamic programming backtracking divide-and-conquer."— Presentation transcript:

1 Approaches to Problem Solving greedy algorithms dynamic programming backtracking divide-and-conquer

2 Interval Scheduling Input: Output: Objective: a set of time-intervals a subset of non-overlapping intervals maximize # of selected intervals

3 Interval Scheduling Input: Output: Objective: a set of time-intervals a subset of non-overlapping intervals maximize # of selected intervals Idea #1: Select interval that starts earliest, remove overlapping intervals and recurse.

4 Interval Scheduling Input: Output: Objective: a set of time-intervals a subset of non-overlapping intervals maximize # of selected intervals Idea #2: Select the shortest interval, remove overlapping intervals and recurse.

5 Interval Scheduling Input: Output: Objective: a set of time-intervals a subset of non-overlapping intervals maximize # of selected intervals Idea #3: Select the interval with the fewest conflicts, remove overlapping intervals and recurse.

6 Interval Scheduling Input: Output: Objective: a set of time-intervals a subset of non-overlapping intervals maximize # of selected intervals Idea #4: Select the earliest finishing interval, remove overlapping intervals and recurse.

7 Interval Scheduling Idea #4: Select the earliest finishing interval, remove overlapping intervals and recurse. INTERVAL-SCHEDULING( (s 0,f 0 ), …, (s n-1,f n-1 ) ) 1. Remain = {0,…,n-1} 2. Selected = {} 3. while ( |Remain| > 0 ) { 4. k 2 Remain is such that f k = min i 2 Remain f i 5. Selected = Selected [ {k} 6. Remain = Remain – {k} 7. for every i in Remain { 8. if (s i < f k ) then Remain = Remain – {i} 9. } 10. } 11. return Selected

8 Interval Scheduling Running time: INTERVAL-SCHEDULING( (s 0,f 0 ), …, (s n-1,f n-1 ) ) 1. Remain = {0,…,n-1} 2. Selected = {} 3. while ( |Remain| > 0 ) { 4. k 2 Remain is such that f k = min i 2 Remain f i 5. Selected = Selected [ {k} 6. Remain = Remain – {k} 7. for every i in Remain { 8. if (s i < f k ) then Remain = Remain – {i} 9. } 10. } 11. return Selected

9 Interval Scheduling Thm: Algorithm works. INTERVAL-SCHEDULING( (s 0,f 0 ), …, (s n-1,f n-1 ) ) 1. Remain = {0,…,n-1} 2. Selected = {} 3. while ( |Remain| > 0 ) { 4. k 2 Remain is such that f k = min i 2 Remain f i 5. Selected = Selected [ {k} 6. Remain = Remain – {k} 7. for every i in Remain { 8. if (s i < f k ) then Remain = Remain – {i} 9. } 10. } 11. return Selected

10 Interval Scheduling Which type of algorithm did we use ? Thm: Algorithm works.

11 Schedule All Intervals Input: Output: Objective: a set of time-intervals a partition of the intervals, each part of the partition consists of non-overlapping intervals minimize the number of parts in the partition

12 Input: Output: Objective: a set of time-intervals a partition of the intervals, each part of the partition consists of non-overlapping intervals minimize the number of parts in the partition max (over time t) number of intervals that are “active” at time t Def: depth = Schedule All Intervals

13 max (over time t) number of intervals that are “active” at time t Def: depth = Observation 1: Need at least depth parts (labels). SCHEDULE-ALL_INTERVALS ( (s 0,f 0 ), …, (s n-1,f n-1 ) ) 1. Sort intervals by their starting time 2. for j=0 to n-1 do 3. Consider = {1,…,depth} 4. for every i<j that overlaps with j do 5. Consider = Consider – { Label[i] } 6. if |Consider| > 0 then 7. Label[j] = anything from Consider 8. else 9. Label[j] = nothing 10.return Label[] Schedule All Intervals

14 Thm: Every interval gets a real label. Schedule All Intervals Corollary: Algo returns an optimal solution (i.e. it works!). Running time: SCHEDULE-ALL_INTERVALS ( (s 0,f 0 ), …, (s n-1,f n-1 ) ) 1. Sort intervals by their starting time 2. for j=0 to n-1 do 3. Consider = {1,…,depth} 4. for every i<j that overlaps with j do 5. Consider = Consider – { Label[i] } 6. if |Consider| > 0 then 7. Label[j] = anything from Consider 8. else 9. Label[j] = nothing 10.return Label[]

15 Input: Output: Objective: a set of time-intervals, each interval has a cost a subset of non-overlapping intervals maximize the sum of the costs in the subset Weighted Interval Scheduling 10 3 5 1 4 2 6

16 Input: Output: Objective: a set of time-intervals, each interval has a cost a subset of non-overlapping intervals maximize the sum of the costs in the subset Weighted Interval Scheduling WEIGHTED-SCHED-ATTEMPT((s 0,f 0,c 0 ),…,(s n-1,f n-1,c n-1 )) 1. sort intervals by their finishing time 2. return WEIGHTED-SCHEDULING-RECURSIVE (n-1) WEIGHTED-SCHEDULING-RECURSIVE (j) 1. if (j<0) then RETURN 0 2. k=j 3. while (interval k and j overlap) do k-- 4. return max(c j + WEIGHTED-SCHEDULING-RECURSIVE(k), WEIGHTED-SCHEDULING-RECURSIVE(j-1))

17 Weighted Interval Scheduling Does the algorithm below work ? WEIGHTED-SCHED-ATTEMPT((s 0,f 0,c 0 ),…,(s n-1,f n-1,c n-1 )) 1. sort intervals by their finishing time 2. return WEIGHTED-SCHEDULING-RECURSIVE (n-1) WEIGHTED-SCHEDULING-RECURSIVE (j) 1. if (j<0) then RETURN 0 2. k=j 3. while (interval k and j overlap) do k-- 4. return max(c j + WEIGHTED-SCHEDULING-RECURSIVE(k), WEIGHTED-SCHEDULING-RECURSIVE(j-1))

18 Weighted Interval Scheduling Dynamic programming ! I.e. memorize the solution for j WEIGHTED-SCHED-ATTEMPT((s 0,f 0,c 0 ),…,(s n-1,f n-1,c n-1 )) 1. sort intervals by their finishing time 2. return WEIGHTED-SCHEDULING-RECURSIVE (n-1) WEIGHTED-SCHEDULING-RECURSIVE (j) 1. if (j<0) then RETURN 0 2. k=j 3. while (interval k and j overlap) do k-- 4. return max(c j + WEIGHTED-SCHEDULING-RECURSIVE(k), WEIGHTED-SCHEDULING-RECURSIVE(j-1))

19 Weighted Interval Scheduling Heart of the solution: S[ j ] = max cost of a set of non-overlapping intervals selected from the first j intervals Another part of the heart: how to compute S[j] ? Finally, what do we return ?

20 Weighted Interval Scheduling WEIGHTED-SCHED ((s 0,f 0,c 0 ), …, (s n-1,f n-1,c n-1 )) 1. Sort intervals by their finishing time 2. Define S[-1] = 0 3. for j=0 to n-1 do 4. k = j 5. while (intervals k and j overlap) do k-- 6. S[j] = max( S[j-1], c j + S[k] ) 7. return S[n-1] S[ j ] = max cost of a set of non-overlapping intervals selected from the first j intervals Heart of the solution:

21 Weighted Interval Scheduling WEIGHTED-SCHED ((s 0,f 0,c 0 ), …, (s n-1,f n-1,c n-1 )) 1. Sort intervals by their finishing time 2. Define S[-1] = 0 3. for j=0 to n-1 do 4. k = j 5. while (intervals k and j overlap) do k-- 6. S[j] = max( S[j-1], c j + S[k] ) 7. 8. 9. 10. 11. RETURN S[n-1] Reconstructing the solution:

22 Longest Increasing Subsequence Input: Output: Objective: a sequence of numbers an increasing subsequence maximize length of the subsequence Example:2 3 1 7 4 6 9 5

23 Longest Increasing Subsequence Input: Output: Objective: a sequence of numbers an increasing subsequence maximize length of the subsequence Heart of the solution:

24 Longest Increasing Subsequence Input: Output: Objective: a sequence of numbers an increasing subsequence maximize length of the subsequence Heart of the solution: S[j] =the maximum length of an increasing subsequence of the first j numbers ending with the j-th number

25 Longest Increasing Subsequence Input: Output: Objective: a sequence of numbers a 1, a 2, …, a n an increasing subsequence maximize length of the subsequence Heart of the solution: S[j] = S[j] = 1 + maximum S[k] where k < j and a k < a j the maximum length of an increasing subsequence of the first j numbers ending with the j-th number What to return ?

26 Longest Increasing Subsequence LONGEST-INCR-SUBSEQ (a 0,…,a n-1 ) 1. for j=0 to n-1 do 2. S[j] = 1 3. for k=0 to j-1 do 4. if a k <a j and S[j]<S[k]+1 then 5. S[j] = S[k]+1 6. return max j S[j]


Download ppt "Approaches to Problem Solving greedy algorithms dynamic programming backtracking divide-and-conquer."

Similar presentations


Ads by Google