Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
0,93 MB
File đính kèm
BTL10lab.rar
(1 MB)
Nội dung
TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MƠN TỐN TỔ HỢP VÀ ĐỒ THỊ Trình bày số thuật toán 10 lab THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THƠNG TIN BÀI TẬP LỚN MƠN TỐN TỔ HỢP VÀ ĐỒ THỊ Trình bày số thuật tốn 10 lab THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 LỜI CẢM ƠN Đầu tiên, chúng em xin gửi lời cảm ơn đến giảng viên môn lý thuyết thực hành giảng dạy, truyền đạt kiến thức quan trọng giúp chúng em hiểu rõ nội dung mơn Tốn tổ hợp đồ thị Trong thời gian tìm hiểu học tập mơn này, chắn chúng em cịn nhiều thiếu sót chưa thể hiểu rõ tất kiến thức liên quan đến môn học Do đó, q trình thực tiểu luận có chỗ chưa xác, mong thầy/ bỏ qua góp ý để chúng em hồn thiện tiểu luận Chúng em xin chân thành cảm ơn! ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG Tơi xin cam đoan sản phẩm đồ án riêng / hướng dẫn GV; Các nội dung nghiên cứu, kết đề tài trung thực chưa công bố hình thức trước Những số liệu bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá tác giả thu thập từ nguồn khác có ghi rõ phần tài liệu tham khảo Ngồi ra, đồ án cịn sử dụng số nhận xét, đánh số liệu tác giả khác, quan tổ chức khác có trích dẫn thích nguồn gốc Nếu phát có gian lận tơi xin hoàn toàn chịu trách nhiệm nội dung đồ án Trường đại học Tơn Đức Thắng khơng liên quan đến vi phạm tác quyền, quyền tơi gây q trình thực (nếu có) TP Hồ Chí Minh, ngày 24 tháng 04 năm 2021 Tác giả (ký tên ghi rõ họ tên) PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN Phần xác nhận GV hướng dẫn _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) Phần đánh giá GV chấm _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) TĨM TẮT Trình bày lại số thuật toán 10 lab + Phần 1: tổ hợp (lab2 - lab5) Mỗi lab chọn thuật tốn để trình bày Tương ứng với thuật toán cần nêu cụ thể: - Giới thiệu toán - Ý tưởng thuật toán - Các bước thực - Mã giả - Mã nguồn + Phần 2: đồ thị Tạo class Graph thực thi phương thức sau: load (đọc liệu đồ thị từ file, duyệt theo chiều rộng, duyệt theo chiều sâu, tìm khung nhỏ (Prim + Kruskal)) Trình bày lớp Graph: - Các thuộc tính - Tương ứng với phương thức trình bày thuật toán sử dụng - Mã giả - Mã nguồn - Hướng dẫn chạy chương trình MỤC LỤC LỜI CẢM ƠN .i PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN iii TÓM TẮT iv MỤC LỤC CHƯƠNG – TỔ HỢP 1.1 Thuật toán Mixed radix generation 1.1.1 Giới thiệu toán 1.1.2 Ý tưởng thuật toán 1.1.3 Các bước thực 1.1.4 Mã giả 1.1.5 Mã nguồn .4 1.2 Thuật toán Heap 1.2.1 Giới thiệu toán 1.2.2 Ý tưởng thuật toán 1.2.3 Các bước thực 1.2.4 Mã giả 1.2.5 Mã nguồn .6 1.3 Thuật toán Steinhaus – Johnson – Trotter 1.3.1 Giới thiệu toán 1.3.2 Ý tưởng thuật toán 1.3.3 Các bước thực 1.3.4 Mã giả 1.1.5 Mã nguồn .9 1.4 Lexicographic to generate combinations .9 1.4.1 Giới thiệu toán 10 1.4.2 Ý tưởng thuật toán .10 1.4.3 Các bước thực 10 1.4.4 Mã giả 10 1.4.5 Mã nguồn .10 CHƯƠNG – ĐỒ THỊ .11 2.1 Các thuật toán 11 2.1.1 Duyệt theo chiều sâu 11 2.1.2 Duyệt theo chiều rộng 12 2.1.3 Prim - Tìm khung nhỏ 14 2.1.4 Kruskal - Tìm khung nhỏ .17 2.2 Mã giả 17 2.2.1 Duyệt theo chiều sâu 17 2.2.2 Duyệt theo chiều rộng 18 2.2.3 Prim - Tìm khung nhỏ 18 2.2.4 Kruskal - Tìm khung nhỏ .19 2.3 Mã nguồn 19 2.3.1 Duyệt theo chiều sâu 19 2.3.2 Duyệt theo chiều rộng 20 2.3.3 Kruskal - Tìm khung nhỏ .21 CHƯƠNG – TỔ HỢP 1.1 Thuật toán Mixed radix generation 1.1.1 Giới thiệu toán Nếu bạn muốn tạo tất (a 1, , an), aj chữ số thập phân {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Chúng ta sử dụng vịng lặp lồng n số tương đối nhỏ Tuy nhiên, n số lớn vịng lặp lồng khơng hiệu 1.1.2 Ý tưởng thuật tốn Thuật toán Mixed radix generation truy cập tất n giá trị thỏa mãn ≤ aj Các biến bổ sung ct + ct + sử dụng vệ tinh 1.4.3 Các bước thực Đối với tổ hợp r nào, quy trình để tạo tổ hợp lớn phát triển Một tổ hợp a1a2 ar theo thứ tự từ vựng đưa cho tập hợp 10 {1,2,3, , n} Trong tập hợp {1, 2, 3, 4, 5, 6}, kết hợp {1, 2, 5, 6} Để có kết hợp lớn tiếp theo, ta tìm a i cuối tổ hợp cho a i! = N - r + i (Phần tử cuối tổ hợp với ai! = N - r + i 2.) Thay a i + aj aj + j - i + 1, với j = i +1, i + , , r (Điều tạo kết hợp lớn tiếp theo, {1, 3, 4, 5} 1.4.4 Mã giả Bước 1: [Khởi tạo] Đặt cj ← j −1 cho ≤ j ≤ t; tập hợp cj + ← n, cj + ← j≤t Bước 2: [Truy cập] Truy cập tổ hợp ct c2c1 Bước 3: [Tìm j] Đặt j ← Sau đó, while c j + = cj + 1, đặt cj ← j - j ← j + 1; lặp lại cj + = cj + Bước 4: [Xong?] Kết thúc thuật toán j> t Bước 5: [Tăng cj] Đặt cj ← cj + quay lại bước 1.4.5 Mã nguồn def comLexicographic(n,k): if n0: visited.append([]) k+=1 else: continue visited.pop() return visited print("Ex2: ",BFS(A)) 2.3.3 Kruskal - Tìm khung nhỏ from itertools import combinations A=[[0,1,4,2],[1,0,0,1],[4,0,0,3],[2,1,3,0]] def Kruskal(A): E=edges(A)#đọc cạnh từ ma trận trọng số E=sorted(E)#sắp xếp cạnh theo trọng số MST=[]#mảng chứa ma trận đầu while E:#Bước newE=E.pop() #Bước MST.append(newE.copy()) #Bước if isCyclic(MST) == True: #Bước 21 MST.pop()#Bước return MST def edges(A): edges = [] for i in range(len(A)): n = [i] for j in range(i+1, len(A[i])): if A[i][j] != 0: edges.append(n + [j] +[A[i][j]]) return edges def sorted(E): e = [] result = [] for i in E: e.append(i[-1]) e.sort() while e: key = e.pop() for i in E: if i[-1] == key: result.append(i) E.remove(i) return result 22 def checkDuplicate(A): c=0 for i in range(len(A)): n=A[i] for j in range(i+1,len(A)): if n == A[j]: c+=1 if c >= 3: return True else : return False def isCyclic(MST): if len(MST) < 3: return False tmp = [] for i in MST: tmp.append(i.copy()) for i in tmp: i.pop() for n in range(3,len(A)+1): Cycle = [] p = combinations(tmp,n) for i in p: p = [] for j in i: for k in j: 23 p.append(k) Cycle.append(p.copy()) for i in Cycle: if checkDuplicate(i) == True: return True return False result = Kruskal(A) print(result) ... trình bày Tương ứng với thuật to? ?n cần nêu cụ thể: - Giới thi? ??u to? ?n - Ý tưởng thuật to? ?n - Các bước thực - Mã giả - Mã nguồn + Phần 2: đồ thị Tạo class Graph thực thi phương thức sau: load (đọc... 1.2 Thuật to? ?n Heap 1.2.1 Giới thi? ??u to? ?n 1.2.2 Ý tưởng thuật to? ?n 1.2.3 Các bước thực 1.2.4 Mã giả 1.2.5 Mã nguồn .6 1.3 Thuật to? ?n Steinhaus... heapPer(a,n) 1.3 Thuật to? ?n Steinhaus – Johnson – Trotter 1.3.1 Giới thi? ??u to? ?n Thuật to? ?n Steinhaus – Johnson – Trotter hay thuật tốn Johnson – Trotter, cịn gọi thay đổi đơn giản, thuật to? ?n đặt theo