Professional Documents
Culture Documents
B6 - Cau Truc Va Thuat Giai
B6 - Cau Truc Va Thuat Giai
ca Tin hc
Cu trc d liu v thut gii
Gio vin: T Thc Nhu
Khoa CNTT trng H Lc Hng
QUY HOCH NG
DYNAMIC
PROGRAMMING
2
V d minh ha:
Dy Fibonnaci l dy cc s nguyn dng c nh ngha nh sau:
1
i2
F [i ]
F [i 2] F [i 1] i 2
int F(int i)
void main()
{
if (i <= 2) return 1;
F[1] = F[2] = 1;
void main()
{
}
cout<<F(6)<<endl;
}
4
ii. Lp cng thc tnh ton kt qu bi ton theo tham s kch thc
iii. Xc nh kt qu bi ton con nh nht.
Bi ton ba l (knapsack)
Cho n gi hng. Gi hng th i c khi lng l A[i] v
gi tr C[i]. Cn chn nhng gi hng no b vo mt
ba l sao tng gi tr ca cc gi hng chn l ln
nht nhng tng khi lng ca chng khng vt qu
khi lng M cho trc. Mi gi ch chn 1 hoc khng
chn.
V d: n = 5; M = 13
i
A[i]
C[i]
1
3
4
2
4
5
3
5
6
4
2
3
5
1
1
Tng gi tr ca cc gi hng b vo ba l: 16
Cc gi c chn: 1(3, 4) 2(4, 5) 3(5, 6) 5(1, 1)
7
10
V d bng phng n:
Trng hp A[i] > v: F(i, v) = F(i -1, v)
Trng hp A[i] <= v: F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }
10
11
12
13
i
0
10
11
11
11
15
15
10
12
13
14
15
15
10
12
13
14
15
16
11
10
11
12
13
i
0
10
11
11
11
15
15
10
12
13
14
15
15
10
12
13
14
15
16
13
}
14
Bi ton ba l 2
Cho n loi hng. Mn hng thuc loi hng i c khi lng A[i] v
gi tr C[i]. S lng cc mn hng ca mi loi khng hn ch.
Cn chn cc mn hng trong tng loi b vo mt ba l sao
cho tng gi tr ca cc mn hng chn l ln nht nhng
tng khi lng ca chng khng vt qu khi lng M cho
trc. Cho bit s lng mn hng tng loi hng c chn
V d: n = 5; M = 13
i
A[i]
C[i]
1
3
4
2
4
5
3
5
6
4
2
3
5
1
1
Tng gi tr ca cc mn hng b vo ba l: 19
Cc mn c chn:
1 gi hng loi 1 c khi lng 3 v gi tr 4
5 gi hng loi 4 c khi lng 2 v gi tr 3
15
F(i, v) = 0
Vi i > 0 :
A[i] > v : F(i, v) = F(i - 1, v)
A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k }
vi k [0, v/A[i]]
17
18
V d: Lp bng phng n F
Vi i > 0 :
A[i] > v : F(i, v) = F(i - 1, v)
A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k }
vi k [0, v/A[i] ]
Bng F[i, v]
C[i] A[i]
10 11 12 13
i
0
12
12
12
16
16
12
13
14
16
17
10 12
13
14
16
17
10
11 13
14
16
17
19
10
11 13
14
16
17
19
19
V d lp bng phng n S
C[i] A[i]
10 11 12 13
i
0
Bng
12
12
12
16
16
F[i, v]
12
13
14
16
17
10 12
13
14
16
17
10
11 13
14
16
17
19
10
11 13
14
16
17
19
10 11 12 13
C[i] A[i]
v
i
Bng
S[i, v]
20
10
}
}
}
21
10 11 12 13
i
4
22
11
Dy A[i]
11
12
20
Chiu di dy con: 4
Cc phn t c chn l : 1 2 5 6
C gi tr tng ng l : : 11 6 20 8
24
12
r = a mod k v z = b mod k
Ta c:
1. (a + b) mod k = (r + z) mod k
2. (-r) mod k = (-r + k) mod k
3. (r + z) mod k = v z = (v r) mod k = (v r + k) mod k
I
A[i]
11
12
20
A[i] = A[i] % 5
25
Xc nh tham s
Gi F(i) = chiu di dy con di nht trong min [1..i] c tng chia ht
cho k.
1. Nu dy con di nht khng c A[i] th F(i) = F(i-1)
Vi F(i-1) = chiu di dy con di nht trong min [1..i-1] c tng
chia ht cho k
2. Nu dy con di nht c cha A[i]: th F(i) = F( i-1) + 1
Gi r = A[i] mod k
Nu r = 0: th F(i-1) = chiu di dy con di nht trong min [1..i1] c tng chia ht cho k
Nu r > 0 : do (r + k - r) mod k = 0 nn F(i-1) bng chiu di dy
con di nht trong min [1..(i-1)] c tng chia vi k d (k-r)
Tham s th hin kch thc ca bi ton: kch thc min v s d
ca tng chia vi k
26
13
Bi ton nh nht ng vi i = 1:
F(1,v)= 0 nu r <> v
F(1,v)= 1 nu r = v
27
14
29
30
15
V d bng phng n:
Vi i > 1 :
Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 }
Nu v<>r v F(i-1, (v-r+k) mod k) > 0 th
F(i, v) = Max {F(i-1, v), F(i-1, (v r + k) mod k) +1 }
i
r=A[i]
4 | 0
0 | 1
1 | 2
2 | 0
3 | 0
3 | 0
4 | 1
0 | 2
1 | 2
2 | 3
3 | 3
4 | 3
0 | 2
1 | 2
2 | 3
0 | 4
1 | 4
2 | 3
3 | 3
4 | 4
2 | 4
3 | 4
4 | 5
1 | 5
2 | 6
31
r = A[i] % k;
F[i, v] = F[i-1, v];
If (v == r && F[i, v] <= F[i-1, 0 ])
F[i, v] = F[i-1, 0] + 1;
else if (F[i-1, (v - r + k)%k] >0 && F[i, v] <= F[i-1, (v - r + k)%k])
F[i, v] = F[ i -1, (v - r + k)%k] + 1;
}
}
32
16
Truy vt
Bt u t F[n, 0] trn dng n ta d ngc v dng 0 theo nguyn tc:
Nu F[i1, (v-r+k)%k] > 0 v F[i, v] > F[i1, (v-r+k)%k]:
A[i] c chn
Truy tip F[i -1, (v-r+k)%k].
Ngc li th A[i] khng c chn, ta truy tip F[i -1, v].
i
r=A[i]
4 | 0
0 | 1
1 | 2
2 | 0
3 | 0
3 | 0
4 | 1
0 | 2
1 | 2
2 | 3
3 | 3
4 | 3
0 | 2
1 | 2
2 | 3
0 | 4
1 | 4
2 | 3
3 | 3
4 | 4
2 | 4
3 | 4
4 | 5
1 | 5
2 | 6
33
10
Dy A
-7
-3
15
34
17
10
Dy A
-7
-3
15
Cch 1
Cch 2
35
10
Dy A[i]
L(i)
-7
-3
15
36
18
10
Dy A[i]
B[i]
-7
-3
15
Truoc[i]
37
10
-7
-3
15
38
19
Dy A[i]
L[i]
Truoc[i]
10
-7
-3
15
39
A[i]
-7
B[i]
Truoc[i]
10
-3
15
40
20
Kt lun
265
11 10 10
41
21
vi j = Scn[1]..Smax
j =Scn[i]..Smax;
k = Scn[i-1]..Smax)
vi j = Scn[1]..Smax
j =Scn[i]..Smax;
10
k = Scn[i-1]..Smax)
j=Scn[T]..Smax
10
11
99
99+45+12=156
99+50+6=155
99+55=164
155+50=205
155+55+4=214
205+60=265
2144+66=280
44
22
10
10
11
99
99+45+12=156
99+50+6=155
99+55=164
155+50=205
155+55+4=214
205+60=265
2144+66=280
Scn i \ j
11
10
10
11
11
11
11
10
10
45
C[i, j] = MAXINT;
for (k=Scn[i-1]; k <= Smax; k++)
{
X = C[i-1, k] ;
if (k > j) X = X + (k j)*DV; else X = X + (j k)*ST
if (X< C[i, j]) { C[i, j] = X; Truoc[i, j] = k; }
}
}
for (j=Scn[T]; j <= Smax; j++) C[T+1, j] = C(T, j) + (j * ST) ;
}
46
23
k = Scn[T];
k = Truoc[i, k];
<Thng i-1 cn k cng nhn>
}
}
47
Bi tp
1.
2.
3.
4.
5.
24
6.
7.
50
25