1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng Thiết kế và đánh giá thuật toán

201 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

Thông tin cơ bản

Định dạng
Số trang 201
Dung lượng 1,13 MB

Nội dung

BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT NAM ĐỊNH tËp bµi giảng thiết kế đánh giá thuật toán M S TB2012-02-06 BIÊN SOẠN: PHẠM CAO HÀO NAM ĐỊNH 2012 Lời nói đầu Xây dựng thuật tốn tốt để giải bài toán cho bước quan trọng việc giải tốn máy tính điện tử Để có thuật thuật tốn tốt cần phải nắm vững kỹ thuật thiết kế, phân tích, đánh giá thuật tốn thuật tốn cho số lớp bài tốn điển hình Tài liệu Thiết kế đánh giá thuật toán biên soạn nhằm phục vụ công việc giảng dạy học tập môn học Thiết kế đánh giá thuật tốn ngành học Khoa học máy tính thuộc khoa Công nghệ thông tin trường Đại học sư phạm kỹ thuật Nam Định Tài liệu cần thiết cho tất ngành học thuộc khoa Công nghệ thông tin Nội dung tài liệu trình bày kỹ thuật thiết kế thuật tốn thơng dụng sở phân tích, đánh giá độ phức tạp thuật tốn Tài liệu gồm chương: Chương 1: Tổng quan thiết kế đánh giá thuật toán Chương 2: Kỹ thuật chia để trị Chương 3: Kỹ thuật tham lam Chương 4: Kỹ thuật quay lui Chương 5: Kỹ thuật nhánh cận Chương 6: Kỹ thuật quy hoạch động Trong chương vấn đề đưa minh họa ví dụ Cuối chương có hệ thống tập nhằm giúp người học củng cố kiến thức học đồng thời rèn luyện khả vận dụng kiến thức để giải số toán thực tế Với tập khó tài liệu đưa hướng dẫn giải để giúp người học thuận lợi qua trình nghiên cứu giải tập Cuối tài liệu phần cài đặt số thuật toán thiết kế nhằm giúp người học thuận lợi việc nắm bắt vận dụng kỹ thuật thiết kế thuật toán Tài liệu biên soạn theo chương trình mơn học Thiết kế đánh giá thuật tốn ngành học Khoa học máy tính thuộc khoa Công nghệ thông tin trường Đại học sư phạm kỹ thuật Nam Định Nội dung tài liệu biên soạn dựa sở nội dung giảng tác giả số năm qua khoa Công nghệ thông tin trường Đại học sư phạm kỹ thuật Nam Định Trong trình biên soạn, tác giả nhận nhiều ý kiến đóng góp với động viên, khích lệ bạn bè đồng nghiệp khoa trường Tác giả xin tỏ lịng cảm ơn với ý kiến đóng góp động viên khích lệ i Với lần biên soạn đầu tiên, cố gắng song chắn tài liệu tránh khỏi thiếu sót Rất mong nhận ý kiến đóng góp để tài liệu ngày hồn thiện Phạm Cao Hào ii MỤC LỤC Chương Tổng quan thiết kế đánh giá thuật toán 1.1 Thuật toán 1.1.1 Khái niệm thuật toán 1.1.2 Các đặc trưng thuật toán 1.2 Sự cần thiết thiết kế đánh giá thuât toán 1.3 Diễn tả thuật toán 1.4 Thiết kế thuật toán 1.4.1 Modul hoá thiết kế từ xuống 1.4.2 Phương pháp mịn dần (tinh chỉnh bước) 1.4.3 Một số kỹ thuật thiết kế 1.5 Phân tích thuật tốn 1.5.1 Thời gian thực hiên thuật toán 1.5.2 Độ phức tạp tính tốn thuật tốn 10 1.5.3 Ðộ phức tạp chương trình có gọi chương trình khơng đệ qui 16 1.5.4 Phân tích thuật tốn đệ quy 17 1) Thành lập phương trình truy hồi 18 2) Giải phương trình truy hồi 19 Bài tập chương 31 Chương Kỹ thuật chia để trị 37 2.1 Nội dung kỹ thuật 37 2.2 Các ví dụ áp dụng 37 2.2.1 Tìm max 37 2.2.2 Một số thuật toán xếp 40 1) Sắp xếp nhanh 40 2) Sắp xếp trộn 44 2.2.3 Tìm kiếm nhị phân 51 2.2.4 Nhân số nguyên lớn 53 Bài tập chương 57 Chương Kỹ thuật tham lam 62 3.1 Nội dung kỹ thuật 62 3.1.1 Bài toán tối ưu tổ hợp 62 3.1.2 Nội dung kỹ thuật tham lam 62 3.2 Các ví dụ áp dụng 62 iii 3.2.1 Bài toán người giao hàng 62 3.2.2 Bài tốn ba lơ 65 3.2.3 Bài tốn tơ màu đồ 70 3.2.4 Tìm khung nhỏ 74 3.2.5 Tìm đường ngắn 77 3.2.6 Bài tốn phân công công việc 79 Bài tập chương 84 Chương Kỹ thuật quay lui 86 4.1 Nội dung kỹ thuật 86 4.2 Các ví dụ áp dụng 87 4.2.1 Đưa dãy nhị phân độ dài n 87 4.2.2 Đưa hoán vị n số nguyên 88 4.2.3 Đưa tập tập gồm n số nguyên 90 4.2.4 Bài toán xếp hậu 92 4.2.5 Tìm đường đồ thị 94 4.2.6 Bài toán ngựa tuần 99 Bài tập chương 104 Chương Kỹ thuật nhánh cận 111 5.1 Nội dung kỹ thuật 111 5.2 Các ví dụ áp dụng 114 5.2.1 Bài toán người du lịch 114 5.2.2 Bài tốn ba lơ 128 Bài tập chương 133 Chương Kỹ thuật quy hoạch động 137 6.1 Nội dung kỹ thuật 137 6.2 Các ví dụ áp dụng 140 6.2.1 Tính số tổ hợp 140 6.2.2 Bài toán nhân nhiều ma trận 143 6.2.3 Bài toán ba lô 149 6.2.4 Xâu chung dài 154 Bài tập chương 164 Phụ lục 171 Tài liệu tham khảo 195 iv v Chƣơng TỔNG QUAN VỀ THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TỐN 1.1 Thuật tốn 1.1.1 Khái niệm thuật toán Thuật toán (Algorithm) biết đến từ lâu Đầu tiên thuật toán hiểu qui tắc thực phép tính 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 tốn hiểu theo nghĩa rộng Khái niệm thuật toán định nghĩa cách hình thức xác thơng qua máy Turing xem xét khái niệm thuật toán cách trực quan Thuật toán (hay giải thuật, thuật giải) khái niệm sở tin học Mỗi toán thực tế bao gồm hai phần: - Input: Các đại lượng cho trước (đại lượng vào) - Output: Các đại lượng cần tìm (đại lượng ra) Như việc giải toán việc xác định tường minh output theo input q trình thực cách hiệu Đó nội dung lý thuyết tính tốn Khi cho tốn, ta cần tìm dãy hữu hạn thao tác đơn giản xếp theo trình tự xác định cho theo đó, từ input ta tìm output theo yêu cầu Một cách trực quan thuật toán giải toán dãy hữu hạn dẫn (quy tắc, thao tác hay phép tốn) rõ ràng xác xếp theo trình tự xác định để cho sau số hữu hạn lần thực hiên dẫn biến đổi input thành output 1.1.2 Các đặc trƣng thuật tốn 1) Dữ liệu vào Mỗi thuật tốn có nhiều đại lượng vào mà ta thường gọi liệu vào 2) Dữ liệu Sau thực hiên xong thuật toán, tuỳ theo chức mà thuật tốn đảm nhiệm ta thu số đại luợng mà ta gọi liệu 3) Tính xác định Tính xác định thuật tốn địi hỏi chỗ bước thao tác phải rõ ràng, gây nên nhập nhằng, lẫn lộn, tuỳ tiện Nói cách khác điều kiện hai xử lý (người máy) thực bước thuật tốn phải cho kết 4) Tính dừng Thuật tốn phải dừng cho kết sau số hữu hạn bước thực 5) Tính hiệu Yêu cầu tính hiệu số thuật toán thực chức ta cần chọn thuật toán tốt Tiêu chuẩn tốt hiểu là: thuật toán thực nhanh, tốn thời gian nhất, dùng giấy từ nhớ để lưu trữ kết trung gian 6) Tính phổ dụng Một thuật tốn xem có tính phổ dụng cao dùng để giải toán lớp tốn khơng phải tốn cụ thể 1.2 Sự cần thiết thiết kế đánh giá thuật toán Xây dựng thuật toán tốt để giải toán cho bước quan trọng việc giải tốn máy tính điện tử Để có thuật tốn tốt cần phải nắm vững kỹ thuật thiết kế, phân tích, đánh giá thuật toán thuật toán cho số lớp tốn điển hình Trong giải tốn có số thuật toán khác nhau, vấn đề cần phải đánh giá thuật tốn để lựa chọn thuật tốn tốt (nhất) Thơng thường ta vào tiêu chuẩn sau: (1) Thuật toán đắn (2) Thuật toán đơn giản (3) Thuật toán thực nhanh Với yêu cầu (1), để kiểm tra tính đắn thuật tốn cài đặt thuật tốn cho thực máy với số liệu mẫu lấy kết thu so sánh với kết biết Thực cách làm khơng chắn thuật tốn với tất liệu thử lại sai với liệu Vả lại cách làm phát thuật toán sai chưa chứng minh Tính đắn thuật toán cần phải chứng minh toán học Điều không đơn giản không đề cập đến Khi viết chương trình để sử dụng vài lần yêu cầu (2) quan trọng Chúng ta cần giải thuật dễ viết chương trình để nhanh chóng có kết , thời gian thực chương trình khơng đề cao dù chương trình sử dụng vài lần mà thơi Tuy nhiên chương trình sử dụng nhiều lần thì yêu cầu tiết kiệm thời gian thực chương trình lại quan trọng đặc biệt chương trình mà thực cần liệu nhập lớn yêu cầu (3) xem xét cách kĩ Ta gọi hiệu thời gian thực thuật tốn 1.3 Diễn tả thuật tốn Có nhiều cách diễn tả thuật toán Người ta thường diễn tả thuật toán cách sau: 1) Liệt kê buớc Thuật tố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 2) Sơ đồ khối (Lưu đồ) Dùng hình vẽ (có qui ước) để diễn tả thuật tốn Lưu đồ cho hình ảnh trực quan tổng thể thuật toán nên thường sử dụng 3) 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ả 4) Dạng giả mã Thuật tốn trình bày dạng văn ngôn ngữ tự nhiên dễ hiểu khó cài đặt Dùng ngơn ngữ lập trình để diễn tả phức tạp, khó hiểu Thơng thường thuật tốn trình bày dạng văn không ràng buộc nhiều vào cú pháp qui định ngơn ngữ lập trình, tuân theo số qui ước ban đầu- Ta gọi dạng dạng giả mã Tuỳ theo việc định hướng cài đặt thuật tốn theo ngơn ngữ lập trình mà tả fiễn đạt thuật tốn gần với ngơn ngữ Trong tài liệu naứy ta trình bày thuật tốn dạng giả mã ngơn ngữ lập trình C Dưới số quy ước ngơn ngữ lập trình C: * Các ký tự - Bộ chữ cái: 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ệ * Các phép toán số học logic Các từ sau xem từ khoá : if, else, case, for, while , while * 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 : &&, ||, ! * Lệnh gán: biến=biểu thức; * Khối lệnh: { A1; A2; An; } * Cấu trúc rẽ nhánh if Toán tử if cho phép lựa chọn chạy theo hai nhánh tuỳ thuộc vào không khác không biểu thức Nó có hai cách viết sau : if (biểu thức) if (biểu thức) khối lệnh khối lệnh /* Dạng */ else khối lệnh /* Dạng hai */ Sự lồng toán tử if : C cho phép sử dụng toán tử if lồng có nghĩa khối lệnh (1 2) chứa tốn tử if - else khác Trong trường hợp này, không sử dụng dấu đóng mở ngoặc cho khối nhầm lẫn if-else Chú ý máy gắn toán tử else với toán tử if khơng có else gần * Cấu trúc rẽ nhánh - toán tử switch: switch (biểu thức nguyên) { case n1 khối lệnh case n2 int k=0; while(i && j) { if(L[i][j] == L[i-1][j]) i ; if(L[i][j] == L[i][j-1]) j ; if(a[i] == b[j]) { c[k] = a[i]; i ; j ; k++; } } c[k] = '\0'; } void InPA() { int l; l= strlen(c); for(int i=l-1; i>=0; i ) printf("%c", c[i]); } int main() { DocDL(); puts(a); puts(b); QHD(); TruyVet(); 181 InPA(); getch(); } Cài đặt thuật toán quay lui giải toán Mã tuần #include #include #include int p; void InBanCo(int n, int *bc) { puts(""); for(int i=0; i

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

w