Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 103 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
103
Dung lượng
3,43 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 ĐỒ ÁN CUỐI KÌ MƠN PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT [] Người hướng dẫn: Th.s TRẦN LƯƠNG QUỐC ĐẠI Người thực hiện: LÊ THANH TÙNG – 51800830 QUÁCH THỊNH – 51800014 NGUYỄN MINH KHOA – 51800789 Lớp : 18050203 – 18050203 – 18050202 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2020 : 22 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 ĐỒ ÁN CUỐI KÌ MƠN PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT [] Người hướng dẫn: Th.s TRẦN LƯƠNG QUỐC ĐẠI Người thực hiện: LÊ THANH TÙNG – 51800830 QUÁCH THỊNH – 51800014 NGUYỄN MINH KHOA – 51800789 Lớp : 18050203 – 18050203 – 18050202 Khoá THÀNH PHỐ HỒ CHÍ MINH, NĂM 2020 : 22 i LỜI CẢM ƠN Em xin gửi lời cảm ơn chân thành tri ân sâu sắc tới tồn thể q thầy cơ, giảng viên, viên chức giảng dạy làm việc trường Đại Học Tôn Đức Thắng, đặc biệt quý thầy cô Khoa Công nghệ thông tin tạo điều kiện dành thời gian tận tình giúp đở em trình thực báo cáo trình học tập trường Trên hết, em xin tỏ lòng biết ơn sâu sắc đến thầy Trần Lương Quốc Đại – Giảng viên Khoa Cơng nghệ thơng tin hết lịng giảng dạy, truyền đạt kiến thức quý báu đến tất sinh viên nói chung thân em nói riêng cách tận tình nghiêm túc Nhờ lượng kiến thức thầy truyền đạt mà giúp em hoàn thành thuận lợi báo cáo nói riêng vững vàng lượng kiến thức khổng lồ môn học Trong trình thực báo cáo, lượng kiến thức kinh nghiệm thực tiễn hạn chế nên kết cịn nhiều thiếu sót, em kính mong nhận ý kiến đóng góp thầy để từ thân em cải thiện kỹ trình báo cáo cách tinh tế chuẩn mực bào cáo tới Kính chúc thầy có nhiều sức khỏe thành cơng công việc Em xin chân thành cảm ơn! ii ĐỒ ÁN ĐƯỢC HỒ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 Trần Lương Quốc Đại 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 hồ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 gây q trình thực (nếu có) TP Hồ Chí Minh, ngày 16 tháng 11 năm 2020 Tác giả (ký tên ghi rõ họ tên) Lê Thanh Tùng Quách Thịnh Nguyễn Minh Khoa iii 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) iv TÓM TẮT [] 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 DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT 1.1 Brute-Force 1.1.1 Selection Sort 1.1.1.1 Đƒnh ngh„a .8 1.1.1.2 Thực hiê †n .8 1.1.1.3 Phân tích 1.1.2 Bubble Sort 1.1.2.1 Đƒnh ngh„a .9 1.1.2.2 Thực hiê †n .10 1.1.2.3 Phân tích 10 1.1.3 Insertion Sort .10 1.1.3.1 Đƒnh ngh„a 10 1.1.3.2 Thực hiê †n .11 1.1.4 Sequential Search 12 1.1.4.1 Đƒnh ngh„a 12 1.1.4.2 Thực hiê †n .12 1.1.4.3 Phân tích 13 1.2 Giải thuật chia để trƒ .13 1.2.1 Giải thuật xếp trộn (Merge Sort) 14 1.2.1.1 Ý tưởng thuật toán .14 1.2.1.2 Thuật toán Mergesort 15 1.2.1.3 Thuật toán Merge 15 1.2.1.4 Đánh giá thuật toán 17 1.2.2 Giải thuật xếp nhanh (Quick Sort) 17 1.2.2.1 Ý tưởng thuật toán 17 1.2.2.2 Thuật toán 17 1.2.2.3 Đánh giá thuật toán 18 1.2.3 Duyệt nhƒ phân (Binary Tree Traversals and Related Properties) 18 1.2.3.1 Pre- order .19 1.2.3.2 In-order 20 1.2.3.3 Post-order 21 1.2.4 Phép nhân số nguyên lớn nhân hai ma trận thuật toán Strassen 21 1.2.4.1 Phép nhân số nguyên lớn .21 1.2.4.2 Nhân hai ma trận thuật toán Strassen 22 1.2.5 Cặp điểm gần tìm phần lồi (the closest-pair and convexhull problem) 23 1.2.5.1 Cặp điểm gần (The Closest-Pair) 23 1.2.5.2 Tìm phần lồi (Convex-Hull problem) 26 1.3 Thuật toán tham lam .28 1.3.1 Thuật toán Prim 28 1.3.2 Thuật toán Kruskal 30 1.3.3 Thuật toán Dijkstra 33 1.3.4 Thuật toán Huffman 35 CHƯƠNG – CHIẾN LƯỢC BIẾN THỂ ĐỂ TRỊ 38 2.1 Sắp xếp 38 2.1.1 Merge sort 38 2.1.1.1 Ý tưởng Merge sort 38 2.1.1.2 Mã Merge Sort 39 2.1.1.3 Phân tích Merge Sort 40 2.1.1.4 Hạn chế Merge Sort .41 2.1.2 Quick sort 41 2.1.2.1 Ý tưởng Quick sort 41 2.1.2.2 Mã Quick Sort .41 2.1.2.3 Ý tưởng Partition 42 2.1.2.4 Mã Quick Sort .42 2.1.2.5 Phân tích Quick Sort 43 2.1.2.6 Hạn chế Quick Sort .43 2.2 Phép khử Gaussian .43 2.2.1 Ý tưởng thuật toán .44 2.2.2 Chương trình minh họa .48 2.3 Balanced Search Tree 51 2.3.1 AVL Tree 51 2.3.2 Hê † số cân (Balance Factor) .51 2.3.3 Các kỹ thuâ †t quay AVL .52 2.3.3.1 Kỹ thuâ †t quay trái 52 2.3.3.2 Kỹ thuâ †t quay phải .53 2.3.3.3 Kỹ thuâ †t quay trái – phải 54 (Bảng) Mô tả kỹ thuâ t† quay trái-phải 55 3.1.1.1 Kỹ thuâ †t quay phải-trái 55 3.2 Heaps and Heapsort 56 3.2.1 Mối quan † mảng heap 56 3.2.2 Cấu trúc liê †u Heap 57 3.2.3 Cách chất đống “Heapify” 58 3.2.4 Cách xây dựng Max-Heap 62 3.2.5 Cách Heap Sort hoạt đô †ng 66 3.8 [THỊNH] 66 3.9 Horner’s Rule and Binary Exponentiation 66 3.9.1 Phương pháp Horner (Horner’s Rule) .66 3.9.1.1 Thuật toán 67 3.9.1.2 Mã giả 67 3.9.2 Hệ số mũ nhƒ phân (Binary Exponentiatio) .68 3.10 Giảm vấn đề (Problem reduction) 70 3.10.1 Bài toán tìm bội chung nhỏ 70 PHÂN CÔNG VÀ ĐÁNH GIÁ 71 Phân công nhiệm vụ 71 Đánh giá thành viên 71 TÀI LIỆU THAM KHẢO 72 83 if (Left < n and arr[Left] > arr[Largest]) largest = Left if (Right < n and arr[Right] > arr[Largest]) largest = Right // Hốn đổi vƒ trí gọi để quy root lớn if (Largest != i) { swap(arr[i], arr[Largest]) Heapify(arr, n, Largest) } } 2.4.4 Cách xây dUng Max-Heap Để xây dựng Max-Heap từ nào, bắt đầu Heapify từ lên kết thúc bằng Max-Heap Trong trường hợp hồn ch§nh, index đầu tiền mô †t nút mà cho n/2 + Tất nút khác sau nút khơng cần sử dụng Heapify Vì vâ †y, tạo Max-Heap sau : // Xây dựng heap (Sắp xếp lại mảng) for (i = n/2 – 1; i >= 0; i ) Heapify(arr, n, i) 84 Tạo mảng tính tốn i (Hình) Mơ tả đưa thành Max-Heap 85 (Hình) Mơ tả đưa thành Max-Heap 86 (Hình) Mô tả đưa thành Max-Heap 87 2.4.5 Cách Heap Sort hoVt đơng N Vì thỏa mãn th c† tính Max-Heap, nên giá trƒ lớn lưu trữ nút gốc Hoán đổi: Loại bỏ phần tử gốc đăt† cuối mảng, đă t† giá trƒ cui cựng vo chă trng Xúa : Gim kớch thước heap Heapify : Giải phóng phần tử gốc mơ †t lần để có phần tử cao gốc Quà trình lâp† lại tất mục danh sách xếp Đoạn code mô tả hoạt đô n† g: // Heap sort For (int i = n – 1; i >= 0l i ) { Swap(arr[0], arr[i]); // Heapify phần tử gốc để lấy lại phần tử cao gốc Heapify(arr, i, 0); } 88 89 90 91 (Hình) Mơ tả cách hoạt đô †ng Heap 2.5 Horner’s Rule and Binary Exponentiation 2.5.1 Phương pháp Horner (Horner’s Rule) Phương pháp Horner thuật tốn biến đổi đa thức để tính giá trƒ đa thức Qui tắc Honer thí dụ tốt chiến lược Biến thể-để-trƒ dùng kỹ thuật “thay đổi biểu diễn” (representation change) 92 Ta có đa thức: Dùng qui tắc Horner biến đổi đa thức: Ta thu đa thức cách liên tiếp dùng x làm thừa số chung đa thức cịn lại số mũ giảm dần Ví dụ: Việc tính tốn đa thức biểu diễn dòng Dòng tất hệ số đa thức theo số mũ giảm dần Dịng chứa giá trƒ đa thức tính cơng thức “nhân ngang cộng chéo” Ví dụ: Tính giá trƒ đa thức Bảng Ví dụ tính giá trƒ đa thức Dễ thấy Ta thấy - giá trƒ - giá trƒ - giá trƒ 2.5.1.1 Thuật toán Dữ liệu đầu vào: Một mảng P[0…n] gồm hệ số đa thức bậc n Đầu ra: Giá trƒ đa thức x Ví dụ: Đầu vào: P[] = {2, -6, 2, -1}, x=3 Đầu ra: 93 2.5.1.2 Mã giả p P[n] for i n – downto p = p*x + P[i] return p Tổng số phép nhân tổng số phép cộng giải thuật ch§ n Trong tính trực tiếp đa thức ch§ riêng số hạng cần đến n phép nhân Giải thuật Horner giải thuật tối ưu để đƒnh trƒ đa thức 2.5.2 Hệ số mũ nhị phân (Binary Exponentiatio) Để tính ta cần nhân với 24 lần Nhưng x lớn (giả sử triệu chữ số) làm điều sœ thời gian Luỹ thừa nhƒ phân thủ thuật cho phép tính tốn ch§ với độ phức tạp O(logn) thay phải nhân n lần Đặt: Là dạng biểu diễn số nguyên n dạng nhƒ phân Ví dụ: số mũ 13: Chúng ta có cơng thức Vậy cơng thức khai triển số mũ nhƒ phân ta được: Để tính tốn luỹ thừa có thuật tốn: LeftRightBinaryExponentiation RightLeftBinaryExponentiation Ở chung ta ch§ qua thuật tốn LeftRightBinaryExponentiation Thuật tốn LeftRightBinaryExponentiation nói chữ số nhƒ phân vƒ trí xét ln bình phương giá trƒ trước nhân với a Thuật toán LeftRightBinaryExponentiation (a, b(n)) Đầu vào: Một số a danh sách b(n) số nhƒ phân bI, …, b0 94 Đầu ra: Giá trƒ an product ← a for i ← I − downto product ← product ∗ product if bi = 1: product ← product ∗ a return product Ví dụ: Tính a13 theo thuật tốn LeftRightBinaryExponentiation Với n=13=11012 Bảng 2 Ví dụ tính theo thuật tốn LeftRightBinaryExponentiation Ta chứng minh độ phức tạp thuật tốn Nó tối ưu với phép tính luỹ thừa ln u cầu n-1 phép nhân 95 2.6 Giảm vấn đề (Problem reduction) 2.6.1 Bài toán tìm bội chung nhỏ Việc tính bội chung nhỏ hai số nguyên dương m n, kí hiệu lcm(m, n), xác đƒnh số nguyên nhỏ chia hết cho m n Với phương pháp trung học tính tốn nó: tính tích tất thừa số nguyên tố chung m n, bao gồm tất thừa số nguyên tố m không thuộc n ngược lại thừa số nguyên tố n không thuộc m Ví dụ: Việc tính tốn cách khơng hiệu u cầu danh sách số nguyên tố liên tiếp Một thuật toán hiệu ngh„ cách sử dụng phương pháp giảm thiểu vấn đề (problem reduction) Đó sử dụng thuật tốn Euclid để tìm ước số chung lớn nhất, tích tất thừa số ngun tố chung m n Khơng khó để thấy tích lcm(m, n) gcd(m, n) bao gồm thừa số m n dẫn đến cơng thức: Trong gcd(m, n) tính hiệu thuật tốn Euclid 96 PHÂN CƠNG VÀ ĐÁNH GIÁ Phân cơng nhiệm vụ Đánh giá thành viên 97 TÀI LIỆU THAM KHẢO Tiếng Việt Tiếng Anh ... 2T(n/2) + O(n) 1.3 Thuật toán tham lam Thuật toán tham lam phương pháp phổ biến để thiết kế giải thuật Rất nhiều thuật toán tiếng thiết kế dựa ý tưởng thuật tốn tham lam, ví dụ thuật tốn tìm đường... đầu Bước 2: Giải toán - Trong bước này, toán giải 14 Bước 3: Kết hợp lời giải - Sau toán giải, bước sœ kết hợp chúng cách đệ qui để tìm giải pháp cho toán ban đầu 1.2.1 Giải thuật xếp trộn (Merge... 1.2.1.3 Thuật toán Merge 15 1.2.1.4 Đánh giá thuật toán 17 1.2.2 Giải thuật xếp nhanh (Quick Sort) 17 1.2.2.1 Ý tưởng thuật toán 17 1.2.2.2 Thuật toán 17 1.2.2.3 Đánh