Tải bản đầy đủ (.pdf) (26 trang)

Bài giảng cấu trúc dữ liệu chương 1 TS trần cao đệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (326.8 KB, 26 trang )

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


×