recursive algorithm: compute-opt(j) if j=0 then return 0 else
DESCRIPTION
Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else return max {v j +Compute-Opt(p(j)), Compute-Opt(j-1)} Running time: > 2 n/2 . (not required). Index. v 1 =2. p(1)=0. 1. v 2 =4. p(2)=0. 2. v 3 =4. p(3)=1. 3. v 4 =7. p(4)=0. 4. v 5 =2. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/1.jpg)
23/4/21 chapter25 1
.
![Page 2: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/2.jpg)
23/4/21 2
![Page 3: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/3.jpg)
23/4/21 3
New Algorithm:
Algorithm:
Input: e1<=e2<=e3…<=en and f(e1), f(e2), …, f(en)
for (p=0; p<n; p++) for (i=1; i<=n; i++) if (i+p<=n){ compute c(i, i+p) using the formula (in O(n) time) }
Total running time: O(n3)
![Page 4: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/4.jpg)
23/4/21 4
Algorithm (including backtracking):
Algorithm:
Input: e1<=e2<=e3…<=en and f(e1), f(e2), …, f(en)for (p=0; p<n; p++) for (i=1; i<=n; i++) if (i+p<=n){ compute c(i, i+p) using the formula (in O(n) time) b(i, i+p)=k, where e_k is the root to min c(i, j). }
![Page 5: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/5.jpg)
23/4/21 5
New Algorithm:// backtracking Let Q be a Queue.Q=empty;print b(1, n) as the root;Q.add (1, n);while (Q != empty){ (i,j)=Q.dequeue(); if (i<=b(i,j)-1) then attach b(i, b(i,j)-1) as the left child of b(i, j) Q.add(i, b(i,j)-1); if (b(i,j)+1<=j) then attach b(b(i,j)+1, j) as the right child of b(i, j). Q.add(b(i,j)+1, j);}
![Page 6: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/6.jpg)
Best binary search tree is:e1->e2->e3->e4
![Page 7: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/7.jpg)
23/4/21 chapter25 7
Using array:C(1, 1), C(2, 2), C(3,3), C(4,4) --size 1C(1, 2), C(2, 3), C(3, 4) --size 2C(1, 3), C(2, 4) -size 3C(1, 4) final result --size 4.
Need to compute O(n2) C(i,j),each takes O(n) time.
This is a new approach: dynamic programming approach
![Page 8: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/8.jpg)
23/4/21 chapter25 8
![Page 9: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/9.jpg)
23/4/21 chapter25 9
![Page 10: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/10.jpg)
23/4/21 chapter25 10
![Page 11: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/11.jpg)
23/4/21 chapter25 11
![Page 12: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/12.jpg)
23/4/21 chapter25 12
1
2
3
5
4
6
Index
p(1)=0
p(2)=0
p(3)=1
p(4)=0
p(5)=3
p(6)=3
v1=2
v2=4
v3=4
v4=7
v5=2
v6=1
![Page 13: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/13.jpg)
23/4/21 chapter25 13
.
![Page 14: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/14.jpg)
23/4/21 chapter25 14
.
![Page 15: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/15.jpg)
23/4/21 chapter25
Running time for Compute-Opt(n)f(n) = f(n-1)+f(p(n))+O(1)
=f(n-1)+f(n-2) +O(1) (assume that p(n)=n-2) >2f(n-2) (ignoring O(!) and use f(n-2) to replace f(n-1)
=4f(n-4)
=8f(n-6)
….
>O(2 n/2).
This is exponential in terms of n.
![Page 16: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/16.jpg)
23/4/21 chapter25 16
Weighted Interval Scheduling: Bottom-Up Input: n, s1, s2, …, sn, f1, f2, …, fn, v1, v2, …, vn
Sort jobs by finish times so that f1f2 … fn.
Compute p(1), p(2) , …, p(n)
M[0]=0;
for j = 1 to n do
M[j] = max { vj+m[p(j)], m[j-1]}
if (M[j] == M[j-1]) then B[j]=0 else B[j]=1 /*for backtracking
m=n; /*** Backtracking
while ( m ≠0) { if (B[m]==1) then
print job m; m=p(m)
else
m=m-1 }
B[j]=0 indicating job j is not selected.B[j]=1 indicating job j is selected.
![Page 17: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/17.jpg)
23/4/21 chapter25 17
1
2
3
5
4
6
Index
p(1)=0
p(2)=0
p(3)=1
p(4)=0
p(5)=3
p(6)=3
w1=2
w2=4
w3=4
w4=7
w5=2
w6=1
0 1 2 3 4 5 6
0
0
0
0
0
0
2
2 4
2 4 6
2 4 6 7
2 4 6 7 8
2 4 6 87 8
M =
j: 0 1 2 3 4 5 6
B: 0 1 1 1 1 1 0Backtracking: job1, job 3, job 5
M[j] = max { vj+m[p(j)], m[j-1]}
M[2]=w2+M[0]=4+0; M[3]=w3+M[1]=4+2;
M[4]=W4+M[0]=7+0; M[5]=W5+M[3]=2+6;
M[6]=w6+M[3]=1+6<8;
![Page 18: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/18.jpg)
23/4/21 chapter25 18
Backtracking and time complexity
•Backtracking is used to get the schedule.
•P()’s can be computed in O(n) time after sorting all the jobs based on the starting times.
•Time complexity
• O(n) if the jobs are sorted and p() is computed.
• Total time: O(n log n) including sorting.
![Page 19: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/19.jpg)
23/4/21 chapter25 19
Computing p()’s in O(n) time
P()’s can be computed in O(n) time using two sorted lists, one sorted by finish time (if two jobs have the same finish time, sort them based on starting time) and the other sorted by start time.
Start time: b(0, 5), a(1, 3), e(3, 8), c(5, 6), d(6, 8)
Finish time a(1, 3), b(0,5), c(5,6), d(6,8), e(3,8)
P(d)=c, p(c )=b, p(e)= a, p(a)=0, p(b)=0. (See demo7)
![Page 20: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/20.jpg)
23/4/21 chapter25 20
Example 2: Start time: b(0, 5), a(1, 3), e(3, 8), c(5, 6), d(6, 8)
Finish time a(1, 3), b(0,5), c(5,6), d(6,8), e(3,8)
P(d)=c, p(c )=b, p(e)= a, p(a)=0, p(b)=0.
v(a)=2, v(b)=3, v(c )=5, v(d) =6, v(e)=8.8.
Solution: M[0]=0, M[a]=2. M[b]=max{2, 3+M[p(b)]}=3.
M[c]=max{3, 5+M[p(c )]}=5+M[b]=8.
M[d]=max{8, 6+M[p(d)]}=6+M[c]=6+8=14.
M[e]=max{14, 8.8+M[p(e)]}=max{14, 8.8+M[a]}=max {14, 10.8}=14.
Backtracking: b, c, d. Job: a b c d e
B: 1 1 1 1 0
![Page 21: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/21.jpg)
23/4/21 21
Summary of Dynamic programming
1. Define an array, e.g., c(i, j) or M(i), etc
2. Find equations to compute c(i, j) or d(i), etc
3. Give the order to computer all cells.
Remark: The solution for big size is obtained from solution(s) of smaller size.
![Page 22: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/22.jpg)
23/4/21 chapter25 22
Longest common subsequence
• Definition 1: Given a sequence X=x1x2...xm, another sequence Z=z1z2...zk is a subsequence of X if there exists a strictly increasing sequence i1i2...ik of indices of X such that for all j=1,2,...k, we have xij=zj.
• Example 1: If X=abcdefg, Z=abdg is a subsequence of X. X=abcdefg,Z=ab d g
![Page 23: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/23.jpg)
23/4/21 chapter25 23
• Definition 2: Given two sequences X and Y, a sequence Z is a common subsequence of X and Y if Z is a subsequence of both X and Y.
• Example 2: X=abcdefg and Y=aaadgfd. Z=adf is a common subsequence of X and Y.
X=abc defg Y=aaaadgfd Z=a d f
![Page 24: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/24.jpg)
23/4/21 chapter25 24
• Definition 3: A longest common subsequence of X and Y is a common subsequence of X and Y with the longest length. (The length of a sequence is the number of letters in the sequence.)
• Longest common subsequence may not be unique.
• Example: abcd acbd Both acd and abd are LCS.
![Page 25: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/25.jpg)
23/4/21 chapter25 25
Longest common subsequence problem• Input: Two sequences X=x1x2...xm, and
Y=y1y2...yn.
• Output: a longest common subsequence of X and Y.• Applications: • Similarity of two lists
– Given two lists: L1: 1, 2, 3, 4, 5 , L2:1, 3, 2, 4, 5,
– Length of LCS=4 indicating the similarity of the two lists.
• Unix command “diff”.
![Page 26: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/26.jpg)
23/4/21 chapter25 26
Longest common subsequence problem
• Input: Two sequences X=x1x2...xm, and
Y=y1y2...yn.
• Output: a longest common subsequence of X and Y.
• A brute-force approach
Suppose that mn. Try all subsequence of X (There are 2m subsequence of X), test if such a subsequence is also a subsequence of Y, and select the one with the longest length.
![Page 27: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/27.jpg)
23/4/21 chapter25 27
Charactering a longest common subsequence
• Theorem (Optimal substructure of an LCS)
• Let X=x1x2...xi, and Y=y1y2...yj be two sequences, and • Z=z1z2...zk be any LCS of X and Y.• 1. If xi=yj, then zk=xi=yj and Z[1..k-1] is an LCS of X[1..m-
1] and Y[1..n-1]. • 2. If xi yj, then zkxi implies that Z is an LCS of X[1..i-
1] and Y.• 2. If xi yj, then zkyjimplies that Z is an LCS of X and
Y[1..j-1].
![Page 28: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/28.jpg)
23/4/21 chapter25 28
The recursive equation
• Let c[i,j] be the length of an LCS of X[1...i] and Y[1...j].
• c[i,j] can be computed as follows: 0 if i=0 or j=0,c[i,j]= c[i-1,j-1]+1 if i,j>0 and xi=yj, max{c[i,j-1],c[i-1,j]} if i,j>0 and xiyj.
Computing the length of an LCS• There are nm c[i,j]’s. So we can compute them
in a specific order.
![Page 29: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/29.jpg)
23/4/21 chapter25 29
The algorithm to compute an LCS • 1. for i=1 to m do • 2. c[i,0]=0;• 3. for j=0 to n do• 4. c[0,j]=0;• 5. for i=1 to m do• 6. for j=1 to n do• 7. { • 8. if x[i] ==y[j] then• 9. c[i,j]=c[i-1,j-1]+1;• 10 b[i,j]=1; • 11. else if c[i-1,j]>=c[i,j-1] then • 12. c[i,j]=c[i-1,j]• 13. b[i,j]=2;• 14. else c[i,j]=c[i,j-1] • 15. b[i,j]=3;• 14 }
![Page 30: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/30.jpg)
23/4/21 chapter25 30
Example 3: X=BDCABA and Y=ABCBDAB.
xi 0 0 0 0 0 0 0
A 0 0 0 0 1 1 1
B 0 1 1 1 1 2 2
C 0 1 1 2 2 2 2
B 0 1 1 2 2 3 3
D 0 1 2 2 2 3 3
A 0 1 2 2 3 3 4
B 0 1 2 2 3 4 4
yi B D C A B A
![Page 31: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/31.jpg)
23/4/21 chapter25 31
Constructing an LCS (back-tracking)
• We can find an LCS using b[i,j]’s. • We start with b[n,m] and track back to some cell b[0,i] or b[i,0].• The algorithm to construct an LCS (backtracking)
1. i=m2. j=n;3. if i==0 or j==0 then exit;4. if b[i,j]==1 then { i=i-1; j=j-1; print “xi”; } 5. if b[i,j]==2 i=i-16. if b[i,j]==3 j=j-17. Goto Step 3.
• The time complexity: O(nm).
![Page 32: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/32.jpg)
23/4/21 chapter25 32
Remarks on weighted interval scheduling
• it takes long time to explain. (50+13 minutes)
• Do not mention exponent time etc.
• For the first example, use the format of example 2 to show the computation process (more clearly).
![Page 33: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/33.jpg)
23/4/21 chapter25 33
Shortest common supersequence
• Definition: Let X and Y be two sequences. A sequence Z is a supersequence of X and Y if both X and Y are subsequences of Z.
• Shortest common supersequence problem:Input: Two sequences X and Y.Output: a shortest common supersequence of X and Y.
• Example: X=abc and Y=abb. Both abbc and abcb are the shortest common supersequences for X and Y.
![Page 34: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/34.jpg)
23/4/21 chapter25 34
Recursive Equation:
• Let c[i,j] be the length of an SCS of X[1...i] and Y[1...j].
• c[i,j] can be computed as follows:
j if i=0
i if j=0,
c[i,j]= c[i-1,j-1]+1 if i,j>0 and xi=yj,
min{c[i,j-1]+1,c[i-1,j]+1} if i,j>0 and xiyj.
![Page 35: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/35.jpg)
23/4/21 chapter25 35
![Page 36: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/36.jpg)
23/4/21 chapter25 36
The pseudo-codes for i=0 to n do c[i, 0]=i; for j=0 to m do c[0,j]=j; for i=1 to n do for j=1 to m do if (xi == yj) c[i ,j]= c[i-1, j-1]+1; b[i.j]=1; else { c[i,j]=min{c[i-1,j]+1, c[i,j-1]+1}. if (c[I,j]=c[i-1,j]+1 then b[I,j]=2; else b[I,j]=3; } p=n, q=m; / backtracking while (p≠0 or q≠0) { if (b[p,q]==1) then {print x[p]; p=p-1; q=q-1} if (b[p,q]==2) then {print x[p]; p=p-1} if (b[p,q]==3) then {print y[q]; q=q-1} }
![Page 37: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/37.jpg)
23/4/21 chapter25 37
Example SCS for X=BDCABA and Y=ABCBDAB.
xi 0 1 2 3 4 5 6
A 1 2 3 4 4 5 6
B 2 2 3 4 5 5 6
C 3 3 4 4 5 6 7
B 4 4 5 5 6 6 7
D 5 5 5 6 7 7 8
A 6 6 6 6 7 8 8
B 7 7 7 7 8 8 9
yi B D C A B A
7+6-4 (LCS)=9 (SCS) see slide 23
![Page 38: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/38.jpg)
23/4/21 chapter25 38
• Question 1: For the weighted interval scheduling problem, there are eight jobs with starting time and finish time as follows: j1=(0, 6), j2=(2, 3), j3=(3, 5), j4=(5, 9), j5=(8, 12), j6=(9, 11), j7=(10, 13) and j8=(11, 16). The weight for each job is as follows: v1=3.8, v2=2.0, v3=3.0, v4=3.0, v5=6.5, v6=2.5, v7=13.0, and v8=6.0.
Find a maximum weight subset of mutually compatible jobs. (Backtracking process is required.) (You have to compute p()’s. The process of computing p()’s is NOT required.)
• Question 2: Let X=aabbacab and Y=baabcbb. Find the longest common subsequence for X and Y. (Backtracking process is required.)
• Question 3. Let X=aabbacab and Y=baabcbb. Find the shortest common supsequence for X and Y. (Backtracking process is required.)
Assignment 2: Due Week 11, Friday
![Page 39: Recursive Algorithm: Compute-Opt(j) if j=0 then return 0 else](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56814038550346895daba613/html5/thumbnails/39.jpg)
23/4/21 chapter25 39
Summary of Week 7 • Understand the algorithms for the weighted
Interval Scheduling problem, LCS and SCS.
.