Các bài toán cơ bản của lý thuyết tổ hợp

132 19 0
Các bài toán cơ bản của lý thuyết tổ hợp

Đ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

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Lê Thị Thanh Tâm CÁC BÀI TOÁN CƠ BẢN CỦA LÝ THUYẾT TỔ HỢP Chuyên ngành: PHƯƠNG PHÁP TOÁN SƠ CẤP Mã số: 60.46.0113 LUẬN VĂN THẠC SỸ TOÁN HỌC Người hướng dẫn khoa học TS Phạm Văn Thạo HÀ NỘI- 2014 Mục lục Mở đầu Bài toán tồn 1.1 Giới thiệu toán 1.2 Các phương pháp chứng minh tồn 1.2.1 Phương pháp chứng minh phản chứng 1.2.2 Nguyên lý Diriclet Bài toán liệt kê 2.1 Giới thiệu toán 2.2 Thuật tốn độ phức tạp tính tốn 2.2.1 Khái niệm thuật toán 2.2.2 Mơ tả thuật tốn ngơn ngữ 2.2.3 Độ phức tạp thuật toán 2.3 Phương pháp sinh 2.4 Thuật toán quay lui PASCAL 16 39 39 40 40 41 43 45 48 52 52 52 52 65 68 70 75 75 Bài toán đếm 3.1 Các toán đếm 3.1.1 Giới thiệu toán 3.1.2 Các quy tắc đếm 3.1.3 Tam giác Pascal nhị thức Newton 3.1.4 Nguyên lý bù trừ 3.1.5 Hệ thức truy hồi 3.2 Phân loại toán đếm 3.2.1 Bài tốn đếm có sử dụng hai quy tắc đếm 3.2.2 Bài toán đếm số tự nhiên thỏa mãn điều kiện cho trước 3.2.3 Phương trình, hệ phương trình, bất phương trình đẳng thức chứa cơng thức tổ hợp 3.2.4 Bài tốn đếm đối tượng hình học 3.2.5 Bài toán phân chia (hoặc lấy ra) đồ vật vào (hoặc khỏi) hộp 77 80 83 84 3.2.6 3.2.7 3.2.8 3.2.9 Hệ số ak xk khai triển Newton Bài tập nguyên lý bù trừ Bài tập hệ thức truy hồi Đẳng thức phương trình liên quan đến khai Newton triển Bài toán tối ưu 4.1 Giới thiệu toán 4.2 Bài toán tối ưu đồ thị 4.2.1 Các khái niệm lý thuyết đồ thị 4.2.2 Biểu diễn đồ thị ma trận 4.2.3 Bài tốn tìm bao trùm có trọng số nhỏ 4.2.4 Bài tốn tìm đường có trọng số nhỏ Kết luận Tài liệu tham khảo 88 90 91 96 108 108 108 108 117 120 126 130 131 Lời cảm ơn Tác giả xin chân thành cảm ơn tập thể cán bộ, giảng viên trường Đại học Khoa học Tự nhiên - Đại học Quốc gia Hà Nội tạo điều kiện giúp đỡ tác giả suốt trình học tập hồn thành luận văn tốt nghiệp Tác giả xin bày tỏ lịng kính trọng biết ơn sâu sắc đến TS Phạm Văn Thạo Thầy dành nhiều thời gian hướng dẫn giải đáp thắc mắc tác giả suốt trình tơi thực đề tài Tác giả xin chân thành cảm ơn Lãnh đạo đồng nghiệp trường THPT Chuyên Ngoại Ngữ - Đại học Ngoại Ngữ - ĐHQGHN tạo điều kiện thuận lợi giúp đỡ tác giả suốt trình học tập thực luận văn Tác giả xin cảm ơn bạn đồng khóa, gia đình bạn bè quan tâm giúp đỡ, động viên, tạo điều kiện thuận lợi cho tác giả suốt trình học tập hồn thành luận văn Mặc dù có nhiều cố gắng, song luận văn tránh khỏi thiếu sót, tác giả mong nhận ý kiến dẫn, đóng góp thầy cô bạn Trân trọng! Hà Nội, tháng 08 năm 2014 Học viên Lê Thị Thanh Tâm Mở đầu Các vấn đề liên quan đến lý thuyết tổ hợp phận quan trọng, hấp dẫn lý thú Tốn học nói chung Tốn học rời rạc nói riêng Tư tổ hợp xuất từ sớm lịch sử phát triển nhân loại đến kỉ thứ 17 hình thành ngành tốn học loạt cơng trình tiếng nhà tốn học Pascal, Fermat, Lenibniz, Euler, Kể từ sau tin học đời, lý thuyết tổ hợp phát triển ngày mạnh mẽ, có nội dung phong phú ứng dụng nhiều thực tế đời sống Trong toán học sơ cấp, tổ hợp xuất với nhiều tốn hay với độ khó cao Những bắt đầu làm quen với khái niệm tổ hợp thường khó hình dung hết độ phức tạp về cấu trúc tập đặc biệt Do tơi chọn đề tài "bài tốn lý thuyết tổ hợp" Luận văn trình bày bốn toán lý thuyết tổ hợp, xây dựng số toán áp dụng Luận văn gồm phần mở đầu, bốn chương, kết luận danh mục tài liệu tham khảo Chương 1: Bài toán tồn Trong chương tác giả giới thiệu toán tồn ba toán cổ tiếng toán bẩy cầu Euler, toán bốn màu toán chọn 2n điểm lưới n.n điểm Trong chương tác giả nêu hai phương pháp chứng minh tồn phương pháp chứng minh phản chứng phương pháp sử dụng nguyên lý Diriclet Chương 2: Bài toán liệt kê Chương trình bày theo bốn mục bao gồm: giới thiệu toán, thuật toán độ phức tạp tính tốn với phương pháp sinh thuật tốn quay lui Chương 3: Bài toán đếm Đây nội dung luận văn Trong chương tác giả nêu toán đếm bản, phân loại toán đếm theo dạng tập cụ thể Trong dạng tác giả có ví dụ minh họa tập tự luyện Chương 4: Bài toán tối ưu Trong chương tác giả giới thiệu toán, nhắc lại khái niệm lý thuyết đồ thị, biểu diễn đồ thị ma trận trình bày hai tốn là: Bài tốn tìm bao trùm có trọng số nhỏ tốn tìm đường có trọng số nhỏ Mặc dù thân cố gắng nghiêm túc học tập nghiên cứu khoa học thời gian có hạn, kiến thức thân hạn chế nên q trình thực luận văn khơng tránh khỏi sơ suất Rất mong nhận góp ý thầy cô bạn Tôi xin chân thành cảm ơn Chương Bài toán tồn 1.1 Giới thiệu toán Trong nhiều 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 Bài tốn bẩy cầu nhà toán học Euler vào thể kỉ XVIII khiến người dân thành phố Konigsberg nhà toán học thời bao cơng tìm kiếm lời giải Hay đơn giản hơn, kì thủ cần phải tính tốn nước để giải đáp xem liệu có khả thắng hay khơng, người giải mật mã cần tìm chìa khố giải cho mật mã mà liệu có điện thật mã hố đối phương hay khơng, mật mã giả đối phương tung nhằm đảm bảo an toàn cho điện thật Như vậy, tổ hợp xuất vấn đề quan trọng 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 gọi toán tồn tổ hợp Một toán tồn tổ hợp xem giải xong cách xây dựng cấu hình chứng minh chúng khơng tồn Tuy nhiên, hai khả dễ Để thấy rõ phức tạp vấn đề, xin xét số toán tồn cổ điển tiếng a, Bài toán bẩy cầu Euler Thành phố Konigsberg thuộc Thổ (bây gọi Kaliningrad thuộc cộng hoà Nga), chia thành bốn vùng nhánh sông Pregel Các vùng gồm hai vùng bên bờ sông, đảo Kneiphof miền nằm hai nhánh sông Pregel Vào kỉ XVIII, người ta xây bẩy cầu nối vùng với Hình 1, vẽ vùng cầu qua sông thành phố Vào chủ nhật người dân thường dọc theo phố Họ tự hỏi khơng biết xuất phát điểm thành phố qua tất cầu, cầu lần, trở điểm xuất phát khơng Nhà tốn học Thụy Sĩ, Leonhard Euler, giải tốn Lời giải ơng cơng bố năm 1736 ứng dụng lý thuyết đồ thị Ông chứng minh khơng có đường thoả mãn u cầu toán (lời giải chi tiết xin trình bày rõ chương IV) b, Bài tốn bốn màu Có tốn mà nội dung giải thích cho ai, lời giải tự tìm mà khó tìm Ngồi định lý Fermat tốn bốn màu tốn Bài tốn phát biểu trực quan sau: Chứng minh đồ mặt phẳng tơ bốn màu cho khơng có hai nước láng giềng tô màu Chú ý ta xem nước vùng liên thông hai nước gọi láng giềng chúng có chung biên giới đường liên tục Con số ngẫu nhiên, người ta chứng minh đồ tô với số màu lớn 4, cịn với số màu không tô được, chẳng hạn đồ gồm bốn nước hình khơng thể tơ với số màu Bài tốn xuất vào khoảng năm 1850 - 1852 từ nhà buôn người Anh Gazri, tô đồ hành nước Anh cố gắng chứng minh tơ màu Sau đó, năm 1952, ông viết thư cho De Morgan để thông báo giả thuyết Năm 1878, Keli báo đăng tuyển tập cơng trình Hội tốn học Anh có hỏi tốn giải hay chưa? Từ tốn trở thành tiếng kỉ, có nhiều người làm tốn nghiệp dư chuyên nghiệp cố gắng chứng minh giả thuyết Tuy nhiên, đến năm 1976 hai nhà toán học Mỹ K.Appel W.Haken chứng minh giả thuyết máy tính điện tử c, Bài tốn chọn 2n điểm lưới n × n điểm Chọn lưới vng gồm n × n điểm Hỏi chọn số chúng 2n điểm cho khơng có ba điểm chọn thẳng hàng hay không? người ta biết lời giải n 15 Hình cho lời giải toán với n = 12 1.2 1.2.1 Các phương pháp chứng minh tồn Phương pháp chứng minh phản chứng Phương pháp chứng minh phản chứng có lẽ phương pháp chứng minh sớm mà loài người biết đến, đặc biệt nghệ thuật diễn thuyết tranh luận Trong toán học, phương pháp chứng minh phản chứng thường sử dụng, đặc biệt cần chứng minh tính đối tượng T thoả mãn điều kiện cho trước (mà tồn T chứng minh trước đó) ta thường giả sử ∀T = T ; T thoả mãn điều kiện đó, từ suy điều vơ lý Vậy điều giả sử sai, tức T a, Cơ sở lý thuyết Giả sử ta phải chứng minh mệnh đề có dạng P =⇒ Q với P giả thiết, Q kết luận Ta tiến hành sau: Bước 1: Giả sử Q sai Bước 2: Từ giả sử Q sai từ P ta dùng lập luận, suy diễn để dẫn đến điều vô lý Bước 3: Từ ta suy Q Chú ý 1.1 Ta dùng phương pháp chứng minh phản chứng để chứng minh nguyên lý Diriclet Do đó, với nhiều tốn ta chứng minh ngun lý Diriclet phương pháp chứng minh phản chứng b, Phương pháp giải tốn qua ví dụ 117 nghĩa dễ thấy thành phần liên thông rừng Các đỉnh bậc gọi đỉnh hay đỉnh cuối, đỉnh bậc lớn gọi đỉnh cành hay đỉnh Định lý 4.4 [Định lý móc xích kiểu hoa cúc] Giả sử T = (V ; E) đồ thị vơ hướng khơng có khun Khi đó, khẳng định sau tương đương với nhau: (a) T (b) T khơng chứa chu trình |E| = |V | − (c) T liên thông |E| = |V | − (d) T đồ thị liên thơng xóa cạnh đồ thị nhận khơng liên thơng (e) Hai đỉnh khác T nối với đường (f) T khơng chứa chu trình, ta thêm cạnh nối hai đỉnh khơng kề T đồ thị nhận có chu trình 4.2.2 Biểu diễn đồ thị ma trận Biểu diễn đồ thị mặt phẳng biểu diễn cho phép ta nhìn nhận đối tượng trực quan Tuy nhiên ta cần tới cách biểu diễn khác đồ thị để đáp ứng đòi hỏi khác ứng dụng Chẳng hạn để chạy phương trình giải tốn tối ưu đồ thị ta cần tới biểu diễn đồ thị nhớ máy tính Một cách biểu diễn phương pháp sử dụng ma trận a) Biểu diễn đồ thị ma trận kề Giả sử G = (V ; E) đồ thị có hướng với V = {v1 ; v2 ; · · · ; } Khi ma trận kề đồ thị G ma trận:   a11 a12 a1n  a21 a22 a2n  A = (aij )n.n =   an1 an2 ann Ở đây: aij = (vi ; vj ) ∈ E (vi ; vj ) ∈ /E 118 Dễ thấy ma trận kề A đồ thị có hướng G hồn tồn xác định G Vì vậy, ma trận kề A coi biểu diễn G Ví dụ 4.8 Giả sử G = (V ; E) với V = {v1 ; v2 ; v3 ; v4 ; v5 ; v6 } E = {e1 ; e2 ; · · · ; e10 } đồ thị có hướng biểu diễn hình Khi ma trận kề G ma trận:   1 0 0 0 0 0 0 0 0  A= 0 0 0 1 0 0 0 1 b) Biểu diễn đồ thị ma trận liên thuộc Giả sử G = (V ; E) đồ thị có hướng với V = {v1 ; v2 ; · · · ; } E = {e1 ; e2 ; · · · ; em } Khi ma trận liên thuộc đồ thị G ma trận: b11 b12  b21 a22 =  bn1 bn2  B = (bij )n.m  b1m b2m   bnm Ở đây:  vi đỉnh đầu cuả ej 1 bij = −1 vi đỉnh cuối không đỉnh đầu ej  vi không liên thuộc với ej Ma trận liên thuộc B hoàn toàn xác định đồ thị có hướng G Vì B coi biểu diễn G 119 Ví dụ 4.9 Giả sử G = (V ; E) đồ thị có hướng cho Khi ma trận liên thuộc G ma trận:  1 0 0 −1 −1 0 0 −1 1  −1 0 −1 0 0 B=  0 0 −1 0  0 −1 −1 0 0 0 1 hình vextrene  0 0  0 0 b) Biểu diễn đồ thị ma trận trọng số Giả sử G = (V ; E; f ; g) đồ thị có hướng có trọng số Ở đây, V = {V = v1 ; v2 ; · · · ; } f : V −→ Wv g : E −→ WE Khi G biểu diễn ma trận trọng số cung C ma trận trọng số đỉnh D Ma trận trọng số cung C G ma trận:   c11 c12 c1n  c21 c22 c2n  C = (cij )n.n =   cn1 cn2 cnn Ở đây:  g(vi ; vj ) (vi ; vj ) ∈ E cij = i = j (vi ; vj ) ∈ /E  ∞ i = j (vi ; vj ) ∈ /E Ví dụ 4.10 Giả sử G = (V ; E; g) đồ thị có trọng số có hướng biểu diễn hình Khi G biểu diễn ma trận:   ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞  ∞ ∞  B= ∞ ∞ ∞  ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 120 4.2.3 Bài tốn tìm bao trùm có trọng số nhỏ Giả sử G = (V ; E) đồ thị vơ hướng liên thơng Khi đồ thị T = (V ; E ) G gọi bao trùm G T V =V Tương tự, giả G = (V ; E) đồ thị vơ hướng bất kì, G1 ; G2 ; · · · ; Gk thành phần liên thông G T1 ; T2 ; · · · ; Tk tương ứng bao trùm G1 ; G2 ; · · · ; Gk Khi rừng bao gồm T1 ; T2 ; · · · ; Tk gọi rừng bao trùm G Bây giả sử G = (V ; E; w) đồ thị vơ hướng có trọng số liên thơng, w : E −→ R hàm trọng lượng cạnh với giá trị số thực Với bao trùm T = (V ; E ) đồ thị có trọng số G, ta định nghĩa trọng số T , kí hiệu w(T ) giá trị: w(T ) = w(l) l∈E Bài tốn tìm bao trùm có trọng số nhỏ nhất: Cho đồ thị có trọng số G = (V ; E; w) nói Hãy tìm bao trùm T = (V ; E ) G cho trọng số w(T ) T nhỏ số trọng số bao trùm G a) Thuật toán Kruskal Thuật toán: Giả sử G = (V ; E; w) đồ thị trọng số vô hướng liên thông với w : E −→ R Bước 1: Xuất phát thuật toán từ đồ thị T = (V ; E ) với V := V ; E := E Mỗi thành phần liên thông đồ thị T xuất phát bao gồm đỉnh Bước 2: Sắp xếp cạnh trọng đồ G thành dãy S theo thứ tự không giảm trọng lượng cạnh Bước 3: Lấy cạnh dãy S chẳng hạn cạnh e = xy , ta xét: Nếu hai đỉnh đầu mút x y e thuộc hai thành phần liên thông khác C1 C2 T S = S\ {e} ; E = E ∪ {e} ta nhập C1 với C2 thành thành phần liên thông đồ thị T nhận Ngược lại, S := S\ {e} ; E := E thành phần liên thông T khơng thay đổi Bước 4: Nếu T cịn đồ thị khơng liên thơng ta quay lại bước 3; 121 T thành đồ thị liên thơng ta dừng thuật tốn Khi đồ thị T = (V ; E ) nhận bao trùm có trọng số nhỏ đồ thị G Định lý 4.5 Với đồ thị vơ hướng có trọng số G = (V ; E; w), w : E −→ R Thuật tốn Kruskal ln tìm bao trùm có trọng số nhỏ G Ví dụ 4.11 Bài tốn: Sử dụng thuật tốn Kruskal tìm bao trùm có trọng số nhỏ đồ thị có trọng số G = (V ; E; w) biểu diễn hình: Lời giải Bước 1: V := {s; a; b; c; d; e; f ; t} E := d T := {V ; E } C := {{s} ; {a} ; {b} ; {c} ; {d} ; {e} ; {f } ; t} C tập thành phần liên thông củaT Bước 2: Sắp xếp cạnh G thành dãy S theo thứ tự không giảm trọng lượng: S := {ed; ae; ad; be; ab; bc; ec; ef ; cf ; dt; sa; sb; sc; f t; et} Bước 3: Lấy cạnh dãy S cạnh ed xét Vì ed có đỉnh đầu mút e d thuộc thành phần liên thông khác T nên: S := S\ {ed} = {ae; ad; · · · } E := E ∪ {ed} = {ed} C := {{s} ; {a} ; {b} ; {c} ; {d; e} ; {t} ; {t}} 122 Bước 4: T không liên thông ta phải quay lại bước Bước 3: Lấy cạnh dãy S cạnh ae xét Ta thấy cạnh ae có đỉnh đầu mút a e thuộc thành phần liên thông khác T Vì vậy: S := S\ {ae} = {ad; be; · · · } E := E ∪ {ae} = {ed; ae} C := {{s} ; {a; d; e} ; {b} ; {c} ; {f } ; {t}} Bước 4: T không liên thông, ta quay lại bước Bước 3: Lấy cạnh dãy S cạnh ad xét Ta thấy cạnh ad có hai đỉnh đầu mút a d thuộc thành phần liên thông {a; d; e} T , vậy: S := S\ {ad} = {be; ab; · · · } E := E = {ed; ae} C := {{s} ; {a; d; e} ; {b} ; {c} ; {f } ; {t}} Bước 4: T không liên thông Ta phải quay lại bước Bước 3: Lấy cạnh dãy cạnh be xét Ta thấy cạnh be có hai đỉnh đầu mút b e thuộc hai thành phần liên thơng khác T , vậy: S := S\ {be} = {ad; bc; · · · } E := E ∪ {be} = {ed; ae; be} C := {{s} ; {a; b; d; e} ; {c} ; {f } ; {t}} ··· Tiếp tục thực thuật toán ta tới lần lặp cuối sau: Bước 3: Lấy cạnh dãy S cạnh sa xét Ta thấy cạnh sa có đỉnh đầu mút s a thuộc thành phần liên thơng khác 123 T Vì vậy: S := S\ {sa} = {sb; sc; f t; ct} E := E ∪ {sa} = {ed; ae; be; bc; ef ; dt; sa} C := {{s; a; b; c; d; e; f ; t}} Bước 4: T liên thông Ta dừng thuật toán đồ thị T := (V ; E ) bao trùm có trọng lượng nhỏ G, đây: V = {s; a; b; c; d; e; f ; t} E := {ed; ea; be; bc; ef ; dt; sa} Nhận xét: Thuật toán Kruskal làm việc hiệu với đồ thị trọng số có số cạnh lớn phí nhiều thời gian để thực việc xếp cạnh bước Do đồ thị có nhiều cạnh người ta thường sử dụng thuật tốn Prim mơ tả b) Thuật toán Prim Thuật toán: Giả sử G = (V ; E; w) đồ thị có trọng số liên thông với w : E −→ R Ta định nghĩa nhãn đỉnh v ∈ V [α(v); β(v)] với α(v) ∈ V β(v) ∈ R Nhãn đỉnh v lưu giữ giá trị biến v thay đổi Bước 1: Khởi tạo gán giá trị ban đầu cho biến V := V (biến V chứa tất đỉnh bao trùm) x := s (s đỉnh V ) E := ∅ ( biến E chứa tất cạnh bao trùm cần tìm) U := V \ {s} y := [s; ∞] cho y ∈ U Bước 2: Đổi nhãn cho đỉnh thuộc U Với đỉnh y ∈ U ta có: y={ Bước 3: Tìm minβ(y) = β(vi ) y∈U (*) Bước 4: x := vi (nếu có số đỉnh vi ∈ U thỏa mãn (*) ta chọn đỉnh số đỉnh đó) 124 Bước 5: Gán giá trị cho biến E U : E := E ∪ {xα(x)} U := U \ {x} Bước 6: Nếu U = ∅ ta quay lại bước Nếu U = ∅ ta dừng thuật toán đồ thị T = (V ; E ) bao trùm có trọng lượng nhỏ đồ thị có trọng số G Định lý 4.6 Với đồ thị có trọng số vơ hướng liên thơng G = (V ; E; w), w : E −→ R, thuật tốn Prim ln tìm bao trùm có trọng số nhỏ G Ví dụ 4.12 Bài tốn: Tìm bao trùm có trọng số nhỏ đồ thị có trọng số G = (V ; E; w) thuật toán Prim Lời giải Bước 1: V := {s; a; b; c; d; e; f ; t} x := s E := ∅ U := {a; b; c; d; e; f ; t} y := [s; ∞] cho y ∈ U Lần lặp Bước 2: a := [s; 5] ; b := [s; 5] ; c := [s; 6] ; d := [s; ∅] ; e := [s; ∅] ; f := [s; ∅] ; t := [s; ∅] Bước 3: minβ(y) = β(a) = β(b) = y∈U Bước 4: x := a Bước 5: E := E ∪ {as} = {as} ; U := U \ {a} = {b; c; d; e; f ; t} Bước 6: U = ∅ Ta phải quay lại bước Lần lặp Bước 2:b := [a; 2] ; c := [s; 6] ; d := [a; 1] ; e := [a; 1] ; f := [s; ∅] ; t := [s; ∅] Bước 3: minβ(y) = β(d) = β(e) = y∈U Bước 4: x := d Bước 5: E := E ∪ {da} = {as; da} ; U := U \ {d} = {b; c; e; f ; t} Bước 6: U = ∅ Ta phải quay lại bước 125 Lần lặp Bước 2:b := [a; 2] ; c := [s; 6] ; e := [d; −2] ; f := [s; ∅] ; t := [d; 5] Bước 3: minβ(y) = β(e) = −2 y∈U Bước 4: x := e Bước 5: E := E ∪ {ed} = {as; da; ed} ; U := U \ {e} = {b; c; f ; t} Bước 6: U = ∅ Ta phải quay lại bước Lần lặp Bước 2:b := [a; 2] ; c := [e; 3] ; f := [e; 3] ; t := [d; 5] Bước 3: minβ(y) = β(b) = y∈U Bước 4: x := b Bước 5: E := E ∪ {ba} = {as; da; ed; ba} ; U := U \ {b} = {c; f ; t} Bước 6: U = ∅ Ta phải quay lại bước Lần lặp 5: Bước 2:c := [b; 2] ; f := [e; 3] ; t := [d; 5] Bước 3: minβ(y) = β(c) = y∈U Bước 4: x := c Bước 5: E := E ∪ {cb} = {as; da; ed; ba; cb} ; U := U \ {c} = {f ; t} Bước 6: U = ∅ Ta phải quay lại bước Lần lặp 6: Bước 2:f := [e; 3] ; t := [d; 5] Bước 3: minβ(y) = β(f ) = y∈U Bước 4: x := f Bước 5: E := E ∪ {f e} = {as; da; ed; ba; cb; f e} ; U := U \ {f } = {t} Bước 6: U = ∅ Ta phải quay lại bước Lần lặp 7: Bước 2:t := [d; 5] Bước 3: minβ(y) = β(t) = y∈U Bước 4: x := t Bước 5: E := E ∪ {td} = {as; da; ed; ba; cb; f e; td} ; U := U \ {t} = ∅ Bước 6: U = ∅ Ta dừng thuật toán đồ thị T = (V ; E ) với V = {s; a; b; c; d; e; f ; t} E = {; da; ed; ba; cb; f e; td} bao trùm có trọng số nhỏ G Cùng đồ thị hai bao trùm thực 126 thuật toán Kruskal Prim khác Nhưng hai bao trùm có trọng lượng nhỏ 4.2.4 Bài tốn tìm đường có trọng số nhỏ Giả sử G = (V ; E; w) đồ thị có trọng số liên thơng, có hướng, khơng có khun, đây: w : E −→ R+ ∪ = {r ∈ R/r 0} Giả sử s; t ∈ V hai đỉnh cho P đường có hướng với đỉnh đầu s đỉnh cuối t Ta định nghĩa trọng số đường P , kí hiệu w(P ) giá trị: w(e) w(P ) = e cung P Bài tốn tìm đường có trọng lượng nhỏ nhất: Giả sử G = (V ; E; w) đồ thị có trọng số, liên thơng, có hướng khơng có khun với w : E −→ R+ ∪ {0} Ta giả sử s ∈ V đỉnh cho trước D ⊆ V tập đỉnh cho trước Với đỉnh d ∈ D, tìm đường có hướng P từ tập s tới d cho trọng lượng w(P ) đường P nhỏ số tất trọng lượng đường có hướng từ s tới d cho biết trọng lượng w(P ) Để giải tốn này, Dijkstra đưa thuật toán mà ngày ta gọi thuật toán Dijkstra Thuật toán nguyên tắc hình thức giống với thuật tốn Prim trình bày Thuật tốn Dijkstra: Ta gọi nhãn đỉnh v ∈ V [α(v); l(v)] với α(v) ∈ V l(v) ∈ R+ ∪ {0} Một đỉnh gọi có nhãn tạm thời nhãn đỉnh cịn xem xét bị thay đổi bước thuật tốn Nếu nhãn đỉnh khơng thay đổi tất bước thuật tốn, gọi nhãn cố định đỉnh Ta lưu giữ đỉnh có nhãn tạm thời biến U Ta dùng biến L để lưu giữ nhãn cố định đỉnh Nhãn đỉnh v lưu giữ giá trị biến v Bước 1: Khởi tạo gán giá trị ban đầu cho biến x := s (s đỉnh cho trước toán) D := D\ {s} (D tập đỉnh cho trước toán) U := V \ {s} s := [s; 0] 127 y := [s; ∞] cho y ∈ U L := {s := [s; 0]} Bước 2: Đổ nhãn cho đỉnh thuộc U Với đỉnh y ∈ U y={ Bước 3: Tìm minl(y) = l(vi ) y∈U (**) Bước 4: x := vi (nếu có số đỉnh vi ∈ U thỏa mãn (**) ta chọn đỉnh số đỉnh đó) Bước 5: Gán giá trị cho biến D ; U L D := D \ {x} U := U \ {x} L := L ∪ {x := [α(x); l(x)]} Bước 6: Nếu D = ta quay lại bước Nếu D = ∅ ta bắt đầu tìm đường có hướng có trọng lượng nhỏ dựa vào tập L nhãn cố định đỉnh G nhận sau lần lặp cuối Khi đó, với đỉnh d ∈ D; l(d) trọng lượng đường có hướng có trọng số nhỏ từ s tới d đường là: d ← α(d) ← α (α(d)) ← · · · ← s Định lý 4.7 Giả sử G = (V ; E; w) đồ thị có trọng số có hướng liên thơng khơng có khun, w : E −→ R+ ∪ {0} , s ∈ V đỉnh cho trước d ⊆ tập đỉnh cho trước G Khi với đỉnh d ∈ D thuật tốn Dijkstra ln tìm G đường có hướng có trọng lượng nhỏ từ đỉnh s tới đỉnh d xác định trọng lượng đường Ví dụ 4.13 Giả sử G = (V ; E; w) đồ thị có trọng số có hướng biểu diễn hình Với đỉnh thuộc tập D = {d; e; t} tìm đường có hướng có trọng lượng nhỏ từ đỉnh s tới đỉnh cho biết trọng lượng đường tìm 128 Lời giải Ta sử dụng thuật toán Di Bước 1: x := s; D := {d; e; t} ; U := {a; b; c; d; e; t} ; s := [s; 0] y := [s; ∞] cho y ∈ U ; L := {s := [s; 0]} Lần lặp 1: Bước 2: a := [s; 5] ; b := [s; 31] ; c := [s; 40] ; d := [s; ∞] ; e := [s; ∞] ; t := [s; ∞] Bước 3: minl(y) = l(va ) = y∈U Bước 4: x := a Bước 5: D := D \ {a} = {d; e; t} ; U := U \ {a} = {b; c; d; e; t} ; L := L ∪ {a := [s; 5]} = {s := [s; 0] ; a := [s; 5]} ; Bước 6: D = ∅ Ta phải quay lại bước Lần lặp 2: Bước 2: b := [s; 31] ; c := [s; 40] ; d := [s; 78] ; e := [s; ∞] ; t := [s; ∞] Bước 3: minl(y) = l(vb ) = 31 y∈U Bước 4: x := b Bước 5: D := D \ {b} = {d; e; t} ; U := U \ {b} = {c; d; e; t} ; L := L ∪ b := [s; 31] = {s := [s; 0] ; a := [s; 5] ; a := [s; 31]} ; Bước 6: D = ∅ Ta phải quay lại bước Lần lặp 3: Bước 2: c := [b; 39] ; d := [s; 78] ; e := [b; 56] ; t := [b; 69] Bước 3: minl(y) = l(vc ) = 39 y∈U 129 Bước 4: x := c Bước 5: D := D \ {c} = {d; e; t} ; U := U \ {c} = {d; e; t} ; L := L ∪ {c := [b; 39]} = s := [s; 0] ; a := [s; 5] ; b := [s; 31] ; c := [s; 39] ; Bước 6: D = ∅ Ta phải quay lại bước Lần lặp Bước 2: d := [s; 78] ; e := [b; 55] ; t := [b; 69] Bước 3: minl(y) = l(ve ) = 55 y∈U Bước 4: x := e Bước 5: D := D \ {e} = {d; t} ; U := U \ {e} = {d; t} ; L := L ∪ {e := [c; 55]} = s := [s; 0] ; a := [s; 5] ; b := [s; 31] ; c := [s; 39] ; e := [c; 55] ; Bước 6: D = ∅ Ta phải quay lại bước Lần lặp Bước 2: d := [s; 78] ; t := [b; 69] Bước 3: minl(y) = l(t) = 67 y∈U Bước 4: x := t Bước 5: D := D \ {t} = {d} ; U := U \ {t} = {d} ; L := L∪ t := [e; 67] = s := [s; 0] ; a := [s; 5] ; b := [s; 31] ; c := [s; 39] ; e := [c; 55] ; t := [e; 67] ; Bước 6: D = ∅ Ta phải quay lại bước Lần lặp Bước 2: d := [s; 77] Bước 3: minl(y) = l(d) = 77 y∈U Bước 4: x := d Bước 5: D := D \ {d} = ∅; U := U \ {d} = ∅; L := L ∪ d := [t; 77] = s := [s; 0] ; a := [s; 5] ; b := [s; 31] ; c := [s; 39] ; e := [c; 55] ; t := [e; 67] ; d := [t; 77] Bước 6: D = ∅ Ta bắt đầu tìm đường có hướng có trọng số nhỏ từ đỉnh S tới đỉnh thuộc tập D = {d; e; t} dựa giá trị nhận biến L sau lần lặp cuối là: L := s := [s; 0] a := [s; 5] ; c := [b; 39] ; e := [c; 55] ; t Ta nhận đưuọc đường sau: d ← t ← e ← c ← b ← s: trọng lượng đường l(d) = 77 e ← c ← b ← s: trọng lượng đường l(e) = 55 t ← e ← c ← b ← s: trọng lượng đường l(t) = 67 130 Kết luận Trong luận văn này, tác giả đặt hoàn thành số kết sau: (i) Trình bày bốn toán lý thuyết tổ hợp; (ii) Trong toán đưa ứng dụng giải số toán tổ hợp cụ thể; (iii) Phân dạng có ví dụ tập chi tiết hai tốn có ứng dụng tốn sơ cấp toán tồn toán đếm; 131 Tài liệu tham khảo [1] Nguyễn Văn Mậu (2008), Chuyên đề chọn lọc tổ hợp toán rời rạc, NXB Giáo Dục [2] Nguyễn Văn Mậu (4/2012), Các chuyên đề toán bồi dưỡng học sinh giỏi , Kỷ yếu hội nghị khoa học, Hà Nội [3] Hồng Chí Thành (2001), Giáo trình tổ hợp, NXB Đại học Quốc gia Hà Nội [4] Hồng Chí Thành (2011), Lý thuyết đồ thị , NXB Đại học Quốc gia Hà Nội [5] Nguyễn Đức Nghĩa(2001), Toán học rời rạc, NXB Đại học Quốc gia Hà Nội [6] Ngô Đắc Tân(2004), Lý thuyết tổ hợp đồ thị, NXB Đại học Quốc gia Hà Nội [7] Tạp chí tốn học tuổi trẻ, Tuyển tập 30 năm, NXB Giáo Dục, 1997 [8] Kenneth H Rosen, Toán học rời rạc ứng dụng tin học, NXB khoa học kĩ thuật, 1998 [9] Tài liệu từ Internet ... điện thật Như vậy, tổ hợp xuất vấn đề quan trọng 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 gọi toán tồn tổ hợp Một toán tồn tổ hợp xem giải xong cách xây dựng cấu hình... Trong nhiều tình ta cịn phải rõ cấu hình tổ hợp cấu hình tổ hợp Bài toán đưa danh sách tất cấu hình tổ hợp có gọi tốn liệt kê tổ hợp Vì khác với toán tồn tại, toán liệt kê lại cần xác định thuật tốn... tổ hợp xuất với nhiều toán hay với độ khó cao Những bắt đầu làm quen với khái niệm tổ hợp thường khó hình dung hết độ phức tạp về cấu trúc tập đặc biệt Do chọn đề tài "bài toán lý thuyết tổ hợp"

Ngày đăng: 10/03/2021, 14:20

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

Tài liệu liên quan