Ch
ng 1: M
U
TS. Tr n Cao
N m 2010
1
T
•
BÀI TOÁN
N CH
NG TRÌNH
Mô hình hóa bài toán
– Xác đ nh bài toán c n gi i quy t:
•
•
ph i làm gì?
làm nh th nào?
– Hình th c hóa bài toán: phát bi u l i bài
toán th c t thành m t bài toán hình th c
(hay còn g i là mô hình toán)
2
Ví d 1: Tô màu b n đ th gi i.
•
•
•
M i n c đ u đ c tô m t màu
Hai n c láng gi ng (có biên gi i chung) thì ph i đ c tô b ng hai
màu khác nhau.
Hãy tìm m t ph ng án tô màu các n c trên b n đ sao cho s màu
s d ng là ít nh t.
3
•
Mô hình hóa bài toán tô màu này
– tìm cách bi u di n bài toán m t
cách tr u t ng h n đ g t b
các chi ti t không c n thi t.
• Ghi l i t t c các n c trên b n
đ
• M i quan h “láng gi ng” gi a
hai n c
– M t cách mô hình hóa là:
• M i n c nh m t đi m;
• Hai n c có chung biên gi i ta
s v m t đ ng n i hai đi m
t ng ng.
•
B n đ th gi i và m i quan h
láng gi ng gi a các n c đã
đ c bi u di n b ng m t đ th
(graph):
– m i đ nh là m t n c,
– hai n c có biên gi i chung s
đ c n i v i nhau b i m t cung.
Bài toán tô màu cho b n đ th
gi i tr thành:
•Tìm cách tô màu cho t t c
các đ nh đ th sao cho hai
đ nh có c nh n i nhau thì
ph i đ c tô b ng hai màu
khác nhau
•S màu đ c s d ng là ít
nh t.
4
Ví d 2: èn giao thông
• Cho ngã n m nh hình,
trong đó C và E là các
đ ng m t chi u
• Hãy thi t k m t b ng
đèn hi u đi u khi n giao
thông t i ngã n m này
m t cách h p lý:
– phân chia các l i đi t i ngã
n m này thành các nhóm,
m i nhóm g m các l i đi có
th cùng đi đ ng th i
nh ng không x y ra tai n n
giao thông
– s l ng nhóm là ít nh t có
th đ c.
5
Mô hình hóa
•
Ghi nh n t t c các l i đi: AB,
AC, AD, BA, BC, BD, DA, DB,
DC, EA, EB, EC, ED.
•
Ghi nh n m i liên quan gi a
các l i đi:
– Hai l i không th đi đ ng th i
s đ c v 1 cung n i
•
Bài toán tr thành: Tô màu lên
các đ nh c a đ th
– Các l i đi cho phép cùng đi
đ ng th i s có cùng m t màu
– Hai đ nh có c nh n i nhau s
không đ c tô cùng màu.
– S nhóm là ít nh t: s màu
đ c dùng là ít nh t.
6
Nh n xét
• Hai bài toán th c t : “tô màu b n đ th
gi i” và “đèn giao thông” xem ra r t khác
bi t nhau nh ng sau khi mô hình hóa,
chúng th c ch t ch là m t, đó là bài toán
“tô màu đ th ”.
• Nhi u bài toán cùng mô hình toán
– Gi i mô hình toán å gi i nhi u bài toán hay
gi i m t l p các bài toán
7
Gi i thu t (algorithms)
• Khi đã có mô hình cho m t bài toán:
– Tìm cách gi i quy t bài toán trong mô hình đó
– Tìm m t gi i thu t: đó là m t chu i h u h n các ch th
(instruction) mà m i ch th có m t ý ngh a rõ ràng và th c hi n
đ c trong m t l ng th i gian h u h n.
• Knuth (1973) đ nh ngh a gi i thu t: là m t chu i h u h n
các thao tác đ gi i m t bài toán nào đó.
• Các tính ch t quan tr ng c a gi i thu t là:
– H u h n (finiteness): gi i thu t ph i luôn luôn k t thúc sau m t
s h u h n b c.
– Xác đ nh (definiteness): m i b c c a gi i thu t ph i đ c xác
đ nh rõ ràng và ph i đ c th c hi n chính xác, nh t quán.
– Hi u qu (effectiveness): các thao tác trong gi i thu t ph i đ c
th c hi n trong m t l ng th i gian h u h n.
8
Gi i bài toán “ tô màu đ th ”
•
Bài toán tô màu cho đ th
không có gi i thu t t t đ tìm
l i gi i t i u
– "th t t c các kh n ng" hay
"vét c n" t t c các tr ng
h p có th có,
– ta ch có th "vét c n" trong
tr ng h p đ th có s đ nh
nh
•
HEURISTIC cho bài toán tô
màu đ th , th ng g i là gi i
thu t "háu n" (GREEDY) là:
– Ch n m t đ nh ch a tô màu
và tô nó b ng m t màu m i C
nào đó.
– Duy t danh sách các đ nh
ch a tô màu.
i v i m t đ nh
ch a tô màu, xác đ nh xem nó
có k v i m t đ nh nào đ c
tô b ng màu C đó không. N u
không có, tô nó b ng màu C
đó.
•
Ý t ng c a Heuristic này là
h t s c đ n gi n: dùng m t
màu đ tô cho nhi u đ nh nh t
có th đ c. Nh v y ta có th
"hi v ng" là s màu c n dùng
s ít nh t.
9
Áp d ng HEURISTIC Greedy cho
bài toán« đèn giao thông »
• Tô màu xanh cho các
đ nh:
AB,AC,AD,BA,DC,ED
• Tô màu đ cho các
đ nh: BC,BD,EA
• Tô màu tím cho các
đ nh: DA,DB
• Tô màu vàng cho các
đ nh: EB,EC
AB
AC
AD
BA
BC
BD
DA
DB
DC
EA
EB
EC
ED
10
Greedy có cho l i gi i t i u?
• Ta có th tr l i mô hình c a
bài toán và dùng tính ch t
c a đ th đ ki m tra k t
qu . Nh n xét r ng:
– M t đ th có k đ nh và m i
c p đ nh b t k đ u đ c n i
nhau thì ph i dùng k màu đ
tô.
– M t đ th ch a k đ nh và m i
c p đ nh b t k đ u đ c n i
nhau thì ph i dùng ít nh t k
màu đ tô.
11
Greedy có cho l i gi i t i u?
Tô theo GREEDY
(xét l n l t theo s th t các
đ nh)
T i u
(th t t c các kh n ng)
1: đ ; 2: đ
1,3,4 : đ
3: xanh;4: xanh
2,5 : xanh
5: vàng
12
Ngôn ng gi và tinh ch t ng
b c
• Mô hình hóa å mô hình thích h p cho bài toán
• Hình th c hoá m t gi i thu t trong thu t ng c a mô
hình đó.
– Kh i đ u là vi t nh ng m nh đ t ng quát
– tinh ch d n thành nh ng chu i m nh đ c th h n
– Cu i cùng là các ch th thích h p trong m t ngôn ng l p trình.
• Ví d : Heuristic GREEDY, gi s đ th là G, heuristic s
xác đ nh m t t p h p Newclr các đ nh c a G đ c tô
cùng m t màu, mà ta g i là màu m i C trên.
ti n
hành tô màu hoàn t t cho đ th G thì Heuristic này ph i
đ c g i l p l i cho đ n khi toàn th các đ nh đ u đ c
tô màu.
13
Th t c GREEDY v i ngôn ng gi
PASCAL
PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET );
begin
{1} Newclr := ∅;
{2} for (m i đ nh v ch a tô màu c a G) do
{3}
if (v không đ c n i v i m t đ nh nào trong Newclr) then begin
{4}
đánh d u v đã đ c tô màu;
{5}
thêm v vào Newclr;
end;
end;
Trong th t c b ng ngôn ng gi :
•t khoá c a ngôn ng PASCAL
•m nh đ ti ng Vi t.
•"ki u d li u tr u t
ng" GRAPH, SET
14
Tinh ch t ng b
c
• M nh đ if {3} có th chi ti t hoá h n n a nh sau:
PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET );
begin
{1} Newclr:= ∅;
{2} for (m i đ nh v ch a tô màu c a G) do begin
{3.1}
found:=false;
{3.2}
for (m i đ nh w trong Newclr) do
{3.3}
if (có c nh n i gi a v và w) then
{3.4}
found:=true;
{3.5}
if found=false then begin
{4}
đánh d u v đã đ c tô màu;
{5}
thêm v vào Newclr;
end;
end;
end;
15
Ki u d li u tr u t
ng
• GRAPH và SET ta coi nh t p h p
– Có nhi u cách đ bi u di n t p h p trong
ngôn ng l p trình: xem các t p h p nh là
m t danh sách (LIST) các s nguyên bi u
di n ch s c a các đ nh và k t thúc b ng m t
giá tr đ c bi t NULL.
16
PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: LIST );
var found:boolean;
v,w :integer;
begin
Newclr:= ∅;
v:= đ nh đ u tiên ch a đ c tô màu trong G;
while v<>null do begin
found:=false;
w:=đ nh đ u tiên trong newclr;
while( w<>null) and (not found) do begin
if có c nh n i gi a v và w then
found:=true;
else w:= đ nh k ti p trong newclr;
end;
if found=false then begin
đánh d u v đã đ c tô màu;
thêm v vào Newclr;
end;
v:= đ nh ch a tô màu k ti p trong G;
end;
end;
17
Chú ý vi c dùng ngôn ng gi
• M c đích:
– phát h a ý t ng c a gi i thu t
– tránh sa đà vào cú pháp c a ngôn ng .
• Các b c tinh ch v sau: th t c ngôn ng gi càng
g n gi ng v i ch ng trình trong m t ngôn ng l p
trình.
• Vi c ch n ngôn ng gi t a PASCAL hay t a C hay t a
m t m t ng l p trình nào khác là tùy thu c vào thói
quen c a ng i s d ng, vào s quen thu c v i ngôn
ng l p trình.
18
N u ng i dùng quen thu c v i ngôn ng C có th vi t
th t c v i ngôn ng gi t a C nh sau :
void GREEDY ( GRAPH& G, SET& Newclr ){
/*1*/
Newclr = ∅;
/*2*/
for (m i đ nh v ch a tô màu c a G)
/*3*/
if (v không đ c n i v i m t đ nh nào trong Newclr){
/*4*/
đánh d u v đã đ c tô màu;
/*5*/
thêm v vào Newclr;
}
}
19
Th t c tinh ch đ
c vi t t a C nh sau:
void GREEDY ( GRAPH& G, SET& Newclr )
{
/*1*/
Newclr= ∅;
/*2*/
for (m i đ nh v ch a tô màu c a G) {
/*3.1*/
int found=0;
/*3.2*/
for (m i đ nh w trong Newclr)
/*3.3*/
if (có c nh n i gi a v và w)
/*3.4*/
found=1;
/*3.5*/
if (!found) {
/*4*/
đánh d u v đã đ c tô màu;
/*5*/
thêm v vào Newclr;
}
}
}
20
Tinh ch thêm m t b
c n a:
void GREEDY ( GRAPH& G, LIST& Newclr ){
Newclr= ∅;
int v= đ nh đ u tiên ch a đ c tô màu trong G;
while (v<>null) {
int found=0;
int w=đ nh đ u tiên trong newclr;
while( w<>null) && (!found)
If (có c nh n i gi a v và w) found=1;
else w= đ nh k ti p trong newclr;
if (!found) {
ánh d u v đã đ c tô màu;
Thêm v vào Newclr;
}
v= đ nh ch a tô màu k ti p trong G;
}
}
21
Tóm t t các b c ti p c n v i m t
bài toán
1. Mô hình hoá bài toán b ng m t mô hình toán h c thích
h p.
2. Tìm gi i thu t trên mô hình này.
Gi i thu t có th mô t m t cách không hình th c, t c là nó ch
nêu ph ng h ng gi i ho c các b c gi i m t cách t ng
quát.
3. Hình th c hoá gi i thu t b ng cách vi t m t th t c
b ng ngôn ng gi , r i chi ti t hoá d n ("m n hoá") , k t
h p v i vi c dùng các ki u d li u tr u t ng và các
c u trúc đi u khi n trong ngôn ng l p trình đ mô t
gi i thu t.
4. Cài đ t gi i thu t trong m t ngôn ng l p trình c th
(Pascal,C,...). b c này ta dùng các c u trúc d li u
đ c cung c p trong ngôn ng , ví d Array, Record,...
đ th hi n các ki u d li u tr u t ng,
22
KI U D
•
LI U TR U T
Khái ni m tr u t ng hóa
–
Tr u t ng hóa ch ng
trình
void Main() {
Input_Matrix(A);
Input_Matrix(B);
Matrix_mult(A,B,C);
Print_Matrix(C);
}
• Tr u t
NG
ng hóa d li u
– M t ki u d li u tr u t ng
(ADT): m t mô hình toán
h c cùng v i m t t p h p
các phép toán (operator)
tr u t ng đ c đ nh
ngh a trên mô hình đó.
– Ví d t p h p s nguyên
cùng v i các phép toán
h p, giao, hi u là m t ki u
d li u tr u t ng.
– ADT là s t ng quát hoá
c a các ki u d li u
nguyên thu .
23
ADT - t ng quát hoá các ki u d li u
nguyên thu
•
Danh sách (LIST) các s nguyên và các phép toán trên danh sách
– T o m t danh sách r ng.
– L y ph n t đ u tiên trong danh sách và tr v giá tr null n u danh sách r ng.
– L y ph n t k ti p trong danh sách và tr v giá tr null n u không còn ph n t
k ti p.
– Thêm m t s nguyên vào danh sách.
•
N u chúng ta vi t các ch ng trình con th c hi n các phép toán này, thì ta
d dàng thay các m nh đ hình th c trong gi i thu t b ng các câu l nh đ n
gi n
Câu l nh
M nh đ hình th c
MAKENULL(newclr)
newclr= ∅
w=FIRST(newclr)
w=ph n t đ u tiên trong newclr
w=NEXT(w,newclr)
w=ph n t k ti p trong newclr
INSERT( v,newclr)
Thêm v vào newclr
24
KI U D LI U - C U TRÚC D
KI U D LI U TR U T
•
Ki u d li u là m t t p h p
các giá tr và m t t p h p các
phép toán trên các giá tr đó.
– ki u d li u s c p: int, char
– ki u d li u có c u trúc; array,
struct.
•
C u trúc d
li u:
– Các ki u d li u có c u trúc
c b n (cung c p b i NNLT)
– các c u trúc ph c h p (đ c
t o ra t các ki u d li u c
b n)
•
M t ki u d li u tr u t ng
là m t mô hình toán h c cùng
v i m t t p h p các phép toán
trên nó.
LI U VÀ
NG
– Ki u d li u tr u t ng là m t
ki u d li u do chúng ta đ nh
ngh a m c khái ni m
(conceptual), ch a đ c cài
đ t c th b ng m t ngôn ng
l p trình.
– Khi cài đ t m t ki u d li u
tr u t ng trong m t ngôn
ng l p trình c th : :
• Bi u di n ki u d li u tr u
t ng ( m c khái ni m)
b ng m t c u trúc d li u
ho c m t ki u d li u tr u
t ng khác đã đ c cài đ t.
• Vi t các ch ng trình con
th c hi n các phép toán trên
ki u d li u tr u t ng.
25