1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế đánh giá thuật toán

122 10 0

Đ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

Thiết kế đánh giá thuật toán -1- MỤC LỤC LỜI NÓI ĐẦU - Chương : GIỚI THIỆU THIẾT KẾ, ĐÁNH GIÁ THUẬT TOÁN - I Định nghóa trực quan Thuật toán - Định nghóa - Các đặc trưng thuật toán - Đặc tả thuật toaùn - II Các dạng diễn đạt thuật toán - Dạng lưu đồ ( sơ đồ khối ) - 10 Dạng ngôn ngữ tự nhiên - 10 Ngôn ngữ lập trình - 10 Dạng mã giả - 10 III Thiết kế thuật toán - 12 Modul hóa thiết kế từ xuống (Top-Down) - 13 Phương pháp làm mịn dần (hay tinh chế bước ) - 13 Một số phương pháp thiết keá - 15 IV Phân tích thuật toán - 17 Các bước trình phân tích đánh giá thời gian chạy thuật toán - 17 Các ký hiệu tiệm cận - 18 Một số lớp thuật toán - 19 Phân tích thuật toán đệ qui - 21 Các phép toán ký hiệu tiệm cận - 25 Phân tích trường hợp trung bình - 26 V Tối ưu thuật toán - 27 Kỹ thuật tối ưu vòng laëp - 27 Tối ưu việc rẽ nhánh - 30 Bài tập - 30 Chương : PHƯƠNG PHÁP CHIA ĐỂ TRỊ - 33 I Mở đầu - 33 Ý tưởng - 33 Mô hình - 33 II Thuật toán tìm kiếm nhị phân - 33 Phát biểu toán - 33 Ý tưởng - 33 Mô tả thuật toán - 33 Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -2- Độ phức tạp thời gian thuật toán - 34 Cài đặt - 34 III Bài toán MinMax - 35 Phát biểu toán - 35 Ý tưởng - 35 Thuật toán - 35 Độ phức tạp thuật toán - 36 Cài đặt - 36 IV Thuật toán QuickSort - 36 Ý tưởng - 37 Mô tả thuật toaùn - 37 Độ phức tạp thuật toán - 38 V Thuật toán nhân Strassen nhân ma trận - 39 Bài toán - 39 Mô tả - 39 VI Bài toán hoán đổi phần dãy - 41 Phát biểu toán - 41 Ý tưởng - 41 Thuật toán - 41 Độ phức tạp thuật toán - 43 Cài đặt - 43 VII Trộn hai đường trực tiếp - 44 Baøi toaùn - 44 Ý tưởng - 44 Thieát keá - 45 Bài tập - 50 Chương : PHƯƠNG PHÁP QUAY LUI - 53 I Mở đầu - 53 YÙ tưởng…………………………………………………………………………………………………….- 542 Mô hình - 53 II Bài toán Ngựa ñi tuaàn - 54 Phát biểu toán - 54 Thieát keá thuật toán - 55 III Bài toán hậu - 57 Phaùt biểu toán - 57 Thiết kế thuật toán - 57 IV Baøi toán liệt kê dãy nhị phân độ dài n - 59 Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -3- Phát biểu toán - 59 Thiết kế thuật toán - 59 V Bài toán liệt kê hoán vị - 60 Phát biểu toaùn - 60 Thiết kế thuật toán - 60 VI Bài toán liệt kê tổ hợp - 61 Phát biểu toán - 61 Thieát keá thuật toán - 61 VII Bài toán tìm kiếm đường đồ thị - 61 Phát biểu toán - 61 Thuật toán DFS ( Depth First Search) - 62 Thuật toaùn BFS ( Breadth First Search) - 64 Bài tập - 66 Chương 4: PHƯƠNG PHÁP NHÁNH CẬN - 69 I Mở đầu - 69 Ý tưởng - 69 Mô hình - 69 II Bài toán ngøi du lòch - 70 Bài toán - 70 Ý tưởng - 70 Thieát keá - 71 Cài đặt - 73 III Bài toán túi xách - 74 Bài toán - 74 Ý tưởng - 74 Thieát keá thuật toán - 75 Cài đặt - 78 Bài tập - 79 Chương 5: PHƯƠNG PHÁP THAM LAM - 81 I Mở đầu - 81 Ý tưởng - 81 Mô hình - 81 II Bài toán người du lịch - 82 Bài toán - 82 Ý tưởng - 82 Thuật toán - 82 Độ phức tạp thuật toán - 83 Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -4- Cài đặt - 83 III Thuaät toán Dijkstra -Tìm đường ngắn đồ thị có trọng số - 84 Bài toán - 84 Ý tưởng - 85 Mô tả thuật toaùn - 85 Cài đặt - 87 Độ phức tạp thuật toán - 90 IV Thuật toán Prim – Tìm bao trùm nhỏ - 90 Bài toaùn - 90 Ý tưởng - 90 Moâ tả thuật toán - 90 Cài đặt - 91 Độ phức tạp thuật toán - 93 V Bài toán ghi haùt - 93 Phát biểu toán - 93 Thieát keá - 93 Độ phức tạp thuật toán - 94 Cài đặt - 94 VI Bài toán túi xách (Knapsack) - 95 Phát biểu toán - 95 Thiết kế thuật toán - 95 Độ phức tạp thuật toán - 96 Cài đặt - 96 VII Phương pháp tham lam vaø Heuristic - 97 Baøi taäp - 98 Chương : PHƯƠNG PHÁP QUY HOẠCH ĐỘNG - 100 I Phương pháp tổng quát - 100 II Thuật toán Floyd -Tìm đường ngắn cặp đỉnh 100 Bài toán - 100 Ý tưởng - 101 Thieát keá - 101 Cài đặt - 103 Độ phức tạp thuật toán - 104 III Nhân tổ hợp nhiều ma trận - 104 Bài toán - 104 Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -5- Ý tưởng - 104 Thieát keá - 105 Độ phức tạp thuật toaùn - 106 Cài đặt - 106 IV Cây nhị phân tìm kiếm tối ưu (Optimal Binary Search Tree) 107 Phát biểu toán - 108 Ý tưởng - 108 Thiết kế thuật toaùn - 109 Độ phức tạp thuật toán - 110 Cài đặt - 111 V Dãy chung dài dãy số - 111 Bài toán - 111 Ý tưởng - 112 Thuật toán - 112 Độ phức tạp thuật toán - 114 Cài đặt - 114 VI Bài toán người du lịch - 115 Ý tưởng - 116 Thiết kế thuật toán - 116 Độ phức tạp thuật toán - 118 Bài taäp - 118 PHUÏ LUÏC - 120 TÀI LIỆU THAM KHAÛO - 122 - Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -6- LỜI NÓI ĐẦU Giáo trình “ Thiết kế đánh giá thuật toán “ có nội dung tiếp sau giáo trình “Cấu trúc liệu thuật toán 1” “ Toán cao cấp A4”, trình bày tín lý thuyết tín thực hành cho sinh viên ngành Toán – Tin học Công nghệ thông tin Trọng tâm giáo trình : - Trình bày số phương pháp thiết kế thuật toán thông dụng - Tìm hiểu sở phân tích độ phức tạp thuật toán Nội dung giáo trình gồm chương : CHƯƠNG : GIỚI THIỆU THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN Chương giới thiệu khái niệm trực quan thuật toán, ngôn ngữ mô tả thuật toán, phân tích thuật toán, cải tiến thuật toán CHƯƠNG : PHƯƠNG PHÁP CHIA ĐỂ TRỊ Chương trình bày kỹ thuật thiết kế chia để trị, mô hình thủ tục thường sử dụng toán minh họa : toán MinMax, thuật toán Strassen nhân ma trận, thuật toán trộn trực tiếp, CHƯƠNG : PHƯƠNG PHÁP QUAY LUI Giới thiệu mô hình đệ quy quay lui toán minh họa : toán “ ngựa tuần”, toán “ tám hậu “, toán tổ hợp, thuật toán tìm kiếm đồ thị DFS, BFS CHƯƠNG : PHƯƠNG PHÁP NHÁNH CẬN Chương mô tả kỹ thuật đánh giá nhánh cận trình quay lui để tìm lời giải tối ưu toán Các toán dùng để minh họa toán “ Người du lịch “, toán “ túi xách “ CHƯƠNG : PHƯƠNG PHÁP THAM LAM Giới thiệu phương pháp tìm kiếm nhanh lời giải chấp nhận (và tối ưu) toán tối ưu Các toán minh họa : toán “ Người du lịch”, thuật toán Dijkstra tìm đường ngắn từ đỉnh đến đỉnh lại đồ thị, toán “ túi xách “, CHƯƠNG : PHƯƠNG PHÁP QUY HOẠCH ĐỘNG Chương mô tả ý tưởng, thao tác sử dụng thuật toán quy hoạch động Các toán minh họa thuật toán Floyd tìm đường ngắn cặp đỉnh đơn đồ thị, toán nhân tổ hợp ma trận, nhị phân tìm kiếm tối ưu Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -7- Vì trình độ người biên soạn có hạn nên tập giáo trình không tránh khỏi nhiều khiếm khuyết, mong góp ý bạn đồng nghiệp sinh viên Cuối cùng, cảm ơn động viên, giúp đỡ nhiệt thành bạn đồng nghiệp khoa Toán-Tin học để tập giáo trình hoàn thành Đàlạt, ngày 10 tháng 11 năm 2002 TRẦN TUẤN MINH Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -8- CHƯƠNG : GIỚI THIỆU THIẾT KẾ, ĐÁNH GIÁ THUẬT TOÁN Thuật ngữ thuật toán (Algorithm ) từ viết tắt tên nhà toán học kỷ IX : Abu Ja’fa Mohammed ibn Musa al-Khowarizmi Đầu tiên, thuật toán hiểu quy tắc thực phép toán số học với số viết hệ thập phân Cùng với phát triên máy tính , khái niệm thuật toán hiểu theo nghóa rộng Một định nghóa hình thức thuật toán nhà toán học người Anh Alanh Turing đưa vào năm 1936 thông qua máy Turing Có thể nói lý thuyết thuật toán hình thành từ Lý thuyết thuật toán quan tâm đến vấn đề sau : Giải thuật toán : Lớp toán giải thuật toán, lớp toán không giải thuật toán Tối ưu hóa thuật toán : Thay thuật toán chưa tốt thuật toán tốt Triển khai thuật toán : Xây dựng ngôn ngữ thực máy tính để mã hóa thuật toán Hướng nghiên cứu thứ thuộc phạm vi lónh vực phân tích thuật toán : Đánh lượng mức độ phức tạp thuật toán ; hướng thứ ba thường xếp vào khoa học lập trình Chương giáo trình giới thiệu thuật toán theo nghóa trực quan số khái niệm mở đầu phân tích thiết kế thuật toán I Định nghóa trực quan Thuật toán Định nghóa Thuật toán dãy hữu hạn thao tác bố trí theo trình tự xác định, đề trước, nhằm giải toán định - Thao tác , hay gọi tác vụ, phép toán ( Operation ) hay lệnh (Command), thị (Instruction) hành động cần thực chế thực thuật toán Mỗi thao tác biến đổi toán từ trạng thái trước (hay trạng thái nhập) sang trạng thái sau (hay trạng thái xuất).Thực tế thao tác thường sử dụng số đối tượng trạng thái nhập (các đối tượng nhập )và sản sinh đối tượng trạng thái xuất (các đối tượng xuất) Quan hệ trạng thái xuất nhập cho thấy tác động thao tác Dãy thao tác thuật toán nối tiếp nhằm biến đổi toán từ trạng thái ban đầu đến trạng thái kết Mỗi thao tác phân tích thành thao tác đơn giản - Trình tự thực thao tác phải xác định rõ ràng thuật toán Cùng tập hợp thao tác xếp đặt theo trình tự khác cho kết khác Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán -9- Các đặc trưng thuật toán a) Tính xác định Các thao tác, đối tượng, phương tiện thuật toán phải có ý nghóa rõ ràng, không gây nhầm lẫn Nói cách khác, hai chế hoạt động khác (người máy ) thực thuật toán, sử dụng đối tượng, phương tiện nhập phải cho kết b) Tính dừng (hay hữu hạn) Đòi hỏi thuật toán phải dừng cho kết sau số hữu hạn bước c) Tính thuật toán Thuật toán thuật toán cho kết thỏa mãn đặc tả thuật toán với trường hợp đối tượng, phương tiện nhập Thuật toán sai sai (ít ) trường hợp d) Tính phổ dụng Thuật toán để giải lớp toán gồm nhiều toán cụ thể, lớp xác định đặc tả Dó nhiên có lớp toán gồm Thuật toán không cần sử dụng đối tượng, phương tiện nhập Đặc tả thuật toán Mỗi thuật toán nhằm giải lớp toán cụ thể Mỗi lần thực thuật toán cần phải cung cấp cho chế thực số đối tượng hay phương tiện cần thiết Các đối tượng hay phương tiện phân biệt toán cụ thể lớp toán mà thuật toán giải Làm định rõ lớp toán mà thuật toán giải quyết? Đó đặc tả thuật toán Đặc tả thuật toán cần đặc điểm sau : Các đối tượng phương tiện thuật toán cần sử dụng (nhập) Điều kiện ràng buộc (nếu có) đối tượng phương tiện Các sản phẩm ,kết (xuất) Các yêu cầu sản phẩm, kết Thường xuất dạng quan hệ kết đối tượng, phương tiện sử dụng INPUT THUẬT TOÁN OUTPUT II Các dạng diễn đạt thuật toán Thuật toán diễn đạt nhiều hình thức, chẳng hạn dạng lưu đồ, dạng ngôn ngữ tự nhiên, dạng mã giả ngôn ngữ lập trình Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán - 10 - Dạng lưu đồ ( sơ đồ khối ) Dùng hình vẽ ( có qui ước ) để diễn đạt thuật toán Lưu đồ cho hình ảnh trực quan tổng thể thuật toán ,cho nên thường sử dụng Dạng ngôn ngữ tự nhiên Thuật toán trình bày dạng ngôn ngữ tự nhiên theo trình tự bước thực thuật toán Ngôn ngữ lập trình Dùng cấu trúc lệnh, liệu ngôn ngữ lập trình để mô tả Dạng mã giả Thuật toán trình bày dạng văn băng ngôn ngữ tự nhiên dễ hiểu khó cài đặt Dùng ngữ lập trình để diễn tả phức tạp, khó hiểu Thông thường thuật toán trao đổi dạng văn - không ràng buộc nhiều vào cú pháp xác định ngôn ngữ lập trình, tuân theo số quy ước ban đầu - Ta gọi dạng mã giả Tùy theo việc định hướng cài đặt thuật toán theo ngôn ngữ lập trình ta diễn đạt thuật toán gần với ngôn ngữ Trong phần ta trình bày số quy ước ngôn ngữ mã giả dạng gần C/C++ a) Ký tự - Bộ chữ : 26 chữ - 10 chữ số thập phân - Các dấu phép toán số học - Các dấu phép toán quan hệ b) Các từ : Ghép ký tự chữ, số, dấu gạch ( _ ) Các từ sau xem từ khóa : if, else, case, for, while , while c) Các phép toán số học logic - Các phép toán số học : +, -, *, /, % - Các phép toán Logic : &&, ||, ! C/C++ d) Biểu thức thứ tự ưu tiên phép toán biểu thức (Như C/C++) e) Các câu lệnh Lệnh gán : x = Biểu thức; Lệnh ghép ( Khối lệnh ) : [ A1 ; An; Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán - 108 - này, phải thay đổi chút để phản ánh tính chất nhị phân tìm kiếm : Đối với khóa mà xác suất tìm kiếm lớn phải tương ứng với đường ngắn Muốn thế, ta gắn cho khóa ( nút ) số dương mà ta gọi trọng số, xác suất khóa tìm kiếm Từ dẫn tới khái niệm độ dài đường có trọng số (Weighted path tree): “ Độ dài đường (trong) có trọng số tổng độ dài đường có trọng số ứng với nút cây” Đó giá trị : P = n ∑ pi hi i =1 Với pi xác suất để khóa Ki xuất hi mức nút tương ứng Ki Mục đích toán ta muốn đặt : Cực tiểu hóa độ dài đường có trọng số với phân phối xác suất cho trước Nói cách khác, Xác định nhị phân tìm kiếm cho P có giá trị nhỏ Một cách tự nhiên ta thay xác suất truy xuất khóa tần suất khóa, toán phát biểu lại sau : Phát biểu toán Cho trước tập khóa Ki , i ∈1, n , cho : K1 < K2 < ⋅ ⋅ ⋅ < Kn Xác định nhị phân tìm kiếm với tập khóa cho biểu thức P sau có giá trị nhỏ : n P = ∑ hi i =1 Trong : • hi mức nút thứ i; i ∈1, n • tần suất xuất khóa ki ; i ∈1, n Cây nhị phân tìm kiếm thỏa mãn yêu cầu gọi nhị phân tìm kiếm tối ưu Ý tưởng Người ta chứng minh số lượng nhị phân tìm kiếm n nút có dạng khác nhau, : C2nn ≅ n +1 4n π ⋅n2 ; (Khi n lớn ) Do việc chọn nhị phân tìm kiếm tối ưu cách lựa chọn có độ dài đường có trọng số nhỏ nhất, khó thực n lớn Ta áp dụng phương pháp qui hoạch động cho toán này, ta sử dụng nguyên lý tối ưu Đó tối ưu có tính chất đáng ý sau : Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán - 109 - Một tối ưu tối ưu Tính chất gợi lên thuật toán : Xuất phát từ nút xem nhỏ nhất, tìm cách có hệ thống lớn Như lớn lên “ từ tới gốc “ Thiết kế thuật toán Cách tiếp cận quy hoạch động để giải toán tìm nghiệm tối ưu theo cách phát triển lớn lên từ tới gốc, tức tìm kiếm phương án tối ưu xây dựng gồm khóa Ki, , Kj lưu trử lại đáp án Nếu gọi Kk gốc Tij tương ứng với khóa liền Ki, , Kj nút Ki, , Kk-1 phải nằm trái nút Kk+1, , Kj phải nằm phải, ta phải tối ưu cho Vì ta phải chọn nút làm gốc cho tốt nên ta phải chọn thử tất nút cực tiểu hóa cách chọn Ta thấy độ dài đường có trọng số Tij tổng độ dài đường có trọng số Ti,k-1 Tk+1,j số lần phép tìm kiếm duyệt qua nút từ đến gốc ( độ dài đường có trọng số Tij) Kk Ki, ,Kk-1 Đặt : Kk+1, ,Kj Mij = Độ dài đường có trọng số nhị phân tìm kiếm tối ưu tương ứng với khóa Ki < < Kj , với ≤ i ≤ j ≤ n Khi Mij xác định theo công thức : j k −1 ⎫ ⎧ M ij = Min⎨M i ,k −1 + ∑ a q + M k +1, j + ∑ a q + a k ⎬ i≤k ≤ j q =i q = k +1 ⎭ ⎩ j ⎫ ⎧ = Min ⎨M i ,k −1 + M k +1, j + ∑ a q ⎬ i≤k ≤ j q =i ⎭ ⎩ = Min{M i ,k −1 + M k +1, j }+ ∑ a q ; với i < j j i≤k ≤ j q =i M ii = Ta tính Mij cách lập bảng thuật toán nhân tổ hợp nhiều ma trận Để giữ vết khóa chọn làm gốc bước ta dùng bảng (ma trận ) root; root[i][j] khóa chọn làm gốc chứa Ki, , Kj Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán - 110 - j Mij a1 a2 a3 i 0 an n n+1 Thuật toán mô tả sau input a[1 n], //chứa tần suất khóa n; //số khóa output root[][]// bảng khóa nhị phân tìm kiếm tối ưu minOBST;//trọng số nhị phân tìm kiếm tối ưu obst(a, n, root, M) ≡ double m[][]; * for (i=1→n) //Khởi động { M[i][i] = p[i]; M[i][i-1] = 0; root[i][i] = i; } M[n+1][n] = 0; * for (diag = 1→n-1) for (i=1 → n-diag) { j = i + diag; j M [i][ j ] = Min( M [i ][k − 1] + M [k + 1][ j ]) + ∑ a[q] ; i≤k ≤ j q =i root[i][j] = k;//Chỉ số giá trị nhỏ m[i][jï] } * minOBSST = M[1][n]; * return minOBSST; Độ phức tạp thuật toán T(n) ∈ O(n3) Trần Tuấn Minh CuuDuongThanCong.com Khoa Toán-Tin https://fb.com/tailieudientucntt Thiết kế đánh giá thuật toán - 111 - Cài đặt double obst(double a[max],int n, mat root, mat M) { int i, j, k, diag,csm; double min; for (i = 1; i

Ngày đăng: 07/06/2022, 16:07

Xem thêm:

HÌNH ẢNH LIÊN QUAN

Thuật toán có thể diễn đạt dưới nhiều hình thức, chẳng hạn dưới dạng lưu đồ, dạng ngôn ngữ tự nhiên, dạng mã giả hoặc  một ngôn ngữ lập trình nào đó  - Thiết kế đánh giá thuật toán
hu ật toán có thể diễn đạt dưới nhiều hình thức, chẳng hạn dưới dạng lưu đồ, dạng ngôn ngữ tự nhiên, dạng mã giả hoặc một ngôn ngữ lập trình nào đó (Trang 9)
Mô hình ban đầu có thể sử dụng như sau: ry(i) ≡ - Thiết kế đánh giá thuật toán
h ình ban đầu có thể sử dụng như sau: ry(i) ≡ (Trang 75)
Cho một lưới hình vuông cấp n, mỗi ô được gán với một số tự nhiên. e trái, rẽ phải ( 4 ô kề cạnh ) - Thiết kế đánh giá thuật toán
ho một lưới hình vuông cấp n, mỗi ô được gán với một số tự nhiên. e trái, rẽ phải ( 4 ô kề cạnh ) (Trang 98)
3. Thiết kế thuật toán - Thiết kế đánh giá thuật toán
3. Thiết kế thuật toán (Trang 109)