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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Ch ng 1: M U TS Tr n Cao N m 2010 T • BÀI TOÁN N CH NG TRÌNH Mô hình hóa toán – Xác đ nh 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 toán: phát bi u l i toán th c t thành m t toán hình th c (hay g i mô hình toán) 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) ph i đ c tô b ng hai màu khác Hãy tìm m t ph ng án tô màu n c b n đ cho s màu s d ng nh t • Mô hình hóa toán tô màu – tìm cách bi u di n toán m t cách tr u t ng h n đ g t b chi ti t không c n thi t • Ghi l i t t c n c 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 m; • Hai n c có chung biên gi i ta s v m t đ ng n i hai m t ng ng • B n đ th gi i m i quan h láng gi ng gi a n c đ c bi u di n b ng m t đ th (graph): – m i đ nh m t n c, – hai n c có biên gi i chung s đ c n i v i 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 đ nh đ th cho hai đ nh có c nh n i ph i đ c tô b ng hai màu khác •S màu đ c s d ng nh t Ví d 2: èn giao thông • Cho ngã n m nh hình, C E đ ng m t chi u • Hãy thi t k m t b ng đèn hi u u n giao thông t i ngã n m m t cách h p lý: – phân chia l i t i ngã n m thành nhóm, m i nhóm g m l i có th đ ng th i nh ng không x y tai n n giao thông – s l ng nhóm nh t có th đ c Mô hình hóa • Ghi nh n t t 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 l i đi: – Hai l i không th đ ng th i s đ c v cung n i • Bài toán tr thành: Tô màu lên đ nh c a đ th – Các l i cho phép đ ng th i s có m t màu – Hai đ nh có c nh n i s không đ c tô màu – S nhóm nh t: s màu đ c dùng nh t Nh n xét • Hai toán th c t : “tô màu b n đ th gi i” “đèn giao thông” xem r t khác bi t nh ng sau mô hình hóa, chúng th c ch t ch m t, toán “tô màu đ th ” • Nhi u toán mô hình toán – Gi i mô hình toán å gi i nhi u toán hay gi i m t l p toán Gi i thu t (algorithms) • Khi có mô hình cho m t toán: – Tìm cách gi i quy t toán mô hình – Tìm m t gi i thu t: m t chu i h u h n ch th (instruction) mà m i ch th có m t ý ngh a rõ ràng th c hi n đ c m t l ng th i gian h u h n • Knuth (1973) đ nh ngh a gi i thu t: m t chu i h u h n thao tác đ gi i m t toán • 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 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 ph i đ c th c hi n xác, nh t quán – Hi u qu (effectiveness): thao tác gi i thu t ph i đ c th c hi n m t l ng th i gian h u h n Gi i toán “ tô màu đ th ” • Bài toán tô màu cho đ th gi i thu t t t đ tìm l i gi i t i u – "th t t c kh n ng" hay "vét c n" t t c tr ng h p có th có, – ta ch có th "vét c n" tr ng h p đ th có s đ nh nh • HEURISTIC cho toán tô màu đ th , th ng g i gi i thu t "háu n" (GREEDY) là: – Ch n m t đ nh ch a tô màu tô b ng m t màu m i C – Duy t danh sách đ nh ch a tô màu i v i m t đ nh ch a tô màu, xác đ nh xem có k v i m t đ nh đ c tô b ng màu C không N u không có, tô b ng màu C • Ý t ng c a Heuristic 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" s màu c n dùng s nh t Áp d ng HEURISTIC Greedy cho toán« đèn giao thông » • Tô màu xanh cho đ nh: AB,AC,AD,BA,DC,ED • Tô màu đ cho đ nh: BC,BD,EA • Tô màu tím cho đ nh: DA,DB • Tô màu vàng cho đ 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? Tô theo GREEDY (xét l n l t theo s th t đ nh) T i u (th t t c kh n ng) 1: đ ; 2: đ 1,3,4 : đ 3: xanh;4: xanh 2,5 : xanh 5: vàng 12 Ngôn ng gi tinh ch t ng b c • Mô hình hóa å mô hình thích h p cho toán • Hình th c hoá m t gi i thu t thu t ng c a mô hình – Kh i đ u 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 ch th thích h p m t ngôn ng l p trình • Ví d : Heuristic GREEDY, gi s đ th G, heuristic s xác đ nh m t t p h p Newclr đ nh c a G đ c tô m t màu, mà ta g i màu m i C ti n hành tô màu hoàn t t cho đ th G Heuristic ph i đ c g i l p l i cho đ n toàn th đ 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) {3} if (v không đ c n i v i m t đ nh 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) begin {3.1} found:=false; {3.2} for (m i đ nh w Newclr) {3.3} if (có c nh n i gi a 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 SET ta coi nh t p h p – Có nhi u cách đ bi u di n t p h p ngôn ng l p trình: xem t p h p nh m t danh sách (LIST) s nguyên bi u di n ch s c a đ nh 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 G; while vnull begin found:=false; w:=đ nh đ u tiên newclr; while( wnull) and (not found) begin if có c nh n i gi a v w then found:=true; else w:= đ nh k ti p 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 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 g n gi ng v i ch ng trình 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 khác 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 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 Newclr) /*3.3*/ if (có c nh n i gi a 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 G; while (vnull) { int found=0; int w=đ nh đ u tiên newclr; while( wnull) && (!found) If (có c nh n i gi a v w) found=1; else w= đ nh k ti p 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 G; } } 21 Tóm t t b c ti p c n v i m t toán Mô hình hoá toán b ng m t mô hình toán h c thích h p Tìm gi i thu t mô hình Gi i thu t có th mô t m t cách không hình th c, t c ch nêu ph ng h ng gi i ho c b c gi i m t cách t ng quát 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 ki u d li u tr u t ng c u trúc u n ngôn ng l p trình đ mô t gi i thu t Cài đ t gi i thu t m t ngôn ng l p trình c th (Pascal,C, ) b c ta dùng c u trúc d li u đ c cung c p ngôn ng , ví d Array, Record, đ th hi n 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 v i m t t p h p phép toán (operator) tr u t ng đ c đ nh ngh a mô hình – Ví d t p h p s nguyên v i phép toán h p, giao, hi u m t ki u d li u tr u t ng – ADT s t ng quát hoá c a ki u d li u nguyên thu 23 ADT - t ng quát hoá ki u d li u nguyên thu • Danh sách (LIST) s nguyên phép toán danh sách – T o m t danh sách r ng – L y ph n t đ u tiên danh sách tr v giá tr null n u danh sách r ng – L y ph n t k ti p danh sách tr v giá tr null n u không ph n t k ti p – Thêm m t s nguyên vào danh sách • N u vi t ch ng trình th c hi n phép toán này, ta d dàng thay m nh đ hình th c gi i thu t b ng 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 newclr w=NEXT(w,newclr) w=ph n t k ti p 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 m t t p h p giá tr m t t p h p phép toán 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 u trúc ph c h p (đ c t o t ki u d li u c b n) • M t ki u d li u tr u t ng m t mô hình toán h c v i m t t p h p phép toán LI U VÀ NG – Ki u d li u tr u t ng m t ki u d li u đ 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 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 ch ng trình th c hi n phép toán ki u d li u tr u t ng 25 H t ch ng 26 [...]... 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:... 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... 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... 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... 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 –... 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 ... 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 (vnull) { int found=0; int w=đ nh đ u tiên trong newclr; while( wnull) && (!found) If (có c nh n i gi a v và w) found =1; else w= đ nh k ti p trong newclr;... 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... 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... 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 ... 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 đ nh) T i u (th t t c kh n ng) 1: đ ; 2: đ 1, 3,4 : đ 3: xanh;4: xanh 2,5 : xanh 5: vàng 12 Ngôn ng gi tinh... U D LI U - C U TRÚC D KI U D LI U TR U T • Ki u d li u m t t p h p giá tr m t t p h p phép toán 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... 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*/

Ngày đăng: 03/12/2015, 02:46

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan