Toán rời rạc
HC VIN CÔNG NGH BU CHÍNH VIN THÔNG - - - - - - - ( - - - - - - - SÁCH HNG DN HC TP TOÁN RI RC Biên son : Ths. NGUYN DUY PHNG Lu hành ni b HÀ NI - 2006 LI GII THIU Toán ri rc là mt lnh vc nghiên cu và x lý các đi tng ri rc dùng đ đm các đi tng, và nghiên cu mi quan h gia các tp ri rc. Mt trong nhng yu t làm Toán ri rc tr nên quan trng là vic lu tr, x lý thông tin trong các h thng máy tính v bn cht là ri rc. Chính vì lý do đó, Toán hc ri rc là mt môn hc bt buc mang tính cht kinh đin ca các ngành Công ngh thông tin và in t Vin thông. Tài liu hng dn môn hc Toán hc ri rc đc xây dng cho h đào to t xa Hc vin Công ngh Bu chính Vin thông đc xây dng da trên c s kinh nghim ging dy môn hc và k tha t giáo trình “Toán hc ri rc ng dng trong tin hc” ca Kenneth Rossen. Tài liu đc trình bày thành hai phn: Phn I trình bày nhng kin thc c bn v lý thuyt t hp thông qua vic gii quyt bn bài toán c bn đó là: Bài toán đm, Bài toán tn ti, Bài toán lit kê và Bài toán ti u. Phn II trình bày nhng kin thc c bn v Lý thuyt đ th: khái nim, đnh ngha, các thut toán trên đ th, đ th Euler, đ th Hamilton. Mt s bài toán có ng dng thc tin quan trng khác ca lý thuyt đ th cng đc chú trng gii quyt đó là Bài toán tô màu đ th, Bài toán tìm đng đi ngn nht và Bài toán lung cc đi trong mng. Trong mi phn ca tài liu, chúng tôi c gng trình bày ngn gn trc tip vào bn cht ca vn đ, đng thi cài đt hu ht các thut toán bng ngôn ng lp trình C nhm đt đc hai mc tiêu chính cho ngi hc: Nâng cao t duy toán hc trong phân tích, thit k thut toán và rèn luyn k nng lp trình vi nhng thut toán phc tp. Mc dù đã rt cn trng trong quá trình biên son, tuy nhiên tài liu không tránh khi nhng thiu sót và hn ch. Chúng tôi rt mong đc s góp ý quí báu ca tt c đc gi và các bn đng nghip. Mi góp ý xin gi v: Khoa Công ngh Thông tin - Hc vin Công ngh Bu chính Vin thông. Hà Ni, tháng 05 nm 2006 Chng 1: Nhng kin thc c bn PHN I: LÝ THUYT T HP CHNG I: NHNG KIN THC C BN Ni dung chính ca chng này đ cp đn nhng kin thc c bn v logic mnh đ và lý thuyt tp hp. Bao gm: X Gii thiu tng quan v lý thuyt t hp. X Nhng kin thc c bn v logic. X Nhng kin thc c bn v lý thuyt tp hp. X Mt s ng dng ca logic và lý thuyt tp hp trong tin hc. Bn đc có th tìm thy nhng kin thc sâu hn và chi tit hn trong các tài liu [1] và [2] ca tài liu tham kho. 1.1. GII THIU CHUNG T hp là mt lnh vc quan trng ca toán hc ri rc đ cp ti nhiu vn đ khác nhau ca toán hc. Lý thuyt T hp nghiên cu vic phân b các phn t vào các tp hp. Thông thng các phn t ca tp hp là hu hn và vic phân b chúng phi tho mãn nhng điu kin nht đnh nào đó tu theo yêu cu ca bài toán nghiên cu. Mi cách phân b đc coi là mt “cu hình ca t hp”. Nguyên lý chung đ gii quyt bài toán t hp đc da trên nhng nguyên lý c s đó là nguyên lý cng, nguyên lý nhân và mt s nguyên lý khác, nhng mt đc thù không th tách ri ca toán hc t hp đó là vic chng minh và kim chng các phng pháp gii quyt bài toán không th tách ri máy tính. Nhng dng bài toán quan trng mà lý thuyt t hp đ cp đó là bài toán đm, bài toán lit kê, bài toán tn ti và bài toán ti u. Bài toán đm: đây là dng bài toán nhm tr li câu hi “có bao nhiêu cu hình tho mãn điu kin đã nêu?”. Bài toán đm đc áp dng có hiu qu vào nhng công vic mang tính cht đánh giá nh xác sut ca mt s kin, đ phc tp thut toán. Bài toán lit kê: bài toán lit kê quan tâm đn tt c các cu hình có th có đc, vì vy li gii ca nó đc biu din di dng thut toán “vét cn” tt c các cu hình. Bài toán lit kê thng đc làm nn cho nhiu bài toán khác. Hin nay, mt s bài toán tn ti, bài toán ti u, bài toán đm vn cha có cách nào gii quyt ngoài phng pháp lit kê. Phng pháp lit kê càng tr nên quan trng hn khi nó đc h tr bi các h thng máy tính. 5 Chng 1: Nhng kin thc c bn Bài toán ti u: khác vi bài toán lit kê, bài toán ti u ch quan tâm ti cu hình “tt nht” theo mt ngha nào đó. ây là mt bài toán có nhiu ng dng thc tin và lý thuyt t hp đã đóng góp mt phn đáng k trong vic xây dng các thut toán đ đa ra đc nhng mô hình ti u. Bài toán tn ti: nu nh bài toán đm thc hin đm bao nhiêu cu hình có th có, bài toán lit kê: lit kê tt c các cu hình có th có, bài toán ti u ch ra mt cu hình tt nht thì bài toán tn ti gii quyt nhng vn đ còn nghi vn ngha là ngay k c vn đ có hay không mt cu hình cng cha bit. Nhng bài toán này thng là nhng bài toán khó, vic s dng máy tính đ chng t bài toán đó tn ti hay không tn ti ít nht (hoc không) mt cu hình càng tr nên ht sc quan trng. 1.2. NHNG KIN THC C BN V LOGIC Các qui tc c bn ca Logic cho ta ý ngha chính xác ca các mnh đ. Nhng qui tc này đc s dng gia các lp lun toán hc đúng và không đúng. Vì mc tiêu c bn ca giáo trình này là trang b cho sinh viên hiu và xây dng đc nhng phng pháp lp lun toán hc đúng đn, nên chúng ta s bt đu nghiên cu toán hc ri rc bng nhng kin thc c bn ca môn logic hc. Hiu đc phng pháp lp lun toán hc có ý ngha ht sc quan trng trong tin hc. Nhng qui tc ca logic chính là công c c s đ chúng ta có th xây dng nên các ngôn ng lp trình, các mng máy tính, kim chng tính đúng đn ca chng trình và nhiu ng dng quan trng khác. 1.2.1. nh ngha & phép toán i tng nghiên cu ca logic hc là nhng mnh đ. Mt mnh đ đc hiu là mt câu khng đnh hoc đúng hoc sai ch không th va đúng va sai. Ví d: Nhng câu khng đnh sau đây là mt mnh đ: ̇ “Hà Ni là th đô ca Vit Nam.” ̇ 1 + 1 = 2 ̇ 2 + 2 = 3 Các mnh đ “Hà Ni là th đô ca Vit Nam”, “1 +1 =2 “là nhng mnh đ đúng, mnh đ “2 +2 =3” là sai. Nhng nhng câu trong ví d sau s không phi là mt mnh đ vì nó nhng câu đó không cho ta khng đnh đúng cng chng cho ta khng đnh sai. ̇ “Bây gi là my gi ?” ̇ “Hãy suy ngh điu này cho k lng” ̇ x +1 =2 ̇ x + y = z 6 Chng 1: Nhng kin thc c bn Ta ký hiu nhng ch cái A, B, C, D, p, q, r, s . . . là nhng mnh đ. Giá tr ca mt mnh đ đúng đc ký hiu là T, giá tr mnh đ sai đc ký hiu là F. Tp giá tr { T, F } còn đc gi là giá tr chân lý ca mt mnh đ. nh ngha 1. Mnh đ p tuyn vi mnh đ q (ký hiu p ∨ p) là mt mnh mà nó ch nhn giá tr T khi và ch khi ít nht mt trong hai mnh đ p, q nhn giá tr T. Mnh đ p ∨ q nhn giá tr F khi và ch khi c p, q đu nhn giá tr F. nh ngha 2. Mnh đ p hi mnh đ q (ký hiu p ∧ q ) là mt mnh đ mà nó ch nhn giá tr T khi và ch khi p, q nhn giá tr T. Mnh đ p ∧ q nhn giá tr F khi và ch khi hoc p, q, hoc c hai nhn giá tr F. nh ngha 3. Ph đnh mnh đ p (kí hiu ¬ p) là mt mnh đ nhn giá tr F khi và ch khi mnh đ p nhn giá tr T, nhn giá tr F khi và ch khi p nhn giá tr T. nh ngha 4. Mnh đ tuyn loi ca p và q, đc ký hiu là p⊕q, là mt mnh đ ch đúng khi mt trong p hoc q là đúng và sai trong các trng hp khác còn li. nh ngha 5. Mnh đ p suy ra mnh đ q (ký hiu p → q) nhn giá T khi và ch khi p nhn giá tr F hoc p và q cùng nhn giá tr T. Mnh đ p → q nhn giá tr F khi và ch khi p nhn giá tr T và q nhn giá tr F. nh ngha 6. Hai mnh đ p, q đc gi là kéo theo nhau (ký hiu: p ⇔ q) có giá tr đúng khi p và q có cùng giá tr chân lý và sai trong các trng hp khác còn li. Các phép toán: ∨ , ∧ , ¬ , ⊕ , → ,⇔ có th đc đnh ngha thông qua bng giá tr chân lý sau: Bng 1.1: Bng giá tr chân lý ca các phép toán ∨ , ∧, ¬, ⊕, →,⇔ p q p∨q p∧q ¬p p⊕q p→q p⇔q T T T T F F T T T F T F F T F F F T T F T T T F F F F F T F T T 1.2.2. S tng đng gia các mnh đ Mt vn đ ht sc quan trng trong lp lun toán hc là vic thay th này bng mt mnh đ khác có cùng giá tr chân lý. Hai mnh đ có cùng mt giá tr chân lý chúng ta có th hiu theo cách thông thng là chúng tng đng nhau v ng ngha. Do vy, ta s tip cn và phân loi các mnh đ phc hp thông qua các giá tr chân lý ca chúng. nh ngha 1. Mt mnh đ phc hp mà luôn luôn đúng vi bt k các giá tr chân lý ca các mnh đ thành phn ca nó đc gi là hng đúng (tautology). Mt mnh đ luôn luôn sai vi mi giá tr chân lý ca các mnh đ thành phn ca nó đc gi là mâu thun. 7 Chng 1: Nhng kin thc c bn Ví d: mnh đ phc hp p ∨¬ q là hng đúng, p ∧ ¬ q là mâu thun vì giá tr chân lý ca các mnh đ trên luôn luôn đúng, hoc luôn luôn sai nh đc ch ra trong bng 1.2. Bng 1.2. Ví d v mnh đ hng đúng & mnh đ mâu thun p ¬p p ∨¬q p∧¬q T F F T T T F F nh ngha 2. Hai mnh đ p, q đc gi là tng đng logic vi nhau (ký hiu: p ≡ q) khi và ch khi các ct cho giá tr chân lý ca chúng ging nhau. Hay mnh đ p→q là hng đúng. Ví d: hai mnh đ ¬ (p ∨ q) và ¬ p ∧ ¬ q là tng đng logic vì các ct giá tr chân lý ca chúng đc th hin qua bng sau: Bng 1.3. Bng giá tr chân lý đi vi ¬ (p ∨ q) và ¬p q p q p∨q ¬(p∨q) ¬p ¬q ¬p∧¬q T T F F T F T F T T T F F F F T F F T T F T F T F F F T Dùng bng giá tr chân lý đ chng minh tính tng đng logic gia hai mnh đ phc hp cho ta mt phng pháp trc quan d hiu. Tuy nhiên, vi nhng mnh đ logic phc hp có k mnh đ thì cn ti 2 k giá tr chân lý đ biu din bng giá tr chân lý. Trong nhiu trng hp chúng ta có th chng minh tính tng logic bng vic thay th mt mnh đ phc hp bng nhng tng đng logic có trc. Bng phng pháp bng chân lý, d dàng chng minh đc s tng đng ca các công thc di đây: p → q ≡ ¬ p ∨ q p ⇔ q ≡ (p → q) ∧ (q → p) ¬ ( ¬ p) ≡ p 8 Chng 1: Nhng kin thc c bn Bng 1.4. Bng các tng đng logic TNG NG TÊN GI p ∧ T ≡ p p ∨ F ≡ p Lut đng nht p ∨ T ≡ T p ∧ F ≡ F Lut nut p ∨ p ≡ p p ∧ p ≡ p Lut lu đng ¬(¬p) ≡ p Lut ph đnh kép p ∨ q ≡ q ∨ p p ∧ q ≡ q ∧ p Lut giao hoán (p ∨ q) ∨ r ≡ p ∨ ( q ∨ r) (p ∧ q) ∧ r ≡ p ∧( q ∧ r) Lut kt hp p ∨ ( q ∧ r) ≡ (p ∨ q ) ∧ (p ∨ r) p ∧ ( q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r) Lut phân phi ¬(p ∧ q ) ≡ ¬p ∨ ¬q ¬(p ∨ q ) ≡ ¬p ∧ ¬q Lut De Morgan Ví d: Chng minh rng ¬ ( p ∧ ( ¬ q ∧ q ) là tng đng logic vi ¬ p ∧ ¬ q. Chng minh: ¬ ( p ∧ ( ¬ q ∧ q ) ≡ ¬ p ∧ ¬ ( ¬ p ∧ q ) theo lut De Morgan th 2 ≡ ¬ p ∧ [ ¬ ( ¬ p) ∨ ¬ q theo lut De Morgan th 2 ≡ ¬ p ∧ [ p ∨ ¬ q ] theo lut ph đnh kép ≡ ( ¬ p ∧ p ) ∨ ( ¬ p ∧ ¬ q) theo lut phân phi ≡ F ∨ ( ¬ p ∧ ¬ q) vì ¬ p ∧ p ≡ F ≡ ¬ p ∧ ¬ q Mnh đ đc chng minh. 1.2.3. Dng chun tc Các công thc (mnh đ) tng đng đc xem nh các biu din khác nhau ca cùng mt mnh đ. d dàng vit các chng trình máy tính thao tác trên các công thc, chúng ta cn 9 Chng 1: Nhng kin thc c bn chun hóa các công thc, đa chúng v dng biu din chun đc gi là dng chun hi. Mt công thc đc gi là dng chun hi nu nó là hi ca các mnh đ tuyn. Phng pháp đ bin đi mt công thc bt k v dng chun hi bng cách áp dng các th tc sau: ̇ B các phép kéo theo (→) bng cách thay (p→q) bi (¬p→q). ̇ Chuyn các phép ph đnh (¬) vào sát các ký hiu mnh đ bng cách áp dng lut De Morgan và thay ¬(¬p) bi p. ̇ Áp dng lut phân phi thay các công thc có dng (p∨(q∧r)) bi (p∨q)∧(p∨r). Ví d: Ta chun hóa công thc (p→q)∨¬(r∨¬s): (p→q)∨¬(r∨¬s) ≡ (¬p∨q) ∨(¬r∧s) ≡ ((¬p∨q)∨¬r) ∧((¬p∨q)∨s) ≡ (¬p∨q∨¬r)∧(¬p∨q∨s) Nh vy công thc (p→q)∨¬(r∨¬s) đc đa v dng chun hi (¬p∨q∨¬r)∧(¬p∨q∨s) 1.3. V T VÀ LNG T Trong toán hc hay trong các chng trình máy tính chúng ta rt hay gp nhng khng đnh cha phi là mt mnh đ. Nhng khng đnh đó đu có liên quan đn các bin. Chng hn khng đnh: P(x) = “x > 3” không phi là mt mnh đ nhng ti nhng giá tr c th ca x = x 0 nào đó thì P(x 0 ) li là mt mnh đ. Hoc trong nhng đon chng trình gp câu lnh: if ( x > 3 ) then x:= x +1; thì chng trình s đt giá tr c th ca bin x vào P(x), nu mnh đ P(x) cho giá tr đúng x s đc tng lên 1 bi câu lnh x:=x+1, P(x) có giá tr sai giá tr ca x đc gi nguyên sau khi thc hin câu lnh if. Chúng ta có th phân tích mi khng đnh thành hai phn ch ng và v ng (hay v t), trong câu “x ln hn 3” ta có th coi x là ch ng, “ln hn 3” là v ng, hàm P(x) đc gi là hàm mnh đ. Mt hàm mnh đ có th có mt hoc nhiu bin, giá tr chân lý ca hàm mnh đ ti nhng giá tr c th ca bin đc xác đnh nh nhng mnh đ thông thng. Ví d: Cho Q(x, y, z) là hàm mnh đ xác đnh câu x 2 = y 2 +z 2 hãy xác đnh giá tr chân lý ca các mnh đ Q (3, 2, 1), Q ( 5, 4, 3). Gii: t giá tr c th ca x , y , z vào Q(x,y,z) ta có: Q(3,2,1) là mnh đ “3 2 = 2 2 + 1 2 ” là sai do đó Q(3,2,1) là mnh đ sai. Trong đó, Q (5, 4, 3) là mnh đ “5 2 = 4 2 + 3 2 ” đúng, do đó Q(5,4,3) là mnh đ đúng. 10 Chng 1: Nhng kin thc c bn Tng quát, gi s M là mt tp hp các phn t nào đó. M thng đc gi là trng hay min xác đnh ca các phn t thuc M. Khi đó, biu thc P(x) gi là v t xác đnh trên trng M nu khi thay x bi mt phn t bt k ca trng M thì P(x) s tr thành mt mnh đ trên trng M. Khi tt c các bin ca hàm mnh đ đu đc gán nhng giá tr c th, thì mnh đ to ra s xác đnh giá tr chân lý. Tuy nhiên, có mt phng pháp quan trng khác đ bin mt hàm mnh đ thành mt mnh đ mà không cn phi kim chng mi giá tr chân lý ca hàm mnh đ tng ng vi các giá tr ca bin thuc trng đang xét. Phng pháp đó gi là s lng hoá hay lng t. Chúng ta xét hai lng t quan trng là lng t vi mi (ký hiu:∀), lng t tn ti (ký hiu:∃ ). nh ngha 1. Lng t vi mi ca P(x) ký hiu là ∀x P(x) là mt mnh đ “P(x) đúng vi mi phn t x thuc trng đang xét”. Ví d: Cho hàm mnh đ P(x) = X 2 + X + 41 là nguyên t. Xác đnh giá tr chân lý ca mnh đ ∀ P(x) vi x thuc không gian bao gm các s t nhiên [0 39]. Gii: vì P(x) đúng vi mi giá tr ca x ∈ [0 39] ⇒ ∀ P(x) là đúng. Ví d: Cho P(x) là hàm mnh đ “x + 1 > x”. Xác đnh giá tr chân lý ca mnh đ ∀ x P(x), trong không gian các s thc. Gii: vì P(x) đúng vi mi s thc x nên ∀x P(x) là đúng. nh ngha 2. Lng t tn ti ca hàm mnh đ P(x) (đc ký hiu là:∃ x P(x) ) là mt mnh đ “Tn ti mt phn t x trong không gian sao cho P(x) là đúng “. Ví d: Cho P(x) là hàm mnh đ “x > 3”. Hãy tìm giá tr chân lý ca mnh đ ∃ x P(x) trong không gian các s thc. Gii: vì P(4) là “4 > 3” đúng nên ∃ x P(x) là đúng. Ví d: Cho Q(x) là “x + 1 > x”. Hãy tìm giá tr chân lý ca mnh đ ∃ x Q(x) trong không gian các s thc. Gii: vì Q(x) sai vi mi x ∈ R nên mnh đ ∃ x Q(x) là sai. Bng 1.5: Giá tr chân lý ca lng t ∀ , ∃ ∀x P(x) P(x) đúng vi mi x Có mt giá tr ca x đ P(x) sai ∃x P(x) Có mt giá tr ca x đ P(x) đúng P(x) sai vi mi x Dch nhng câu thông thng thành biu thc logic: Dch mt câu đc phát biu bng ngôn ng t nhiên (câu hi thông thng) thành mt biu thc logic có vai trò ht sc quan trng trong xây dng các ngôn ng lp trình, chng trình dch và x lý ngôn ng t nhiên. Quá trình dch mt câu t ngôn ng t nhiên thành mt biu thc s làm mt đi tính t nhiên ca ngôn ng 11 Chng 1: Nhng kin thc c bn vì đa s các ngôn ng đu không rõ ràng, nhng mt biu thc logic li rt rõ ràng cht ch t cú pháp th hin đn ng ngha ca câu. iu này dn đn phi có mt tp hp các gi thit hp lý da trên mt hàm xác đnh ng ngha cu câu đó. Mt khi câu đã đc chuyn dch thành biu thc logic, chúng ta có th xác đnh đc giá tr chân lý ca biu thc logic, thao tác trên biu thc logic, bin đi tng đng trên biu thc logic. Chúng ta s minh ho vic dch mt câu thông thng thành biu thc logic thông qua nhng sau. Ví d dch câu “Bn không đc lái xe máy nu bn cao di 1.5 mét tr phi bn trên 18 tui” thành biu thc logic. Gii: Ta gi p là câu : Bn đc lái xe máy. q là câu : Bn cao di 1.5m. r là câu : Bn trên 18 tui. Khi đó: Câu hi trên đc dch là: (q ∧ ¬r) → ¬p Ví d: Dch câu “Tt c các sinh viên hc tin hc đu hc môn toán hc ri rc” Gii: Gi P(x) là câu “x cn hc môn toán hc ri rc” và x đc xác đnh trong không gian ca các sinh viên hc tin hc. Khi đó chúng ta có th phát biu: ∀ x P(x) Ví d: Dch câu “Có mt sinh viên lp này ít nht đã tt c các phòng ca ít nht mt nhà trong ký túc xá”. Gii: Gi tp sinh viên trong lp là không gian xác đnh sinh viên x, tp các nhà trong ký túc xá là không gian xác đnh cn nhà y, tp các phòng là không gian xác đnh phòng z. Ta gi P(z,y) là “z thuc y”, Q(x,z) là “x đã z”. Khi đó ta có th phát biu: ∃ x ∃ y ∀ z (P(z,y) → Q(x,z)); 1.4. MT S NG DNG TRÊN MÁY TÍNH Các phép toán bít: Các h thng máy tính thng dùng các bit (binary digit) đ biu din thông tin. Mt bít có hai giá tr chân lý hoc 0 hoc 1. Vì giá tr chân lý ca mt biu thc logic cng có hai giá tr hoc đúng (T) hoc sai (F). Nu ta coi giá tr đúng có giá tr 1 và giá tr sai là 0 thì các phép toán vi các bít trong máy tính đc tng ng vi các liên t logic. Mt xâu bít (hoc xâu nh phân) là dãy không hoc nhiu bít. Chiu dài ca xâu là s các bít trong xâu đó. Ví d: Xâu nh 101010011 có đ dài là 9. Mt s nguyên đuc biu din nh mt xâu nh phân có đ dài 16 bít. 12