thiết kế và đánh giá thuật toán - trần tuấn minh -1 pot

16 593 5
thiết kế và đánh giá thuật toán - trần tuấn minh -1 pot

Đ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

Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - MUÏC LUÏ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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - Độ 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 toá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 Troän hai đường trực tiếp - 44 Bài toá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 Ý tưởng…………………………………………………………………………………………………….- 542 Mô hình - 53 II Bài toán Ngựa tuần - 54 Phát biểu toaùn - 54 Thiết kế thuật toán - 55 III Bài toán haäu - 57 Phát biểu toán - 57 Thieát keá thuật toán - 57 IV Bài toán liệt kê dãy nhị phân độ dài n - 59 Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - Phaùt biểu toán - 59 Thiết kế thuật toán - 59 V Baøi toán liệt kê hoán vị - 60 Phát biểu toá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 Thiết kế thuật toán - 61 VII Bài toán tìm kiếm đường đồ thị - 61 Phát biểu toaù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 Moâ 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 Thiết kế 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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - Cài đặt - 83 III Thuật toán Dijkstra -Tìm đường ngắn đồ thị có trọng số - 84 Baøi toaùn - 84 Ý tưởng - 85 Moâ tả thuật toá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 toán - 90 Ý tưởng - 90 Mô 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 há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 Heuristic - 97 Bài tậ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 toaù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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thieát keá and Split Unregistered Version - http://www.simpopdf.com - - Ý tưởng - 104 Thieát keá - 105 Độ phức tạp thuật toá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 YÙ tưởng - 108 Thiết kế thuật toá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 toaùn - 116 Độ phức tạp thuật toán - 118 Bài tập - 118 PHUÏ LUÏC - 120 TÀI LIỆU THAM KHẢO - 122 - Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - 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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thieát keá and Split Unregistered Version - http://www.simpopdf.com - - 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 kyû 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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - - Caù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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết keá and Split Unregistered Version - http://www.simpopdf.com - 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 Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 11 } Cấu trúc rẽ nhánh : if (C) if (C) A else A B Trong C biểu thức logic, A B khối lệnh Cấu trúc chọn : bt Mã giả Switch(Bt) Case C1 : A1; Case C2 : A2; Case Cn : An [default : An+1;] Trong : - bt : Biểu thức nguyên - Ci giá trị nguyên đôi khác - Ai nhóm leänh C1 A1 C2 A2 Cn An An+1 Lặp với kiểm tra điều kiện trước (While) Mã giả : While C C A; A Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 12 Lặp với kiểm tra điều kiện sau (do while) Mã giả : A; while (C); A C Lặp với số lần lặp xác định Mã giả : For (bt1;bt2;bt3) A Trong : - bt1 : Khởi đầu giá trị biến điều khiển - bt2 : Biểu thức điều kiện, xác định điều kiện lặp - bt3 : Khởi đầu lại biến điều khiển - A khối lệnh bt1 bt2 A bt3 Câu lệnh vào : Đọc : scanf(danh_sách_biến); Viết : printf(Danh_sách_biến); Câu lệnh bát đầu kết thúc : { } 10 Hàm (Function): Type tên_hàm (Danh sách type đối) { } 11 Lời gọi hàm : tên_hàm (Danh sách tham số thực); 12 Câu lệnh return return (bt) : Gán giá trị biểu thức bt cho hàm III Thiết kế thuật toán Thuật toán thiết kế cách có cấu trúc, công cụ chủ yếu : Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 13 - Modul hóa thiết kế từ xuống (Top-Dow) Các toán giải máy tính ngày phức tạp đa dạng Các thuật toán giải chúng ngày có quy mô lớn đòi hỏi nhiều thời gian công sức nhiều người Tuy nhiên công việc đơn giản ta chia toán thành toán nhỏ Điều có nghóa coi toán modul cần chia thành modul Đến lượt modul lại phân rã thành modul thích hợp Như việc tổ chức lời giải thể theo cấu trúc phân cấp : A A2 A1 A1 A1 A3 A3 A3 A3 Chiến thuật giải toán “chia để trị”, thể chiến thuật ta dùng thiết kế từ xuống Đó cách nhìn nhận vấn đề cách tổng quát, đề cập đến công việc chính, sau bổ sung dẩn chi tiết Phương pháp làm mịn dần (hay tinh chế bước ) xuống Là phương pháp thiết kế phản ánh tinh thần modul hóa thiết kế từ Đầu tiên thuật toán trình bày dạng ngôn ngữ tự nhiên thể ý công việc Các bước sau chi tiết hóa dần tương ứng với công việc nhỏ Đó bước làm mịn dần đặc tả thuật toán hướng ngôn ngữ lập trình mà ta dự định cài đặt Quá trình thiết kế phát triển thuật toán thể dần từ ngôn ngữ tự nhiên, sang ngôn ngữ mã giả đến ngôn ngữ lập trình, từ mức “làm “đến “làm nào” Ví dụ : Bài toán nắn tên Một tên có hay nhièu từ, từ tách biệt dấu cách (khoảng trắng, tab, ) Từ dãy ký tự khác dấu cách Việc nắn tên thực theo quy cách : (i) Khử dấu cách đầu cuối tên (cả họ tên gọi tắt tên ) (ii) Khử bớt dấu cách từ, để lại dấu cách (iii) Các chữ đầu từ viết hoa, ngòai chữ lại viết thường Chương trình phát thảo : Mức : Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 14 Nắn x thành x theo quy tắc (i-iii) Mức : Do tên tạo từ , nên nắn tên ta phải nắn từ Ta nắn từ tên hết từ Ý tưởng múc làm mịn sau : Khi (còn từ w x) ta thực Nắn lại từ w x; Đặt dấu cách cần; Mức : Ta chi tiết thao tác :”Đặt dấu cách cần” Rõ ràng dấu cách nối đặt sau từ, trừ từ cuối Như sau xử lý xong từ cuối ta không đặt dấu cách Vậy ta viết : Khi (còn từ w x) ta thực Nắn lại từ w x; Nếu w chưa phải từ cuối x Đặt dấu cách sau w; Mức : Để xử lý liệu rõ ràng, tạm thời ta coi tên đích y tên nguồn x y = từ rổng; Khi (còn từ w x) ta thực Nắn lại từ w x; Ghép w vào sau y; Nếu w chưa phải từ cuối x Ghép dấu cách vào sau y; Mức : Ta cụ thể hóa từ Dễ thấy từ w x dãy ký tự không chứa dấu cách chặn đầu cuối dấu cách từ rổng Có thể nhận dạng từ w x thao tác đơn giản sau : a) Vượt dãy dấu cách để đến đầu từ b) Vượt dãy ký tự khác dấu cách để đến hết từ Ta ý tín hiệu kết thúc x ký tự NULL Ta viết hàm nắn tên sau : void Nanten(char x[]) { char y[max]; int i; y[0] = '\0'; // Vượt dãy dấu cách biên trái i = 0; Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 15 while (x[i] == cach ) i++; //Cho kết : x[i] đầu từ x[i] = NULL while (x[i] != NULL) // Trường hợp x[i] đầu từ { ghepkt(Hoa(x[i]),y); // Ký tự đầu Hoa i++; //Sang thân từ rơi vào kết while ((x[i] != cach )&& (x[i] != NULL)) // Thân từ { // Xử lý thân từ ghepkt(Thuong(x[i]),y); // Trong thân từ, KT viết thường i++; } // Xử lý xong từ, tìm đến từ while (x[i] == cach) i++; // Vượt dấu cách sau từ if (x[i] != NULL) // Từ vừa xử lý chưa phải từ cuối ghepkt(cach,y); } strcpy( y,x); } Mức : Ta viết thêm hàm : Hoa(char x) : Đổi ký tự thường thành Hoa; Thuong(char x): Đổi ký tự hoa thành thường ghepkt (char ch, char y[ ]); Ghép ký tự ch vào cuối xâu y, lưu trử lại vào y Nhận xét khoảng cách d = | ‘A’ - ‘a’| ( = 32) độ lệch chữ hoa đến chữ thường Vậy ch chữ thường ch -d mã từ hoa tương ứng, ngược lại, ch chữ hoa ch + d mã từ thường tương ứng Từ suy cách cài đặt hàm Hoa() Thuong() Còn hàm ghép(), Chỉ cần xác định cuối y, sau chép ch vào cuối y xong Một số phương pháp thiết kế Trên sở lý thuyết máy Turing, ta chia toán thành lớp không giao : Lớp giải thuật toán , lớp không giải thuật toán Đối với lớp toán giải thuật toán, dựa vào đặc trưng trình thiết kế thuật toán, ta số phương pháp thiết kế thuật toán sau : a) Phương pháp chia để tri ( Divide-and-Conquer method ) Ý tưởng : Chia liệu thành miền đủ nhỏ, giải toán miền chia tổng hợp kết lại Trần Tuấn Minh Khoa Toán-Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 16 Chẳng hạn thuật toán Quicksort b) Phương pháp quay lui ( BackTracking method ) Tìm kiếm theo ưu tiên Đối với bước thuật toán, ưu tiên theo độ rộng hay chiều sâu để tìm kiếm Chẳng hạn thuật toán giải toán hậu c) Phương pháp tham lam ( Greedy Method ) Ý tưởng : Xác định trật tự xử lý để có lợi nhất, Sắp xếp liệu theo trật tự đó, xử lý liệu theo trật tự nêu Công sức bỏ tìm trật tự Chẳng hạn thuật toán tìm bao trùm nhỏ (Shortest spanning Trees) d) Phương pháp Quy hoạch động (Dynamic Programming method) Phương pháp quy hoạch động dựa vào nguyên lý, gọi nguyên lý tối ưu Bellman : “ Nếu lời giải toán tối ưu lời giải toán tối ưu ” Phương pháp tổ chức tìm kiếm lời giải theo kiểu từ lên Xuất phát từ toán nhỏ đơn giản nhất, tổ hợp lời giải chúng để có lời giải toán lớn cuối lời giải toán ban đầu Chẳng hạn thuật toán “chiếc túi xách” (Knapsack) e) Phương pháp nhánh cận ( branch-and-bound method ) Ý tưởng : Trong trình tìm kiếm lời giải, ta phân hoạch tập phương án toán thành hai hay nhiều tập biểu diễn nút tìm kiếm cố găng phép đánh giá cận cho nút, tìm cách loại bỏ nhánh mà ta biết không chưa phương án tối ưu Chẳng hạn thuật toán giải toán người du lịch Ta minh họa hình vẽ sau : Trần Tuấn Minh Khoa Toaùn-Tin Sưu t m b i: www.daihoc.com.vn ... hàm III Thiết kế thuật toán Thuật toán thiết kế cách có cấu trúc, công cụ chủ yếu : Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and... - 82 Ý tưởng - 82 Thuật toán - 82 Độ phức tạp thuật toán - 83 Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết. .. Bài toán Ngựa tuần - 54 Phát biểu toán - 54 Thiết kế thuật toán - 55 III Bài toán hậu - 57 Phát biểu toán - 57 Thiết kế thuật toaùn - 57 IV Bài toán

Ngày đăng: 21/07/2014, 23:22

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • CHƯƠNG 1 : GIỚI THIỆU THIẾT KẾ, ĐÁNH GIÁ THUẬT TOÁN

    • I. Định nghĩa trực quan về Thuật toán

      • 1. Định nghĩa

      • 2. Các đặc trưng cơ bản của thuật toán

      • 3. Đặc tả thuật toán

      • II. Các dạng diễn đạt thuật toán

        • 1. Dạng lưu đồ ( sơ đồ khối )

        • 2. Dạng ngôn ngữ tự nhiên

        • 3. Ngôn ngữ lập trình

        • 4. Dạng mã giả

        • III. Thiết kế thuật toán

          • 1. Modul hóa và thiết kế từ trên xuống (Top-Down)

          • 2. Phương pháp làm mịn dần

          • 3. Một số phương pháp thiết kế

          • IV. Phân tích thuật toán

            • 1. Các bước trong quá trình phân tích đánh giá thời gian chạy của thuật toán

            • 2. Các ký hiệu tiệm cận

            • 3. Một số lớp các thuật toán

            • 4. Phân tích thuật toán đệ qui

            • 5. Các phép toán trên các ký hiệu tiệm cận

            • 6. Phân tích trường hợp trung bình

            • V. Tối ưu thuật toán

            • Bài tập

            • CHƯƠNG 2: PHƯƠNG PHÁP CHIA ĐỂ TRỊ

              • I. Mở đầu

                • 1. Ý tưởng

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

Tài liệu liên quan