BÀI GIẢNG PHÂN TÍCH THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN. TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN

74 44 0
BÀI GIẢNG PHÂN TÍCH THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN. TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN

Đ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

BỘ GIAO THÔNG VẬN TẢI TRƢỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KHOA HỌC MÁ Y TÍ NH KHOA: CÔNG NGHỆ THƠNG TIN BÀI GIẢNG PHÂN TÍCH THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TỐN TÊN HỌC PHẦN : Phân tích thiết kế đánh giá thuật toán MÃ HỌC PHẦN : 17208 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÕNG - 2010 Tên học phần: Phân tić h thiế t kế và đánh giá thuâ ̣t toán Bộ mơn phụ trách giảng dạy: Khoa học Máy tính Mã học phần: 17208 TS tiết 60 Lý thuyết 45 Thực hành/Xemina 15 Tự học Loại học phần: Khoa phụ trách: CNTT Tổng số TC: Bài tập lớn Đồ án môn học Điều kiện tiên quyết: Sinh viên phải học xong học phần sau đƣợc đăng ký học phần này: Kỹ thuật lập trình, Cấ u trúc dƣ̃ liê ̣u, Toán rời rạc Mục tiêu học phần: Cung cấp kiến thức về thuật toán, cấu trúc liệu Cung cấ p các kiế n thƣ́c về chiế n lƣơ ̣c xây dƣ̣ng và đánh giá thuâ ̣t toán Rèn luyện tƣ khoa học Nội dung chủ yếu Gồm phần: Các kiến thức thuật toán Các kiến thức xếp tìm kiếm liệu Các chiến lƣợc thiế t kế thuâ ̣t toán : chiến lƣợc chia để trị, chiến lƣợc quay lui, chiến lƣợc qui hoạch động, chiến lƣợc tham lam Kiế n thƣ́c bản về đánh giá đô ̣ phƣ́c ta ̣p thuâ ̣t toán Nội dung chi tiết học phần: TÊN CHƢƠNG MỤC Chƣơng I Các khái niệm 1.1 Giới thiệu thuật toán 1.1.1 Khái niệm thuật toán 1.1.2 Các phƣơng pháp biểu diễn thuật tốn 1.1.3 Các ví dụ biểu diễn thuật toán sơ đồ khối 1.2 Độ phức tạp thuật toán 1.2.1 Các ký hiệu , hàm đánh giá độ phức tạp thuâ ̣t toán 1.2.2 Các lớp thuật toán 1.3 Mố i quan ̣ giƣ̃a cấ u trúc dƣ̃ liê ̣u và giải thuâ ̣t 1.4 Mô ̣t số ví du ̣ Chƣơng II Sắ p xế p và tim ̀ kiế m 2.1 Bài toán xếp 2.1.1 Sắ p xế p 2.1.2 Sắ p xế p ngoài 2.1.3 Đánh giá thuâ ̣t toán sắ p xế p 2.2 Các thuật toán xếp 2.2.1 Sắ p xế p cho ̣n (Selection Sort) 2.2.2 Sắ p xế p đổ i chỗ trƣ̣c tiế p (Exchange Sort) 2.2.3 Sắ p xế p chèn (Insertion Sort) 2.2.4 Sắ p xế p nổ i bo ̣t (Bubble Sort) 2.2.5 So sánh các thuâ ̣t toán sắ p xế p bản PHÂN PHỐI SỐ TIẾT TS LT TH/Xemina BT KT 0,5 0,5 15 0,5 2,5 1 i TÊN CHƢƠNG MỤC 2.3 Sắ p xế p vun đố ng 2.3.1 Cấ u trúc Heap 2.3.2 Thuâ ̣t toán xây dƣ̣ng cấ u trúc Heap 2.3.3 Thuâ ̣t toán sắ p xế p vun đố ng 2.4 Tìm kiếm tuyến tính 2.4.1 Bài tốn tìm kiếm 2.4.2 Thuâ ̣t toán tim ̀ kiế m tuyế n tiń h Chƣơng III Đê ̣qui và chiế n lƣơ ̣c vét ca ̣n 3.1 Khái niệm đệ quy 3.1.1 Giải thuật đệ quy thủ tục đệ quy 3.1.2 Thiết kế giải thuật đệ quy 3.1.3 Hiệu lực đệ quy 3.1.4 Đệ quy quy nạp toán học 3.2 Chiế n lƣơ ̣c vét ca ̣n (Bruteforce) 3.3 Chiế n lƣơ ̣c đê ̣ qui quay lui (backtracking) 3.3.1 Vector nghiê ̣m 3.3.2 Thủ tục đệ qui 3.3.3 Các giá trị đề cử 3.3.4 Điề u kiê ̣n chấ p nhâ ̣n 3.3.5 Mô ̣t số bài toán backtracking điể n hiǹ h Chƣơng IV Chiế n lƣơ ̣c chia để tri ̣ 4.1 Cơ sở của chiế n lƣơ ̣c chia để tri ̣ 4.2 Thuâ ̣t toán sắ p xế p bằ ng trô ̣n 4.2.1 Thuâ ̣t toán trô ̣n hai Run 4.2.2 Sắ p xế p bằ ng trô ̣n 4.3 Sắ p xế p nhanh (Quick sort) 4.3.1 Chiế n lƣơ ̣c phân hoa ̣ch 4.3.2 Quick sort 4.4 Tìm kiếm nhị phân 4.5 Thuâ ̣t toán nhân số nguyên 4.5.1 Thuâ ̣t toán nhân tay 4.5.2 Thuâ ̣t toán chia để tri ̣ 4.6 Mô ̣t số bài toán khác Chƣơng V Qui hoa ̣ch đô ̣ng 5.1 Chiế n lƣơ ̣c qui hoa ̣ch đô ̣ng 5.1.1 Các điều kiện để áp dụng 5.1.2 Các bƣớc qui hoạch động 5.1.3 Các kiểu qui hoạch động 5.2 Bài toán dãy số Fibonaci 5.2.1 Thuâ ̣t toán đê ̣ qui 5.2.2 Thuâ ̣t toán qui hoa ̣ch đô ̣ng 5.3 Bài toán dãy chung dài 5.4 Bài toán nhân ma trận 5.5 Mô ̣t số ví du ̣ khác Chƣơng VI Chiế n lƣơ ̣c tham lam 6.1 Nguyên tắ c tham lam 6.2 Bài tốn đởi tiền 6.3 Bài toán lịch kiện 6.3.1 Thuâ ̣t toán đê ̣ qui PHÂN PHỐI SỐ TIẾT TS LT TH/Xemina 2,5 1,5 11 11 12 1 0,5 1 0,5 0,5 1,5 BT KT 1 1 1 1,5 1 1 0,5 1,5 0,5 1,5 0,5 1 0,5 1 1 ii TÊN CHƢƠNG MỤC 6.3.2 Thuâ ̣t toán theo chiế n lƣơ ̣c tham lam 6.4 So sánh chiế n lƣơ ̣c tham lam với chiế n lƣơ ̣c qui hoa ̣ch đô ̣ng PHÂN PHỐI SỐ TIẾT TS LT TH/Xemina 0,5 BT KT Nhiệm vụ sinh viên : Tham dự buổi thuyết trình giáo viên, tự học, tự làm tập giáo viên giao, tham dự kiểm tra định kỳ cuối kỳ Tài liệu học tập : Nguyễn Hữu Điển, Giáo trình số vấn đề thuật toán, NXB Giáo dục, 2003 Đinh Mạnh Tƣờng Cấu trúc liệu thuật toán NXB Đại học Quốc gia Hà nội 2002 Nguyễn Quốc Lƣợng, Hoàng Đức Hải Cấu trúc liệu + giải thuật = chương trình NXB Giáo dục 1996 Richard Neapolitan Kumarss Naimipour, Foundations of Algorithms Using C++ Pseudocode, Third Edition, Jones and Bartlett Publishers, 2004 Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, Clifford Stein, Introduction to Algorithms, Second Edition, MIT Press, 2001 Hình thức tiêu chuẩn đánh giá sinh viên: Hình thức thi cuối kỳ : Thi vấn đáp Sinh viên phải đảm bảo điều kiện theo Quy chế Nhà trƣờng Bộ Thang điểm: Thang điểm chữ A, B, C, D, F Điểm đánh giá học phần: Z = 0,3X + 0,7Y Bài giảng tài liệu thức thống Bộ mơn Khoa học Máy tính, Khoa Cơng nghệ Thơng tin đƣợc dùng để giảng dạy cho sinh viên Ngày phê duyệt: / /20 Trƣởng Bộ môn: ThS Nguyễn Hữu Tuân (ký ghi rõ họ tên) iii Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật MỤC LỤC LỜI NÓI ĐẦU CHƢƠNG I: CÁC KHÁI NIỆM CƠ BẢN Thuâ ̣t toán (giải thuật) - Algorithm 1.1 Đinh ̣ nghiã thuâ ̣t toán 1.2 Đặc trƣng thuật toán 2 Biể u diễn thuâ ̣t toán 2.1 Mô tả bƣớc thực 2.2 Sử dụng sơ đồ (lƣu đồ) giải thuật (flowchart) 3 Độ phức tạp thuật toán – Algorithm Complexity 3.1 Các tiêu chí đánh giá thuật tốn 3.2 Đánh giá thời gian thƣ̣c hiê ̣n thuâ ̣t toán 3.3 Các định nghĩa hình thức độ phức tạp thuật toán 3.4 Các lớp thuật toán Cấ u trúc dƣ̃ liê ̣u – Data structure Các chiến lƣợc thiết kế thuật toán 5.1 Duyệt toàn (Exhausted search) 5.2 Đệ qui quay lui – Backtracking 5.3 Chia để tri ̣(Divide and Conquer) 5.4 Chiế n lƣơ ̣c tham lam (Greedy) 10 5.5 Qui hoa ̣ch đô ̣ng (Dynamic Programming) 11 Bài tập 11 CHƢƠNG II: SẮP XẾP (SORTING) VÀ TÌM KIẾM (SEARCHING) 13 Bài toán xếp 13 1.1 Sắ p xế p (Internal Sorting) 13 1.2 Sắ p xế p (External Sorting) 13 1.3 Sắ p xế p gián tiếp 13 1.3 Các tiêu chuẩn đánh giá thuật toán xếp 14 Các phƣơng pháp xếp 15 2.1 Sắ p xế p cho ̣n (Selection sort) 15 2.2 Sắ p xế p đổ i chỗ trƣ̣c tiế p (Exchange sort) 17 2.3 Sắ p xế p chèn (Insertion sort) 19 2.4 Sắ p xế p nổ i bo ̣t (Bubble sort) 21 iv Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật 2.5 So sánh thuật toán xếp 23 Cấ u trúc dƣ̃ liê ̣u Heap, sắ p xế p vun đố ng (Heap sort) 24 Tìm kiếm tuyến tính 31 Các vấn đề khác 33 Bài tập 33 CHƢƠNG III: ĐỆ QUI VÀ CHIẾN LƢỢC VÉT CẠN 34 Khái niệm đệ qui 34 Chiế n lƣơ ̣c vét ca ̣n (Brute force) 34 Chiế n lƣơ ̣c quay lui (Back tracking / try and error) 35 CHƢƠNG IV: CHIẾN LƢỢC CHIA ĐỂ TRỊ 38 Cơ sở chiến lƣợc chia để tri ̣(Divide and Conquer) 38 Sắ p xế p trô ̣n (Merge sort) 38 Sắ p xế p nhanh (Quick sort) 43 Tìm kiếm nhị phân 46 Bài tập 48 CHƢƠNG V: QUI HOẠCH ĐỘNG 49 Chiến lƣợc qui hoa ̣ch đô ̣ng 49 Bài toán 1: Dãy Fibonaci 49 Bài toán 2: Bài toán nhân dãy ma trận 51 Phƣơng pháp qui hoa ̣ch đô ̣ng 53 Bài toán dãy chung dài 53 Bài tập 57 CHƢƠNG VI: CHIẾN LƢỢC THAM LAM (GREEDY) 60 Nguyên tắc tham lam 60 Bài tốn đởi tiền 60 Bài toán lập lịch 61 So sánh chiến lƣợc tham lam qui hoạch động 64 TÀI LIỆU THAM KHẢO 65 ĐỀ THI THAM KHẢO 66 v Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật LỜI NÓI ĐẦU Cấ u trúc dƣ̃ liê ̣u và chiến lƣợc thiết kế thuật toán lĩnh vực nghiên cứu gắn liền với và là mô ̣t nhƣ̃ng liñ h vƣ̣c nghiên cƣ́u lâu đời của khoa ho ̣c máy tính Hầ u hế t chƣơng trình đƣợc viết , chạy máy tính , dù lớn hay nhỏ , dù đơn giản hay phức tạp , phải sử dụng cấu trúc liệu tuân theo trình tự , cách thức làm việc đó , giải thuật Viê ̣c hiể u biế t về các thuâ ̣t toán chiên lƣợc xây dựng thuật toán cho phép lập trình viên , nhà khoa ho ̣c máy tiń h có nề n tảng lý thuyế t vƣ̃ng chắ c , có nhiều lƣ̣a cho ̣n viê ̣c đƣa các giải pháp cho các bài toán thƣ̣c tế Vì việc học tập môn ho ̣c Phân tích thiế t kế và dánh giá giải thuâ ̣t điề u quan tro ̣ng Tài liệu dựa kinh nghiệm nghiên cứu mà tác giả đã đúc rút , thu thập trình giảng dạy môn học Cấ u trúc dƣ̃ liê ̣u và giải thuâ ̣t tại khoa Công nghệ Thông tin, Đại học Hàng hải Việt nam , với tham khả o của các tài liê ̣u của các đồ ng nghiê ̣p , tác giả nƣớc , tƣ̀ điể n trƣ̣c tuyế n Wikipedia Với bẩ y chƣơng đƣợc chia thành chủ đề khác từ các khái niê ̣m bản thuâ ̣t toán sắ p xế p , tìm kiếm, chiế n lƣơ ̣c thiế t kế thuâ ̣t toán nhƣ đê ̣ qui , quay lui , qui hoa ̣ch đô ̣ng , tham lam … hy vọng cung cấp cho em sinh viên , bạn độc giả tài liệu bở ích Mặc dù đã cố gắng song không tránh khỏi số thiếu sót, hy vọng đƣợc bạn bè đồng nghiệp, em sinh viên, bạn độc giả góp ý chân thành để tơi có thể hồn thiện tài liệu Xin gửi lời cảm ơn chân thành tới bạn bè đồng nghiệp Ban chủ nhiệm khoa Công nghệ Thông tin đã tạo điều kiện giúp đỡ để tài liệu có thể hoàn thành Hải phòng, tháng 04 năm 2010 Tác giả Nguyễn Hƣ̃u Tuân Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật CHƢƠNG I: CÁC KHÁI NIỆM CƠ BẢN Thuâ ̣t toán (giải thuật) - Algorithm 1.1 Đinh ̣ nghiã thuâ ̣t toán Có nhiều định nghĩa cũng nhƣ cách phát biểu khác định nghĩa thuật tốn Theo nhƣ ć n sách giáo khoa nổ i tiế ng viế t về thuâ ̣t toán “Introduction to Algorithms” (Second Edition của Thomas H Cormen, Charles E Leiserson, Ronald L Rivest và Clifford Stein ) thì thuật toán đƣợc định nghĩa nhƣ sau : “mô ̣t thuâ ̣t toán là mơ ̣t thủ tục tính tốn xác định (well-defined) nhâ ̣n các giá tri ̣hoă ̣c mô ̣t tâ ̣ p các giá tri ̣go ̣i là input và sinh ra mô ̣t vài giá tri ̣hoă ̣c mô ̣t tâ ̣p giá tri ̣đƣơ ̣c go ̣i là output” Nói cách khác thuật toán giống nhƣ cách thức , qui triǹ h để hoàn thành mô ̣t công viê ̣c cu ̣ thể xác đinh (well-defined) đó Vì đoạn mã chƣơng trình tính ̣ phần tử dãy số Fibonaci cài đặt thuật toán cụ thể Thâ ̣m chí mô ̣t hàm đơn giản để cô ̣ng hai số cũng là mô ̣t thuâ ̣t toán hoàn chỉnh , mă ̣c dù đó thuật toán đơn giản 1.2 Đặc trƣng thuật tốn Tính đắn : Th ̣t toán cầ n phải đảm bảo cho mô ̣t kế t quả đúng sau thƣ̣c hiê ̣n đố i với các bô ̣ dƣ̃ liê ̣u đầ u vào Đây có thể nói là đă ̣c trƣng quan tro ̣ng nhấ t đớ i với mơ ̣t th ̣t tốn Tính dừng: thuâ ̣t toán cầ n phải đảm bảo sẽ dƣ̀ng sau mơ ̣t sớ hƣ̃u ̣n bƣớc Tính xác định : Các bƣớc thuật toán phải đƣợc phát biểu rõ ràng , cụ thể, tránh gây nhâ ̣p nhằ ng hoă ̣c nhầ m lẫn đố i với ngƣời đo ̣c và hiể u, cài đặt thuật tốn Tính hiệu quả: th ̣t toán đƣơ ̣c xem là hiê ̣u quả nế u nhƣ nó có khả giải quyế t hiê ̣u toán đặt thời gian hoặc điều kiện cho phép thực tế đáp ứn g đƣơ ̣c yêu cầ u của ngƣời dùng Tính phở qt : th ̣t toán đƣơ ̣c go ̣i là có tiń h phố quát quyế t đƣơ ̣c mô ̣t lớp các bài toán tƣơng tƣ̣ (phổ biế n ) nế u nó có thể giải Ngồi mỡi thuật tốn theo định nghĩa nhận giá trị đầu vào đƣợc gọi chung giá trị liệu Input Kế t quả của thuâ ̣t toán (thƣờng là mô ̣t kế t quả cu ̣ thể nào đó tùy theo toán thuật toán cụ thể) đƣơ ̣c go ̣i là Output Biể u diễn thuâ ̣t toán Thƣờng có hai cách biểu diễn thuật tốn, cách thứ mô tả bƣớc thực thuật toán, cách thứ hai sử dụng sơ đồ giải thuật 2.1 Mô tả bƣớc thực Để biểu diễn thuật tốn ngƣời ta mơ tả xác bƣớc thực thuật toán, ғ ғ %jLJLҧQJP{QKӑF 3KkQ W Õ F K W KL r W  Nr  YD  ÿiQK J L i J L ҧL  W KXұ W Ғ ғ Ví dө: mô tҧthuұ WWRiQWuPѭ ӟc sӕchung lӟn nhҩ t cӫa hai sӕnguyên Input: Hai sӕnguyên a, b Output: ѬӟF  V ӕ F KXQJ  O ӟQ QKҩ W  F ӫD  D , b Thuұt toán: %ѭѫ F  1: 1r ғ X D =b USCLN(a, b)=a ғ %ѭѫ F  2: 1r ғ X D  > b tìm USCLN cӫa a-b b, quay lҥ i Eѭѫ F  1; ғ ғ %ѭѫ F  3: NӃ u a < b tìm USCLN cӫa a b-a, quay lҥ i Eѭѫ F  1; ғ ғ Ғ 6ӱGөQJ Vѫ ÿ{  (OѭXÿӗ ) JLҧLWKXұW (flowchart) Ѵ Ѵ Ѵ Ѻ 0{W  W U RQJ  QKѭ QJ  F D F K SK{  EL r ғ Q ÿr  EL r X GL r Q  W KXk W  W RD Q O D  V ѭ  GXQ J  V ѫ ÿ{ Ғ  W KXk W  W RD Q  ҕ ҕ ҕ ҕ Ѵ Ѻ ғ ғ Ғ ғ (Algorithm Flowchart) Ѵ 6ѫ ÿ{ Ғ  W KXk W  W RD Q V ѭ  GXQ J  F D F  N\  KL r X  KÕ Q NK{ ғ L  F ѫ ED Q ÿr  W D R  W KD QK P{W  P{ W D  PD QJ  ҕ ҕ ҕ ҕ ҕ Ѵ Ѵ Ѵ ғ ғ ғ Ғ ҒK W t QK Ku QK W KӭF (F i F K Qj \  U } U j QJ  KѫQ V R YӟL  YL Ӌ F  P{ W ҧ  F i F  EѭӟF  W KӵF  KL Ӌ Q W KXұ W  W Ri Q )F ӫD  W KXk W  W RD Q &K~QJ  W D  F y W KӇ  Ku QK GXQJ  YL Ӌ F  V ӱ GөQJ  V ѫ ÿӗ J L ҧ L  W KXұ W  ÿӇ  P{ W ҧ  W KXұ W  W Ri Q J L ӕQJ  ҕ ғ Ѵ QKѭ GX QJ  F D F  ED Q YH  ÿr  P{ W D  F k ғ X W U X F  F X D  F D F  W R D  QKD Ѵ Ѵ Ѵ Ѻ Ғ ғ ғ ғ Ғ Ғ &i F  NKӕL  F ѫ E ҧ Q F ӫD  PӝW  V ѫ ÿӗ W KXұ W  W Ri Q Bắt đầu Câu lệnh Kết thúc Điều kiện Đ S Nhập xuất liệu ғ K{ L  1: K{ ғ L  Eă ғ W  ÿk Ғ X W KXk W  W RD Q, F KӍ  F y GX\  QKҩ W  PӝW  ÿѭӡQJ  U D ; ҕ ғ ғ K{ L  2: K{ ғ L  Nr ғ W  W KX F  W KXk W  W RD Q, F y W KӇ  F y QKL Ӆ X ÿѭӡQJ  Yj R; ҕ ғ ғ KhӕL  3: 7KѭF  KL r Q  F k X O Ӌ nh (F y W KӇ  O j  PӝW  KRһ F  QKL Ӆ X F k X O Ӌ QK); J { Ғ P P{W  ÿѭѫ QJ  YD R YD  ҕ ҕ ҕ Ғ Ғ Ғ P{W  ÿѭѫ QJ  U D ; ҕ Ғ Ѵ Ѵ Ѵ Khӕi 4: 5Ӂ  QKi QK, NL r P W U D  EL r X W Kѭ F  ÿL Ӆ u kiӋ n (EL r X W Kѭ F  %RRO H D Q), Qr ғ X EL Ӈ u thӭF  ÿX QJ  ғ ғ ғ W KXk W  W RD Q V H  ÿL  W KH R QKD QK Ĉ~QJ (True), nӃ X EL Ӈ u thӭF  V D L  W KXk W  W RD Q V H  ÿL  W KH R QKD QK 6D L  ҕ ҕ Ѻ Ѻ ғ ғ ғ ғ (False) Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật Khố i 5: Các câu lệnh nhập xuất liệu Độ phức tạp thuật toán – Algorithm Complexity 3.1 Các tiêu chí đánh giá thuật tốn Thơng thƣờng để đánh giá mức độ tốt, xấu so sánh thuật tốn loại, dựa hai tiêu chuẩ n: + Thuâ ̣t toán đơn giản, dễ hiể u, dễ cài đă ̣t + Dựa vào thời gian thực tài nguyên mà thuật toán sử dụng để thực liệu Trên thực tế thuật tốn hiệu khơng dễ hiểu, cài đặt hiệu cũng không dễ dàng thực hiểu đƣợc cách nhanh chóng Và điều nghịch lý thuật tốn hiệu khó hiểu, cài đặt phức tạp lại hiệu (không phải lúc cũng đúng) Vì để đánh giá so sánh thuật toán ngƣời ta thƣờng dựa độ phức tạp thời gian thực thuật toán, gọi độ phức tạp thuật toán (algorithm complexity) Về chất độ phức tạp thuật toán hàm ƣớc lƣợng (có thể khơng xác) số phép tính mà thuật toán cần thực (từ đó dễ dàng suy thời gian thực thuật toán) liệu input có kích thƣớc N N số phần tử mảng trƣờng hợp tốn xếp hoặc tìm kiếm, hoặc độ lớn số toán kiểm tra số nguyên tố chẳng hạn 3.2 Đánh giá thời gian thƣ ̣c hiêṇ thuâ ̣t toán Để minh họa việc đánh giá độ phức tạp thuật toán ta xem xét ví dụ thuật tốn xếp chọn (selection sort) xếp đổi chỗ trực tiếp (exchange sort) nhƣ sau: Cài đặt thuật toán xếp chọn: for(i=0;i i+1   ik  j Thƣ̣c hiêṇ mô ̣t lƣ ̣a cho ̣n tham lam Bổ đề 1: Tồ n ta ̣i mô ̣t lich ̣ ho ̣c (thời khóa biể u ) tố i ƣu cho tâ ̣p S i,j chƣ́a lớp C k Si,j kế t thúc đầ u tiên, có nghĩa lớp Ck Si,j với giá tri ̣chỉ số k nhỏ nhấ t Bổ đề 2: Nế u cho ̣n lớp Ck nhƣ bổ đề tâ ̣p Si,k tập rỗng Thuâ ̣t toán tham lam đê ̣ qui Recursive-Schedule(S) if |S| = then return Gọi Ck lớp có thời gian kết thúc nhỏ S Loại bỏ Ck tất lớp bắt đầu trƣớc thời gian kết thúc Ck khỏi S; Gọi S' tập kết O = Recursive-Schedule(S') return O  {Ck} Dƣ̣a cấ u trúc dƣ̃ liê ̣u sƣ̉ du ̣ng để chƣ́a S , thuâ ̣t toán sẽ có đô ̣ phƣ́c ta ̣p thời gian là O(n ) hoă ̣c O(nlog(n)) Thêm vào đó thuâ ̣t toán sẽ mấ t mô ̣t chi phí cho viê ̣c bảo trì ngăn xế p vì nó đệ qui Thuâ ̣t toán tham ăn thời gian tuyế n tính theo kiể u lă ̣p Iterative-Schedule(S) n = |S| m = –∞ O = {} for i = n if si ≥ m then O = O  {Ci} m = fi return O Minh ho ̣a quá trình thƣ̣c hiê ̣n của thuâ ̣t toán : 62 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật 63 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật Thuâ ̣t toán hiể n nhiên có thời gian thƣ̣c hiê ̣n tuyế n tiń h và nó là đúng đắ n dƣ̣a bổ đề sau: “Go ̣i O là tâ ̣p các lớp hiê ̣n ta ̣i , Ck lớp cuối đƣợc thêm vào O Thế thì đố i với lớp Cl bấ t kỳ mà l > k, nế u Cl xung đô ̣t với mô ̣t lớp O nó sẽ xung đô ̣t với Ck Các biến thể tốn : Thay vì tim ̀ sớ lƣơ ̣ng lớn nhấ t các lớp có thể sƣ̉ du ̣ng phòng học có thể thay đổi yêu cầu toán tìm thời gian lớn mà phòng học đƣợc sƣ̉ du ̣ng Cách tiếp cận qui hoạch động thay đổi mục tiêu tốn khơng đở i nhƣng các lƣ̣a cho ̣n tham ăn của theo kiể u nhƣ sẽ không làm viê ̣c đƣơ ̣c đố i với bài toán So sánh chiến lƣợc tham lam qui hoạch động Vâ ̣y nào thì thuâ ̣t toán tham ăn sẽ cho nghiê ̣m tố i ƣu? Bài toán đƣợc giải bằng thuật toán tham ăn nhƣ nó có hai đă ̣c điể m sau: (thƣờng là các bài toán tố i ƣu ) nế u + Tính lựa chọn tham ăn (greedy choice property ): Mô ̣t nghiê ̣m tố i ƣu có thể nhâ ̣n đƣơ ̣c bằ ng cách thƣ̣c hiê ̣n các lƣ̣a cho ̣n có vẻ nhƣ là tố t nhấ t ta ̣i mỗi thời điể m mà không cầ n quan tâm tới các gơ ̣i ý của nó đố i với các nghiê ̣m của các bài toán Hay nói mô ̣t cách dễ hiể u là mô ̣t nghiê ̣m tố i ƣu của bài toán có thể nhâ ̣n đƣơ ̣c bằ ng cách thƣ̣c hiê ̣n các lƣ̣a cho ̣n tố i ƣu cu ̣c bô ̣ + Mô ̣t nghiê ̣m tố i ƣu có thể nhâ ̣n đƣơ ̣c bằ ng cách gia tăng (augmenting) nghiệm thành phần đã đƣợc xây dựng với nghiệm tối ƣu tốn cịn lại Có nghĩa nghiê ̣m tố i ƣu sẽ chƣ́a các nghiê ̣m tố i ƣu đố i với các bài toán kích thƣớc nhỏ Tính chấ t này đƣơ ̣c go ̣i là cấ u trúc tố i ƣu (optimal substructure) Sƣ̣ khác bản giƣ̃a các thuâ ̣t toán qui hoa ̣ch đô ̣ng và các thuâ ̣t toán tham ăn đó là đố i với các thuâ ̣t toán tham ăn chúng ta không cầ n biế t các nghiê ̣m của các bài toán để có thể thƣ̣c hiê ̣n mô ̣t lƣ̣a chọn đó Và vì toán có thể có nhiều nghiệm tối ƣu khác nên thuật toán tham ăn có thể hiệu thuật toán qui hoạch động Chú ý : Trong mô ̣t số bài toán nế u xây dƣ̣ng đƣơ ̣c hàm cho ̣n t hích hợp có thể cho nghiê ̣m tố i ƣu Trong nhiề u bài toán , thuâ ̣t toán tham ăn chỉ cho nghiê ̣m gầ n đúng với nghiê ̣m tố i ƣu 64 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật TÀI LIỆU THAM KHẢO Wikipedia, “Tƣ̀ điể n bách khoa toàn thƣ trƣ̣c tuyế n tiế ng Viê ̣t” , http://vi.wikipedia.org/wiki/ Wikipedia, “Tƣ̀ điể n bách khoa toàn thƣ trƣ̣c tuyế n tiế ng Anh” , http://en.wikipedia.org/wiki/Main_Page Các tài liệu b ài giảng tại website : http://csce.unl.edu/~cusack/Teaching/?page=notes Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein, “Introduction to Algorithms, Second Edition”, The MIT Press, 2001, 1180 pages Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, “C++ Cookbook”, O’Reilly, November 2005, 592 pages Nguyễn Hữu Điển, Giáo trình số vấn đề thuật toán, NXB Giáo dục, 2003 Đinh Mạnh Tƣờng Cấu trúc liệu thuật toán NXB Đại học Quốc gia Hà nội 2002 65 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật ĐỀ THI THAM KHẢO Đề số 1: Câu 1: a) Thế nào là bài toán tim ̀ kiế m ? Hãy trình bày bƣớc , đánh giá đô ̣ phƣ́c ta ̣p vẽ sơ đồ thuật toán tìm kiếm tuyế n tin ́ h? b) Viế t hàm cài đă ̣t thuâ ̣t toán sắ p xế p nổ i bo ̣t tăng dầ n mảng cấ u trúc công nhân gồ m các trƣờng thông tin sau:  Tên  Tuổi  Lƣơng tháng Trƣờng khóa để xếp trƣờng lƣơng, nế u cùng lƣơng thì theo tên Câu 2: a) Trình bày cài đặt thuật toán sinh xâu số từ số 1, 2, với độ dài n nhập từ bàn phím b) Thực bƣớc thuật toán xếp trộn với mảng số nguyên sau: 3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11 Câu 3: a) Trình bày thuật toán nhân dãy ma trận áp dụng tìm số phép nhân để thực nhân dãy ma trận có kích thƣớc: 5x50, 50x10, 10x20, 20x15 b) Trình bày thuật toán tìm dãy gồm phần tử liên tiếp có tổng lớn dãy số nguyên sau: -9, 8, -3, 18, 4, -2, 8, -13, 20, -4, 8, 9, Đề số 2: Câu 1: a) Thế nào là bài toán tìm kiế m ? Hãy trình bày bƣớc , đánh giá đô ̣ phƣ́c ta ̣p vẽ sơ đồ thuật toán tìm kiếm nhị phân? b) Viế t hàm cài đă ̣t thuâ ̣t toán sắ p xế p chọn tăng dầ n mảng cấ u trúc công nhân gồ m trƣờng thông tin sau:  Tên  Hệ số lƣơng  Phụ cấp Trƣờng khóa để xếp lƣơng = hệ số lƣơng * 750 + phụ cấp Câu 2: a) Trình bày cài đặt thuật toán sinh xâu số từ số 1, 2, 3, với độ dài n nhập từ bàn phím 66 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật b) Thực bƣớc thuật toán xếp nhanh với mảng số nguyên sau: 3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11 Câu 3: a) Trình bày thuật toán nhân dãy ma trận áp dụng tìm số phép nhân để thực nhân dãy ma trận có kích thƣớc: 15x5, 5x20, 20x10, 10x7 b) Trình bày thuật toán tìm dãy gồm phần tử liên tiếp có tổng lớn dãy số nguyên sau: -8, 9, 7, -2, -19, 2, -9, 2, 3, 28, -9 Đề số 3: Câu 1: a) Thế nào là bài toán tìm kiế m ? Hãy trình bày bƣớc , đánh giá đô ̣ phƣ́c ta ̣p vẽ sơ đồ thuật toán tim ̀ kiế m tuyế n tin ́ h? b) Viế t hàm cài đă ̣t thuâ ̣t toán sắ p xế p chèn tăng dầ n mảng cấ u trúc công nhân gồ m các trƣờng thông tin sau:  Tên  Tuổi  Lƣơng tháng Trƣờng khóa để xếp trƣờng lƣơng, nế u cùng lƣơng thì theo tuổi Câu 2: a) Trình bày cài đặt thuật toán sinh hoán vị số nguyên với n nhập từ bàn phím b) Thực bƣớc thuật tốn xếp trộn với mảng số nguyên sau: 3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11 Câu 3: a) Trình bày thuật toán nhân dãy ma trận áp dụng tìm số phép nhân để thực nhân dãy ma trận có kích thƣớc: 5x50, 50x10, 10x20, 20x15 Đề số 4: Câu 1: a) Thế nào là bài toán tim ̀ kiế m ? Hãy trình bày bƣớc , đánh giá đô ̣ phƣ́c ta ̣p vẽ sơ đồ thuật toán tìm kiếm nhị phân? b) Viế t hàm cài đă ̣t thuâ ̣t toán sắ p xế p đổi chỗ trực tiếp tăng dầ n mảng cấ u trúc công nhân gồ m các trƣờng thông tin sau:  Tên  Tuổi  Lƣơng tháng Trƣờng khóa để xếp trƣờng lƣơng, nế u cùng lƣơng thì theo tuổi 67 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật Câu 2: a) Trình bày cài đặt thuật toán sinh xâu số từ số 2, 3, với độ dài n nhập từ bàn phím b) Thực bƣớc thuật toán xếp nhanh với mảng số nguyên sau: 3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11 Câu 3: a) Trình bày thuật toán nhân dãy ma trận áp dụng tìm số phép nhân để thực nhân dãy ma trận có kích thƣớc: 5x50, 50x10, 10x20, 20x15 b) Áp dụng thuật toán tìm xâu chung dài hai xâu X1 = “ABCABCCB” X2=”BCAABCCA” Đề số 5: Câu 1: a) Thế nào là bài toán tìm kiếm? Hãy trình bày bƣớc , đánh giá đô ̣ phƣ́c ta ̣p vẽ sơ đồ thuật toán tìm kiếm tuyến tính ? b) Viế t hàm cài đă ̣t thuâ ̣t toán sắ p xế p nổ i bo ̣t tăng dầ n mảng cấ u trúc Học sinh gồ m các trƣờng thông tin sau:  Tên  Tuổi  Điểm trung bình Trƣờng khóa để xếp trƣờng điểm trung bình, nế u cùng điểm trung bình thì theo tuổi Câu 2: a) Trình bày cài đặt thuật toán sinh xâu số từ số 3, 7, với độ dài n nhập từ bàn phím b) Thực bƣớc thuật toán xếp trộn với mảng số nguyên sau: 3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11 Câu 3: a) Trình bày thuật toán nhân dãy ma trận áp dụng tìm số phép nhân để thực nhân dãy ma trận có kích thƣớc: 15x5, 5x20, 20x10, 10x15 b) Trình bày thuật toán tìm xâu chung dài hai xâu 68 ... (False) Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật Khố i 5: Các câu lệnh nhập xuất liệu Độ phức tạp thuật tốn – Algorithm Complexity 3.1 Các tiêu chí đánh giá thuật tốn... go ̣i hàm nhƣ sau: 41 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật merge_sort(a, 0, n-1); Độ phức tạp thuật toán sắp xếp trộn: Gọi T(n) độ phức tạp thuật tốn xếp trộn... tố nhỏ N 12 Bài giảng môn học: Phân tích thiế t kế và đánh giá giải thuật CHƢƠNG II: SẮP XẾP (SORTING) VÀ TÌM KIẾM (SEARCHING) Bài toán sắp xếp 1.1 Sắ p xế p (Internal Sorting) Sắp xếp

Ngày đăng: 08/09/2020, 17:51

Từ khóa liên quan

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

Tài liệu liên quan