Tr-ờng Cao Đẳng Cơ Điện Hà Nội Ch-ơng Lý thuyết tổ hợp 1.1 Sơ l-ợc tổ hợp: Tổ hợp phần quan trọng toán học rời rạc chuyên nghiên cứu xếp đối t-ợng, chủ đề đà đ-ợc nghiên cứu từ kỷ 17 Khi trò chơi may rủi, liệt kê,đếm đối t-ợng có tính chất phần quan trọng lý thuyết tổ hợp Ví dụ ta dùng quy tắc đếm để tính tất số điện thoại có toàn n-ớc Mỹ, sè mËt khÈu cho phÐp truy nhËt hƯ m¸y tÝnh, liệt kê thứ tự đích khác vận động viên xảy chạy thi Một toán khác lý thuyết tổ hợp việc tạo cách xếp theo kiểu Vấn đề quan trọng mô máy tính 1.1.1 Quy tắc cộng: Giả sử có hai công việc Việc thứ làm n1 cách, việc thứ hai làm n2 cách hai việc làm đồng thời, có n1+n2 cách làm hai việc Ví dụ1: Giả sử cần chọn cán khoa tin sinh viên tin làm đại biểu hội đồng tr-ờng Hỏi có cách chọn vị đại biểu khoa tin có 37 cán 83 sinh viên? Chúng ta mở rông quy tắc cộng cho tr-ờng hợp có nhiều hai công việc Giả sử việc T1, T2, ,Tm làm t-ơng ứng n1, n2, , nm cách giả sử hai việc làm đồng thời Khi số cách làm m việc n1+n2 +.+nm Ví dụ2: Một sinh viên chọn thực hành máy tính từ ba danh sách t-ơng ứng có 23, 15 19 Có cách chọn thực hành? Quy tắc cộng phát biểu d-ới dạng ngôn ngữ tập hợp nh- sau: Nếu A1, A2, , Am tập rời nhau, số phần tử hợp tập hợp Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội tổng số phần tử tập thành phần A1 A2 Am A1 A2 Am 1.1.2 Quy t¾c nhân: Giả sử nhiệm vụ đ-ợc tách lµm hai viƯc ViƯc thø nhÊt cã thĨ lµm b»ng n1 cách, việc thứ hai làm n2 cách sau thực việc thứ đà làm, có n1 n cách thực nhiệm vụ Ví dụ3: Trong trung tâm máy tính có 32 máy vi tính Mỗi máy có 24 cổng Hỏi có cổng khác trung tâm này? Quy tắc nhân mở rộng: Giả sử nhiệm vụ đ-ợc thi hành b»ng c¸ch thùc hiƯn c¸c viƯc T1, T2, …,Tm NÕu việc Ti làm ni cách sau việc T1, T2, ,Ti-1 đà đ-ợc làm, cã n1 n nm c¸ch thi hành nhiệm vụ đà cho Ví dụ4: Có biển đăng kí xe ô tô biển chứa dÃy ba chữ tiếp sau ba chữ số (không bỏ dÃy chữ có ý nghĩa không đẹp) Quy tắc nhân th-ờng đ-ợc phát biểu ngôn ngữ tập hợp nh- sau: Nếu A1, A2, , Am tập hữu hạn, số phần tử tích Đề-các tập hợp tích số phần tử tập thành phần A1 A2 Am A1 A2 Am 1.1.3 C¸c cấu hình tổ hợp đơn giản: 1.1.3.1 Hoán vị Cho tËp A gåm n phÇn tư ( n 1) Mỗi cách xếp thứ tự n phần tử tập hợp A đ-ợc gọi hoán vị n phần tử Pn n! (n 1) n Quy -íc: 0!=1 1!=1 VÝ dơ5: ng-êi xÕp thµnh hµng ngang để chụp ảnh Hỏi bố trí kiểu? Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội 1.1.3.2 Chỉnh hợp: Cho tập hợp A gồm n phần tử Mỗi gồm k phần tư ( k n ) s¾p thø tự tập hợp A tổ hợp chấp k cđa n phÇn tư Ank n(n 1) (n k 1) n! (n k )! Ví dụ 6: Giả sử có tám vận động viên chạy thi Ng-ời thắng nhận huy ch-ơng vàng, ng-ời đích thứ hai nhận huy ch-ơng bạc, ng-ời đích thứ ba nhận huy ch-ơng đồng Có cách trao huy ch-ơng tất kết cục thi xảy ra? 1.1.3.3 Tổ hợp: Cho tập hợp A gồm n phần tử Mỗi tập gồm k phần tử ( k n ) cđa tËp hỵp A chỉnh hợp chấp k n phần tö Cnk n! k !(n k )! VÝ dụ7: Có cách tuyển số 10 cầu thủ đội bóng quần vợt để thi đấu tr-ờng khác? Các tính chất hệ số tổ hợp: a) Tính đối xứng Cnk Cnnk b) Điều kiện ban đầu Cn0 Cnn c) Công thức đệ qui Cnk Cnn11 Cnk1 , n >k >0 Từ công thức b) c), ta tính tất hệ số tổ hợp phép cộng Các hệ số đ-ợc tính viết lần l-ợt theo dòng ( dòng ứng với giá trị n=0, 1, 2,) theo bảng tam giác dưói đây: C00 C10 Khoa Công Nghệ Thông Tin C11 Tr-ờng Cao Đẳng Cơ Điện Hµ Néi … … Cn0 … … … Cn1 … … … … … Cnn 1 … … Cnn … Bảng gọi tam giác Pascal Các hệ số tổ hợp có liên quan chặt chẽ với việc khai triĨn l thõa cđa mét nhÞ thøc ( x y)n Cn0 x n Cn1 x n1 y Cnn1 y n1 Cnn y n Công thức đ-ợc gọi công thức khai triển nhị thức Newton hệ số đ-ợc gọi hệ số nhị thức 1.2 Bài toán đếm ph-ơng pháp giải 1.2.1 Giới thiệu toán Một vấn đề việc nghiên cứu tổ hợp đếm xem có cấu hình tổ hợph đ-ợc tạo với quy tắc đà nêu ? Những toán nh- đ-ợc gọi toán đếm tổ hợp Thông th-ờng, lời giải toán đếm phụ thuộc vào số giá trị tham số ban đầu ng-ời ta cố gắng biểu diễn phụ thuộc công thức toán học Nói chung, để đếm cấu hình đà cho, ng-ời ta tìm cách đ-a cấu hình quen thuộc thiết lập t-ơng quan 1-1 chúng Nhiều toán đếm đ-ợc phân thành toán đến nhỏ cách chia việc đếm thành lớp để áp dụng nguyên lý cộng phân tích cấu hình cần đếm nh- việc ghép số cấu hình khác để áp dụng nguyên lý nhân D-ới mét sè kü tht ®Õm VÝ dơ Cã cách xếp ng-ời đứng thành hàng ngang cho A không đứng cạnh B ? Giải: Để đếm số cách xếp này, ta đếm phần lại: số cách xếp mà A đứng cạnh B Xem A B nh- chỗ, ta có 4!= 24 xếp Số cần đ-ợc nhân A đứng bên trái nh- bên phải B Nh- vËy cã tÊt Khoa C«ng NghƯ Th«ng Tin Tr-êng Cao Đẳng Cơ Điện Hà Nội 48 cách xếp A đứng cạnh B Toàn có 5! = 120cách xếp Từ nhận đ-ợc số cách xếp mà A không đứng cạnh B 120 48 = 72 cách Ví dụ Một đợt phát hành xổ số với số vé gồm phần: phần đầu gồm chữ lấy từ A đến Z (26 phân tử) phần sau gồm chữ số lấy từ đến 910 phân tử) Hỏi xác xuất để trúng giải độc đắc ? Giải: Tr-ớc hết ta đếm số vé đ-ợc phát hành Mỗi vé gồm phần: phần chữ phần số Phần chữ có 262 khả năng, phần số có 104 khả Theo nguyên lý nhân, số vé đ-ợc phát hành 262 x 104 = 760 000 Tõ ®ã nhËn đ-ợc xác suất để trúng giải độc đắc là: / 760 000 ~ 1,48 x 10-7 VÝ dô Cho l-ới gồm ô vuông Các nút đ-ợc đánh số từ đến n theo chiều từ trái sang phải từ đến m theo chiều từ d-ới lên (xem hình vẽ) Hỏi có đ-ờng khác từ nút (0,0) đến nút (n,m) cho phép cạnh ô vuông theo chiều sang phải lên ? (0,m) (n,m) (0,0) (n,0) Giải : Một đ-ờng nh- đ-ợc xem gồm n+m đoạn (mỗi đoạn cạnh ô vuông) Tại đoạn đ-ợc chọn giá trị : lên (mà ta mà 1) hay sang phải (mà ta mà 0) Số đoạn lên m số đoạn sang phải n Bài toán dẫn việc tìm xem có dÃy nhị phân độ dài n + m có m thành phần Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội số tập m ph©n tư cđa mét tËp n + m phần t, số đ-ờng cần đếm Cnm m VÝ dơ : Tht to¸n ‘nỉi bät’ dùng để xếp tăng dần dÃy (i = 1,2, ,n) đ-ợc mô tả đoạn ch-ơng trình PASCAL d-ới ®©y : For i : = to n Forj : = n down to i I a[ j I ] a[ j ]thenSwap (a[ j I ], a[ j ]; H·y ®Õm xem phải làm phép so sánh? Giải: Ta chia số phép so sánh thàn lớp theo vòng lặp i (i từ đến n) Với i xác định, phải thực n-i+1 phép so sánh Từ nhận đ-ợc, theo nguyên lý cộng, số phép so sánh là: (n 1) (n 2) n(n 1) Cã thể lý luận gạn hơn: thuật toán bọt viết đoạn chương trình đà cho phải so sánh tất cặp phần tử khác Từ nhận đ-ợc số phép so sánh là: C n2 n(n 1) Một đặc tính toán đếm tổ hợp số cấu hình tăng nhanh số giá trị tham gia vào việc tạo nên cấu hình tăng Điều th-ờng dẫn đến số khổng lồ số tham gia ban đầu không lớn Hiện t-ợng th-ờng đ-ợc gọi bùng nổ tổ hợp nguyên nhân làm cho thuật toán dựa vào việc duyệt toàn trở nên không khả thi Thí dụ d-ới cho thấy rằng, dù qui cách tạo cấu hình có vể hạn chế nh-ng số cấu hình đ-ợc tạo, hoá lại lớn Ví dụ Ngôn ngữ PASCAL chuẩn qui định đặt tên biến không ký tự Các ký tự tên biến đ-ợc phép chữ (từ A đến Z) chữ số (từ đến 9) phải bắt đầu chữ Hỏi định nghĩa biến khác ? Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội Giải : Ta phân biến thành lớp: 1-ký tù, … Sè c¸c biÕn thc líp k-ký tù, theo nguyên lý nhân, 26 x 36k-1 (k = 1,2, , 8) Từ đó, theo nguyên lý cộng, ta nhận đ-ợc số biến khác là: 26.(1+36+362 + … +367) = 095 681 645 538 1.2.2 Nguyªn lý bù trừ Một số toán đếm phức tạp hơn, đ-ợc dựa vào nguyên lý tổng quát nguyên lý cộng Nếu giả thiết rời tập A B N(A B) = N(A) + N(B) – N(A B) Công thức (1) đ-ợc mở rộng cho tr-ờng hợp nhiều tập nh- sau Định lý Giả sử A1,A2, , Am tập hữu hạn Khi N(A1 A2 … Am) = N1 – N2 + … + (-1)m-1 Nm , Trong Nk tổng phần tử tất giao k tập lấy từ m tập đà cho (nói riêng N1 = N(A1) + … + N(Am), Nm = N(A1 A2 Am) Chøng minh Chó ý r»ng, sè c¸c giao cña k tËp lÊy tõ m tËp b»ng C mk , , k = 1,2, …, m §Ĩ chøng minh công thức (1), ta tính xem phần tử tập A1 A2 Am đ-ợc đếm lần vế phải Xét mét phÇn tư t ý a A1 A2 Am1 Giả sử a phần tử cđa k tËp sè m tËp ®· cho Khi a đ-ợc đếm vế phải công thức (1) Ck1 Ck2 Ck3 (1) k 1 Ckk LÇn Ck1 Ck2 Ck3 (1) k 1 Ckk [1 Ck1 Ck2 Ck3 (1) k Ckk ] (1 1) k , Suy phần từ a A1 A2 Am đ-ợc tính lần vế phải công thức (1) , điều đà chứng minh tính đắn công thức (1) Bây ta đông tập Ak với tính chất Ak cho tập X đếm xem có phần tử X không thoả mÃn tính chất Aknào Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội Gọi N số cần đếm, N số phần tử X, ta có: N N N ( A1 A2 Am ) N N1 N (1) m N m (3) Trong ®ã Nk tổng phần tử X thoả mÃn k tính chất lấy từ m tính chất đà cho Công thức (3) đ-ợc gọi nguyên lý bù trừ Nó cho phép tính N qua Nk tr-ờng hợp số dễ tính toán Ta xét mét sè thÝ dơ minh ho¹ cho viƯc sư dơng nguyên lý bù trừ để giải toán đếm VÝ dô 6: Hái tËp X=[1,2,…, 10000] cã số không chia hết cho số số 3,4,7? Giải Gọi Ai x X : x chia hÕt cho i , i=3,4,7 Khi A3 A4 A7 tập sè X chia hÕt cho Ýt nhÊt mét sè 3,4,7, suy theo c«ng thøc (3), sè l-ợng số cần đếm N ( X ) N ( A3 A7 ) N1 N N Ta cã N1 N ( A3 ) N ( A4 ) N ( A7 ) [10000 / 3] [10000 / 4] [10000 / 7] 3333 2500 1428 7261, N N ( A3 A4 ) N ( A3 A7 ) N ( A4 A7 ) 10000 /(3 4) 10000 /(3 7) 10000 /( 7) 833 476 357 1666, N3 N ( A3 A4 A7 ) 10000 /(3 7) 11 Ký hiệu [r] để số nguyên lớn không v-ợt r Từ số l-ợng số cần đếm 10000-7261+1666-119=4286 1.3 Bài toán tồn ph-ơng pháp giải 1.3.1 Giới thiệu toán Trong mục tr-ớc, ta đà tập trung ý vào việc đếm số cấu hình tổ hợp (số phần tử đối t-ợng tổ hợp) thoả mÃn tính chất Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội đó, chẳng hạn đếm số tổ hợp, chỉnh hợp, hoán vị, Trong toán tồn cấu hình hiển nhiên công việc đếm số phần tử thoả mÃn tính chất đặt Tuy nhiên, nhiều baòi toán tổ hợp, việc tồn cấu hình thoả mÃn tính chất cho tr-ớc khó khăn Chẳng hạn, kỳ thủ cần phải tính toán n-ớc để giải đáp xem liệu có khả thắng hay không, mật mà giả đối ph-ơng tung nhằm đảm bảo an toàn cho điện thậtNhư vậy, tổ hợp xuất vấn đề thứ hai quan trọng là: xét tồn cấu hình tổ hợp với tính chất cho tr-ớc Các toán thuộc dạng đ-ợc gọi toán tồn tổ hợp Một toán tồn tổ hợp xem nh- giải xong cách xây dựng cấu hình, chứng minh chúng Tuy nhiên hai khả dễ Để thấy rõ phức tạp vấn đề, d-ới ta xét số toán tồn tổ hợp cổ điển tiếng 1.3.1.1 Bài toán 36 sĩ quan Bài toán đ-ợc Euler đề nghị, nội dung cđa nã nh- sau: cã mét lÇn ng-êi ta triƯu tập từ trung đoàn trung đoàn sĩ quan thuéc cÊp bËc kh¸c nhau: ThiÕu uý, trung uý, th-ợng uý, đại uý, thiếu tá, trung tá tham gia duyệt binh s- đoàn Hỏi xếp 36 sĩ quan thành đội ngũ hình vuông cho hành ngang nh- hàng dọc có đại diện trung đoàn cấp bậc Để đơn giản ta dùng chữ in hoa A, B, C, D, E, F để phiên hiệu trung đoàn chữ th-ờng a, b, c, d, e, f để cấp bậc Bài toán tổng quát hoá thay sè bëi n tr-êng hỵp n=4, mét lời giải toán 16 sĩ quan Ab Dd Ba Cc Bc Ca Ad Db Cd Bd Dc Aa Da Ac Cb Bd Mét lêi gi¶i tr-êng hợp n = Khoa Công Nghệ Thông Tin Tr-ờng Cao Đẳng Cơ Điện Hà Nội Aa Bb Cc Dd Ee Cd De Ea Ab Bc Eb Ac Bd Ce Da Be Ca Db Ec Ad De Ed Ae Ba Cb Do lời giải toán biều diễn hình vuông với chữ la tinh hoa th-ờng chồn cạnh nên toán tổng quát đặt đ-ợc biết d-ới tên gọi toán hình vuông la tinh trực giao Trong hai thí dụ ta có hình vuông la tinh trực giao cấp Euler đà nhiều công sức để tìm lời giải cho toán 36 sĩ quan nh-ng ông đà không thành công Vì ông đà đề giả thuyết cách xếp nh- không tồn Giả thuyết đ-ợc nhà toán học Pháp Tarri chứng minh năm 1901 duyệt tất khả xếp Euler vào không tồn lời giải n = n = đề giả thuyết tổng quát là; không tồn hình vuông la tinh trực giao cấp n = 4k + Giả thuyết đà tồn suốt hai kỷ mÃi đến năm 1960 ba nhà toán học Mỹ Boce, Parker, Srikanda đ-ợc lời giải với n = 10 sau ph-ơng pháp xây dựng hinh vuông la tinh trùc giao cho mäi n = 4k + 2, víi k > T-ởng chừng toán đặt có ý nghĩa tuý toán đố hãc bóa thư trÝ t ng-êi ThÕ nh-ng gÇn ng-ời ta đà phát ứng dụng quan trọng vấn đề vào quy hoạch thực nghiệm, xếp lịch thi đấu giải cờ quốc tế, hình học xạ ảnh, 1.3.1.2 Bài toán mầu Có toán mà nội dung giải thích cho ai, nhiên lời giải thử tìm, nh-ng mà khó tìm đ-ợc Ngoài định lý Fermat toán màu toán nh- Bài toán phát biểu trực quan nh- sau: chứng minh đồ mặt phẳng tô màu cho hai n-ớc láng giềng lại bị tô màu ý rằng, ta xem nh- n-ớc Khoa Công Nghệ Thông Tin 10 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Ch-ơng Bài toán đ-ờng ngắn 5.1 Các khái niệm mở đầu Nhiều toán mô hình đồ thị có trọng số Đó đồ thị mà cạnh đ-ợc gán số (nguyên thực) gọi trọng số ứng với cạnh Ví dụ ta cần mô hình hệ thống đ-ờng hàng không Trong mô hình sở tr-ớc đây, thành phố đ-ợc biểu diễn đỉnh, chuyến bay cạnh nối hai đỉnh t-ơng ứng Nếu toán xét ta cần tính đến khoảng cách thành phố ta cần gán cho cạnh đồ thị sở khoảng cách thành phố t-ơng ứng Nếu quan tâm đến thời gian chuyến bay ta gán thời l-ợng cho cạnh đồ thị sở Nếu toán xét lại tính đến tiền vé chuyến bay ta gán tiền vé nh- trọng số ứng với cạnh nối hai thành phố t-ơng ứng Trên Hình biểu diễn cạnh gán trọng số khác cho cạnh đồ thị tuỳ theo mục đích toán đặt 2534 Khoảng cách (dặm) San Francisco Chicago 1855 957 Denver 834 349 Los Angeles 908 2451 Boston 860 564 191 722 Atlanta New York 760 1090 595 Miami Khoa Công Nghệ Thông Tin 67 Tr-ờng Cao Đẳng Cơ §iƯn Hµ Néi 4:05 Thêi gian bay Chicago 2:55 San Francisco 1:25 2:20 Denver 2:00 2:10 0:50 1:50 1:40 3:50 Boston 2:10 New York 1:55 Atlanta 2:45 1:30 Los Angeles Miami $129 Gi¸ vÐ Chicago $99 San Francisco $39 $89 Denver $89 $69 2451 Boston $79 $99 $39 $59 Atlanta New York $79 $99 $69 Los Angeles Miami H×nh Các đồ thị có trọng số dùng để lập mô hình hệ thống hàng không Các đồ thị trọng số đ-ợc dùng để lập mô hình mạng máy tính Chi phí truyền thông (chẳng hạn nh- tiền thuê bao đ-ờng điện thoại hàng tháng), thời gian đáp ứng máy tính qua đ-ờng truyền thông nảy, hoăc khoảng cách giũa máy tính, tất đ-ợc nghiên cứu cách dùng đồ thị có trọng số Hình trình diễn đồ thị có trọng số ứng với ba cách gán trọng số cho cạnh đồ thị mạng máy tính: khoảng cách, thời gian đáp ứng qua mạng chi phí thuê bao hàng tháng Khoa Công Nghệ Thông Tin 68 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Boston Khoảng cách (dặm) San Francisco 329 457 Chicago 628 912 567 Denver 734 564 Atlanta 2451 678 875 Thời gian đáp øng (gi©y) 6s 3s New York 760 Los Angeles San Francisco 192 2s Miami Chicago 4s 3s Denver 5s Boston 5s 4s New York 7s Atlanta 8s 5s Los Angeles Miami Tiền thuê (mỗi tháng) San Francisco $400 $1500 $89 Denver $89 $340 Chicago $900 $1100 Los Angeles $620 $240 Atlanta $700 Boston $300 New York $120 Miami H×nh Các đồ thị có trọng số dùng để lập mô hình mạng máy tính Khoa Công Nghệ Thông Tin 69 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Trong ứng dụng gặp nhiều toán liên quan tới đồ thị có trọng số Chẳng hạn, xác định đ-ờng ngắn hai đỉnh mạng, ®ã ta coi ®é dµi cđa ®-êng ®i ®å thị có trọng số tổng số ứng với cạnh đ-ờng (Cần l-u ý khái niệm độ dài khác với khái niệm độ dài số cạnh đ-ờng đồ thị không trọng số) Một vấn đề đ-ợc đặt xác định đ-ờng ngắn nhất, tức đ-ờng có độ dài ngắn hai đỉnh đồ thị Chẳng hạn, hệ thống hàng không đ-ợc biểu diễn đồ thị cho hình 1, đ-ờng ngắn Boston Los Angeles bao nhiêu? Tổ hợp chuyến bay Boston Los Angeles có tổng thêi gian bay ( tỉng thêi gian ë trªn trêi, không kể thời gian chờ hai chuyến bay) nhỏ nhất? Hành trình nào hai thành phố rẻ nhất? Trên mạng máy tính hình đ-ờng điện thoại nối máy San Francisco máy New York đ-ờng có chi phí rẻ nhất? Đ-ờng cho thời gian trả lời nhanh cho truyền thông máy San Francisco máy New York? Đ-ờng có khoảng cách không gian ngắn nhất? 5.2 Thuật toán Dijkstra Có số thuật toán tìm đ-ờng ngắn hai đỉnh đồ thị có träng sè Chóng ta sÏ giíi thiƯu tht to¸n E.Dijkstra, nhà toán học ng-ời Hà Lan, đề xuất năm 1959 Trong phiên mà ta trình bày, ng-ời ta giả sử đồ thị vô h-ớng, trọng số d-ơng Chỉ cần thay đổi đôi chút giải đ-ợc toán đ-ờng ngắn đồ thị có h-ớng Tr-ớc trình bày thuật toán ta xét ví dụ minh hoạ Ví dụ Tính độ dài đ-ờng ngắn a z đồ thị có trọng số ghi hình Khoa Công Nghệ Thông Tin 70 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Giải Mặc dù đ-ờng ngắn b dễ dàng tìm đ-ợc c¸ch kiĨm tra trùc tiÕp, nh-ng c a z chóng ta sÏ ph¸t triĨn mét sè e ý t-ëng gióp ta dƠ hiĨu tht d toán Dijkstra Hình Đơn đồ thị có trọng số Ta tìm độ dài đ-ờng ngắn từ a đến đỉnh đạt tới đỉnh z Chỉ có hai đỉnh b d liên thuộc với a nên có hai đ-ờng xuất phát từ a a, b a, d, với độ dài t-ơng ứng Do d đỉnh gần a Bây ta tìm đỉnh gần a tất đ-ờng qua a d (cho đến đạt tới đỉnh cuối cùng) Đ-ờng nh- ngắn tới b a, b với độ dài 4, đ-ờng nh- ngắn tới e a, d, e, độ dài Do đỉnh gần a b Để tìm đỉnh thứ gần a nhất, ta xét đ-ơng qua a, d b (cho tới đạt tới đỉnh cuối cùng) Đó đ-ờng a ,b ,c độ dài đ-ờng a, d, e, z độ dài Vậy z đỉnh gần a độ dài đ-ờng ngắn từ a tới z Ví dụ1 minh hoạ nguyên tắc chung dùng thuật toán Dijkstra Đ-ờng ngắn từ a tới z tìm đ-ợc cách kiểm tra trực tiếp Nh-ng cách hoàn toàn không dùng đ-ợc cho ng-ời máy đồ thị có nhiều cạnh Bây nghiên cứu toán tìm độ dài đ-ờng ngắn a z đơn đồ thị liên thông, vô h-ớng có trọng số Thuật toán Dijkstra đ-ợc thực cách tìm độ dài đ-ờng ngắn từ a tới hai, v.v, tìm đ-ợc độ dài đ-ờng ngắn từ a tới đỉnh z Khoa Công Nghệ Thông Tin 71 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Thuật toán dựa dÃy b-ớc lặp Một tập đặc biệt đỉnh đ-ợc xây dựng cách cộng thêm đỉnh b-ớc lặp Thủ tục gán nhÃn đ-ợc thực lần lặp Trong thủ tục gán nhÃn này, đỉnh w đ-ợc gán nhÃn độ dài đ-ờng ngắn từ a tới w qua đỉnh thuộc tập đặc biệt Một đỉnh đ-ợc thêm vào tập đỉnh có nhÃn nhỏ so với đỉnh ch-a có trongg tập Bây ta đ-a chi tiết thuật toán Dijkstra Đầu tiên gán cho đỉnh a nhÃn đỉnh khác Ta ký hiệu L0 (a) vµ L0 (v) cho tất đỉnh khác (b-ớc lặp thứ 0) Các nhÃn độ dài đ-ờng ngắn từ đỉnh a tới đỉnh này, đ-ờng chứa đỉnh a (Vì đ-ờng từ a tới đỉnh khác a nên độ dài đ-ờng ngắn a đỉnh này) Theo thuật toán Dijkstra ta xây dựng tập đặc biệt đỉnh Gọi Sk tập sau b-ớc lặp thứ k thủ tục gán nhÃn Chúng ta bắt đầu S0 Tập Sk đ-ợc tạo thành từ Sk-1 cách thêm vào đỉnh u không thuộc Sk-1 có nhÃn nhỏ Khi đỉnh u đ-ợc gộp vào Sk sửa đổi nhÃn đỉnh không thuộc Sk cho Lk(v) , nhÃn v b-ớc k, độ dài đ-ờng ngắn từa tới a tới v mà đ-ờng chứa đỉnh thuộc Sk (tức đỉnh thuộc tập đặc biệt với u) Giả sử v đỉnh không thuộc Sk Để sửa nhÃn v ta thấy Lk(v) độ dài đ-ờng ngắn từ a tới v chứa đỉnh thuộc Sk Để sửa đổi nhÃn ta l-u ý đ-ờng ngắn từ a tới v chứa phần tử Sk đ-ờng ngắn từ a tới v chứa phần tử Sk-1 đ-ờng ng¾n nhÊt tõ a tíi u ë b-íc k-1 cïng với cạnh (u, v) Nói cách khác ta có Lk (a, v) minLk 1 (a, v), Lk 1 (a, u) w(u, v) Thủ tục đ-ợc lặp cách liên tiếp thêm đỉnh vào tập đặc biệt đỉnh đạt tới đỉnh z Khi thêm z vào tập đặc biệt đỉnh nhÃn độ dài đ-ờng ngắn từ a tới z Thuật toán Khoa Công Nghệ Thông Tin 72 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Dijkstra đuợc cho thuật toán Sau chứng minh thuật toán Thuật toán Thuật toán Dijkstra Procedure Dijkstra (G: đơn đồ thị liên thông có trọng số, với trọng số d-ơng) {G có đỉnh a = v0, v1,,vn= z trọng sè w(vi, vj), víi w(vi , v j ) {vi,vj} không cạnh G} for i: =1 to n L(vi ) : L(a) : S : {Ban đầu nhÃn đ-ợc khởi tạo cho nhÃn a không, đỉnh khác , tập S rỗng} While z S begin u:= đỉnh không thuộc S có nhÃn L(u) nhá nhÊt S : S u for tÊt đỉnh v không thuộc S If L(u) + w(u,v) < L(v) then L(v):=L(u) + w(u,v) {thêm vào S ®Ønh cã nh·n nhá nhÊt, vµ sưa ®ỉi nh·n cđa đỉnh không thuộc S} end {L(z) = độ dài ®-êng ®i ng¾n nhÊt tõ a tíi z} VÝ dơ sau minh hoạ cách hoạt động thuật toán Dijkstra Sau thuật toán có độ dài đ-ờng ngắn hai đỉnh đồ thị có trọng số Ví dụ Dùng thuật toán Dijkstra hÃy tìm độ dài đ-ờng ngắn hai đỉnh a z đồ thị có trọng số hình 4a Khoa Công Nghệ Thông Tin 73 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Giải: Các b-ớc thuật toán Dijkstra tìm độ dài đ-ờng ngắn hai đỉnh a z đ-ợc biểu diễn hình Tại b-ớc lặp thuật toán đỉnh tập S đ-ợc khoanh tròn Đ-ờng ngắn chứa đỉnh đà thuộc từ a tới đỉnh đ-ợc in cho b-ớc lặp Thuật toán kết thúc z đ-ợc khoanh tròn Ta nhận đ-ợc đ-ờng ngắn từ a tới z a, c, b, c ,e, z với độ dài 13 Bây dùng lý luận để chứng minh thuật toán Dijkstra cho độ dài đ-ờng ngắn đỉnh a z đồ thị vô h-ớng liên thông có trọng số Tại b-ớc k ta có giả thiết quy nạp : nhÃn đỉnh v S độ dài đ-ờng ngắn từ đỉnh a (i) tới đỉnh (ii) nhÃn đỉnh v không thuộc S độ dài đ-ờng ngắn từ đỉnh a tới đỉnh đ-ờng chứa đỉnh (ngoài đỉnh này) thuộc S Khi k=0, tức ch-a có b-ớc lặp đ-ợc thực hiện, S= {a} độ dài đ-ờng ngắn từ a tới đỉnh khác a độ dài đ-ờng ngắn từ a tới (ở ta cho phép đ-ờng cạnh) Vì b-ớc sở d 0a c 10 (a) b z a e Khoa C«ng NghƯ Th«ng Tin 4(a) 74 10 c 2(a) (b) d z e Tr-ờng Cao Đẳng Cơ Điện Hà Nội b 3(a,c) a c d10(a,c) z e 12(a,c) 10 2(a) b 3(a,c) c 10 2(a) a (c) b 3(a,c) a c d8(a,c,b) z c 10 2(a) a b 3(a,c) c 10 2(a) a e 10(a,c,d,b) (e) 3(a,c) z e 12(a,c) (d) 10 2(a) b d 8(a,c,b) d 8(a,c,b) z 14(a,c,b,d,e) e 10(a,c,d,b) (e) d z 13(a,c,b,d,e) e 10(a,c,d,b) (e) Hình Dùng thuật toán Dijkstra tìm đ-ờng ngắn từ đỉnh a tới z Giả sử giả thiết quy nạp với b-ớc k Gọi v đỉnh thêm vào S buớc lặp k+1, v đỉnh không thuộc S ë cuèi b-íc k cã nh·n nhá nhÊt (nÕu cã nhiều đỉnh có nhÃn nhỏ chọn đỉnh làm v) Từ giả thiết quy nạp ta thấy tr-ớc vào vòng lặp thứ (k+1) đỉnh thuộc S đà đ-ợc gán nhÃn độ dài của đ-ờng ngắn từ a Đỉnh v phải đ-ợc gán nhÃn độ dài đ-ờng ngắn từ a Nếu điều không xảy ra, cuối b-ớc lặp thứ k có đ-ờng có độ dài nhỏ Lk(v) chứa đỉnh không thuộc S (vì Lk(v) độ dài đ-ờng ngắn Khoa Công Nghệ Thông Tin 75 Tr-ờng Cao Đẳng Cơ Điện Hà Nội từ a tới v chứa đỉnh thuộc S sau b-ớc lặp thứ k) Gọi u đỉnh đ-ờng không thuộc S Đó đ-ờng có độ dài nhỏ từ a tới u chứa đỉnh S Điều trái với cách chọn v Vì thế, (i) cuối b-ớc lặp (k+1) Gọi u đỉnh không thuộc S sau b-ớc (k+1) Đ-ờng ngắn từ a tới u chứa đỉnh thuộc S chứa v không Nếu không chứa v theo giả thiết quy nạp độ dµi cđa nã lµ Lk(u) NÕu nã chøa v tạo thành đ-ờng từ a tới v với độ dài ngắn chứa đỉnh S khác v , kết thúc cạnh từ v tới u Khi độ dài Lk(v) +w(v,u) Điều chứng tỏ (ii) đúng, Lk+1(u) = min{ Lk(u), Lk(v) +w(v,u)} Định lý sau đà đ-ợc chứng minh Định lý Thuật toán Dijkstra tìm đ-ợc đ-ờng ngắn hai đỉnh đồ thị đơn vô h-ớng liên thong có trọng số Bây đánh giá độ phức tạp tính toán thuật toán Dijkstra (qua phép cộng so sánh) Thuật toán dùng không n-1 b-ớc lặp, đỉnh thêm vào tập đặc biệt taị b-ớc lặp Bây giê ta sÏ -íc tÝnh sè phÐp to¸n dïng môĩ b-ớc lặp Ta xác định đỉnh không thuộc Sk có nhÃn nhỏ nhờ không n-1 phép so sánh Sau ta dùng phép cộng so sánh để sửa đổi nhÃn ®Ønh kh«ng thuéc Sk Tõ ®ã suy r»ng cã không 2(n-1) phép toán đ-ợc dùng b-ớc lặp, có không n-1 nhÃn cần sửa đổi môĩ b-ớc lặp Vì ta không dùng n-1 b-ớc lặp, b-ớc dùng không 2(n-1) phép toán, nên ta có định lý sau Định lý Thuật toán Dijkstra dùng o(n2) phép toán (cộng so sánh) để tìm độ dài đ-ờng ngắn hai đỉnh đồ thị đơn vô h-ớng cã träng sè Khoa C«ng NghƯ Th«ng Tin 76 Tr-êng Cao Đẳng Cơ Điện Hà Nội 5.3 Thuật toán Floyd Thuật toán Floyd để tìm độ dài đ-ờng ngắn tất cặp đỉnh đồ thị đơn liên thông có trọng số Tuy nhiên, thuật toán dùng để xây dựng đ-ờng ngắn (D-ới đây, ta gán trọng số vô lớn cho cặp đỉnh không nối cạnh đồ thị) Thuật toán Thuật toán Floyd Procedure Floyd (G: đơn đồ thị có trọng số) {G có đỉnh v1,v2,,vn trọng số w(vi, vj)= (vi,vj) không cạnh} for i: =1 to n for j: =1 to n d(vi,vj):=w(vi,vj) for i: =1 to n for j: =1 to n for k: =1 to n If d(vj,vi) + d(vi,vk) < d(vj,vk) then d(vj,vk):= d(vj,vi) + d(vi,vk) { d(vi,vj) độ dài đ-ờng ngắn vi vj } 5.4 Bài tập Với toán sau hệ thống giao thông, hÃy mô tả mô hình đồ thị có trọng số dùng để giải toán a) Tính tổng thời gian nhỏ cần để hai bến đỗ ? b) Xácđịnh khoảng cách ngắn từ bên đến bến khác ? c) Giá rẻ cho hành trình hai bến xe, giá vé bến đỗ tổng giá vé bến trung gian ? Trong tâp 2-4 hÃy tìm độ dài đ-ờng ngắn a z đồ thị có trọn số ®· cho Khoa C«ng NghƯ Th«ng Tin 77 Tr-êng Cao Đẳng Cơ Điện Hà Nội b c 2 a z e d 5 b a d f z c e g b a h d f z 4 c e g Tìm đ-ờng ngắn hai đỉnh a z đồ thị đơn có trọng số tâp 2-4 Tìm độ dài đ-ờng ngắn cặp đỉnh sau đồ thị bµi tËp a) a vµ d b) a vµ f c) c vµ f d) b vµ z Tìm đ-ờng ngắn đồ thị tập 3, cặp đỉnh tập Khoa Công Nghệ Thông Tin 78 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Tìm đ-ờng ngắn (ra dặm) cặp thành phố mạng hàng không cho Hình a) New York Los Angeles b) Boston vµ San Francisco c) Miami vµ Denver d) Miami Los Angerles Tìm tổ hợp c¸c chun bay víi tỉng thêi gian bay Ýt nhÊt cặp thành phố tập 8, thời gian bay cho Hình 10 Tìm tổ hợp chuyến bay với giá vé rẻ cặp thành phố tập 8, giá vé cho Hình 11 Tìm đ-ờng nắn (khoảng cách ) hai trung tâm máy tính cặp thành phố sau mạng truyền thông Hình2 a) Boston Los Angerles b) New York San Francisco c) Dalas vµ San Francisco d) Denver vµ New York 12 Tìm đ-ờng có thời gian đáp ứng hai trung tâm máy tính cặp thành phố nh- Bài tập 11,với thời gian đáp ứng cho Hình 13 Tìm đ-ờng có giá chi phí hai trung tâm máy tính mỗicặp thành phố nh- Bài tập 11,với giá chi phí cho Hình Khoa Công Nghệ Thông Tin 79 Tr-ờng Cao Đẳng Cơ Điện Hà Nội Mục lục Ch-ơng Lý thuyết tổ hợp 1.1 Sơ l-ợc tỉ hỵp 1.1.1 Quy t¾c céng 1.1.2 Quy tắc nhân: 1.1.3 C¸c cấu hình tổ hợp đơn giản: 1.1.3.1 Hoán vị 1.1.3.2 ChØnh hỵp: 1.1.3.3 Tỉ hỵp: 1.2 Bài toán đếm ph-ơng pháp giải 1.2.1 Giíi thiệu toán 1.2.2 Nguyªn lý bï trõ 1.3 Bài toán tồn ph-ơng pháp giải 1.3.1 Giíi thiệu toán 1.3.1.1 Bài toán 36 sÜ quan 1.3.1.2 Bài toán mầu 10 1.3.1.3 Hình lục giác thần bí 12 1.3.1.4 Bài toán chọn 2n ®iĨm trªn l-íi n x n ®iĨm 12 1.3.1.5 Ph-ơng pháp phản chứng 12 1.3.2 Nguyªn lý Dirichlet 14 1.3.3 Hệ đại diện phân biệt 18 1.4 Bài toán liệt kê ph-ơng pháp giải 22 1.4.1 Giíi thiƯu bµi to¸n 22 1.4.2 Thuật toán độ phức tạp tính to¸n 22 1.4.2.1 Kh¸i niƯm tht to¸n 23 1.5 Bµi tËp 25 Ch-ơng Các khái niệm lý thuyết đồ thị 28 Khoa Công Nghệ Thông Tin 80 Tr-ờng Cao Đẳng Cơ Điện Hà Nội 2.1 Định nghĩa đồ thị 28 2.2 Các thuật ngữ 31 2.3 Đ-ờng đi, chu trình Đồ thị liên thông 32 2.4 Bµi tËp 34 Ch-¬ng BiƠu diễn đồ thị thuật toán tìm kiếm 35 3.1 Ma trận trọng số danh sách cạnh 36 3.1.1 Ma trËn träng sè 36 3.1.2 Danh sách cạnh (cung) 37 3.2 Tìm kiếm theo chiều rộng chiều sâu 38 3.2.1 T×m kiÕm theo chiỊu sâu đồ thị 38 3.2.2 Tìm kiếm theo chiều rộng đồ thÞ 40 3.3 Mét sè øng dông 42 3.4 Bµi tËp 44 Ch-ơng Cây Và Cây Khung Của Đồ Thị 45 4.1 Cây tính chất 45 4.2 C©y khung nhá đồ thị 47 4.2.1 ThuËt to¸n Kruskal 49 4.2.2 ThuËt to¸n Prim 57 4.2.3 Mét sè bµi toán dẫn toán khung nhỏ 60 4.3 Xây dựng tập chu trình đồ thị 61 4.4 Bµi tËp 63 Ch-¬ng Bài toán đ-ờng ngắn 67 5.1 Các khái niệm mở đầu 67 5.2 ThuËt to¸n Dijkstra 70 5.3 ThuËt to¸n Floyd 77 5.4 Bµi tËp 77 Khoa C«ng NghƯ Th«ng Tin 81 ... niệm thuật toán, trình bày hai ph-ơng pháp liệt kê th-ờng sử dụng nhất, Thuật toán sinh đặc biệt thuật toán quay lùi, thuật toán có tính phổ dụng cao 1.4.2 Thuật toán độ phức tạp tính toán Nh-... hàng chục Rất may toán khung nhỏ đà có thuật toán hiệu ®Ĩ gi¶i chóng Chóng ta sÏ xÐt hai sè thuật toán nh- vậy: Thuật toán Kruskal thuật toán Prim 4.2.1 Thuật toán Kruskal Thuật toán xây dựng tập... b-íc thuật toán, x đ-ợc đặt 31, không phụ thuộc vào việc thuật toán đ-ợc thực b»ng tay hay bëi m¸y tÝnh Tht to¸n kÕt thóc sau ba b-ớc đ-a lời giải toán, vậy, thuật toán hữu hạn Thuật toán trình bày