Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 4: Phân tích các thuật toán
lượt xem 3
download
Bài giảng "Cấu trúc dữ liệu và giải thuật trong C++ - Bài 4: Phân tích các thuật toán" cung cấp cho người học các kiến thức: Tính hiệu quả của thuật toán, thời gian chạy, phương pháp đánh giá, phương pháp thực nghiệm,... Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 4: Phân tích các thuật toán
- Bài 4. Phân tích các thuật toán (Analysis of Algorithms) 3/6/2020 Phân tích thuật toán 1
- Thuật toán là một qui trình thực hiện từng bước, từng bước giải quyết một vấn đề trong một khoảng thời gian hữu hạn. 3/6/2020 Phân tích thuật toán 2
- Từ bài toán đến chương trình 3/6/2020 Phân tích thuật toán 3
- Tính hiệu quả của thuật toán Thuật toán đơn giản, dễ hiểu Thuật toán dễ cài đặt Thuật toán cần ít bộ nhớ Thuật toán chạy nhanh Khi cài đặt thuật toán chỉ để sử dụng một số ít lần thì ưu tiên tiêu chí 1 và 2 Khi cài đặt thuật toán mà sử dụng rất nhiều lần, trong nhiều chương trình khác nhau: sắp xếp, tìm kiếm, đồ thị… thì ưu tiên tiêu chí 3 và 4 3/6/2020 Phân tích thuật toán 4
- Các khía cạnh cần phân tích Bộ nhớ (Space) Xác định tổng dung lượng bộ nhớ cần thiết để lưu trữ toàn bộ dữ liệu đầu vào, trung gian và kết quả đầu ra. Ví dụ: Sắp xếp một dãy n phần tử. Bộ nhớ cần cho bài toán là: Bộ nhớ lưu biến n, lưu n phần tử của dãy, lưu các biến i, j, tg (nếu là thuật toán Bubble Sort) Thời gian chạy của thuật toán (Running time) 3/6/2020 Phân tích thuật toán 5
- Thời gian chạy (Running time) Hầu hết các thuật toán thực hiện biến đổi các đối tượng đầu vào thành các đối tượng đầu ra. Thời gian chạy của thuật được đặc trưng bởi kích thước của dữ liệu đầu vào. Chúng ta thường đi đánh giá thời gian chạy của thuật toán trong 3 trường hợp: xấu nhất, trung bình và tốt nhất. Thời gian chạy trung bình của thuật toán thường rất khó xác định Chúng ta tập trung vào phân tích thời gian chạy trong trường hợp xấu nhất (do dễ phân tích) 3/6/2020 Phân tích thuật toán 6
- Thời gian chạy (Running time) 3/6/2020 Phân tích thuật toán 7
- Phương pháp đánh giá 1. Phương pháp thực nghiệm 2. Phương pháp phân tích lý thuyết 3/6/2020 Phân tích thuật toán 8
- Phương pháp thực nghiệm Các bước thực hiện: Viết một chương trình thể hiện thuật toán Chạy chương trình với các bộ dữ liệu đầu vào có kích thước khác nhau và tổng hợp lại. Sử dụng một hàm như một đồng hồ để lấy chính xác thời gian chạy của thuật toán. Vẽ đồ thị biểu diễn kết quả 3/6/2020 Phân tích thuật toán 9
- Hạn chế của phương pháp thực nghiệm 1. Cần phải cài đặt thuật toán bằng một ngôn ngữ lập trình, nhưng một số thuật toán việc cài đặt là khó. 2. Kết quả thu được không thể biểu thị cho những bộ dữ liệu đầu vào chưa được thực nghiệm 3. Phụ thuộc và chương trình dịch 4. Phụ thuộc vào phần cứng của từng máy tính 5. Phụ thuộc kỹ năng của người lập trình 3/6/2020 Phân tích thuật toán 10
- Phương pháp phân tích lý thuyết Sử dụng thuật toán được mô tả ở mức cao (giả mã) thay cho chương trình cài đặt. Mô tả thời gian chạy của thuật toán bằng một hàm phụ thuộc vào kích thước của dữ liệu đầu vào, n. Tính toán tất cả các khả năng của dữ liệu đầu vào Cho phép chúng ta đánh giá tốc độ của thuật toán không phụ thuộc vào phần cứng/môi trường phần mềm. 3/6/2020 Phân tích thuật toán 11
- Giả mã (Pseudocode) Ví dụ thuật toán tìm Max các Mô tả thuật toán ở mức phần tử của một mảng trừu tượng cao Algorithm arrayMax(A,n) Nhiều cấu trúc hơn ngôn Input: Mảng A có n số nguyên ngữ tự nhiên Output: Giá trị lớn nhất của A Max A[0] Kém chi tiết hơn chương for i 1 to n-1 do trình if A[i] > Max then Max A[i] Sử dụng nhiều ký hiệu để mô tả return Max 3/6/2020 Phân tích thuật toán 12
- n2 Những chi tiết mô tả PseudoCode Cấu trúc điểu khiển Gọi hàm, phương thức If then else Biến.Phươngthức([Danh sách đối]) while do Trả lại giá trị cho hàm For do return Biểu_thức Xuống dòng thay cho dấu {, } Các biểu thức Phép gán sánh Khai báo phương thức = Phép so sánh bằng Algorithm Phươngthức([Dánh n 2 Cho phép viết số mũ sách đối]) Input: output: 3/6/2020 Phân tích thuật toán 13
- Mô hình máy truy nhập ngẫu nhiên (Random Access Machine (RAM) Model) Một CPU Không giới hạn số ô nhớ Mỗi ô nhớ có thể lưu một số nguyên hoặc 1 ký tự Mỗi ô nhớ được đánh số và để truy nhập đến mỗi ô nhớ sẽ mất một đơn vị thời gian 3/6/2020 Phân tích thuật toán 14
- Bẩy hàm quan trọng sử dụng trong phân tích thuật toán Hàm hằng 1 1E+30 Hàm Logarit log n 1E+28 Cubic 1E+26 Hàm tuyến tính n 1E+24 Quadratic 1E+22 N-Log-N n log n 1E+20 Linear Hàm bậc 2 n2 1E+18 T (n ) 1E+16 Hàm bậc 3 n3 1E+14 1E+12 Hàm mũ 2n 1E+10 1E+8 Trong biểu đồ log-log, 1E+6 1E+4 độ nghiêng của đường 1E+2 thẳng tương ứng với tốc 1E+0 độ phát triển của hàm 1E+0 1E+2 1E+4 1E+6 1E+8 1E+10 n 3/6/2020 Phân tích thuật toán 15
- Các phép toán cơ sở 1. Các phép toán cơ sở được thực hiện bởi thuật toán được xem là như nhau Các phép toán cơ sở 2. Độc lập với ngôn ngữ lập trình Định giá một biểu thức Gán giá trị cho một biến 3. Không cần thiết xác định chính Đưa vào/truy cập một xác số lượng các phép toán phần tử mảng Gọi hàm 4. Giả thiết mỗi phép toán mất Trả lại giá trị cho hàm một khoảng thời xác định để (return) thực hiện trong mô hình RAM 3/6/2020 Phân tích thuật toán 16
- Xác định số phép toán cơ sở Bằng cách duyệt thuật toán giả mã, chúng ta có thể xác định được số phép tính tối đa mà thuật toán có thể phải thực hiện. Từ đó ta xây dựng được một hàm thể hiện thời gian chạy của thuật toán phụ thuộc vào kích thước dữ liệu vào. Ví dụ: Algorithm arrayMax(A,n) Số phép toán Max A[0] 2 for i 1 to n-1 do 2+n if A[i] > Max then 2(n-1) Max A[i] 2(n-1) return Max 1 3/6/2020 Phân tích thuật toán 17
- Ước lượng thời gian chạy Thuật toán ArrayMax thực hiện 5n+1 phép tính cơ bản trong trường hợp xấu nhất Định nghĩa: a = Khoảng thời gian ngắn nhất cần để thực hiện một phép tính cơ bản b = Khoảng thời gian dài nhất cần để thực hiện một phép tính cơ bản Ký hiệu T(n) là thời gian chạy trong trường hợp xấu nhất của thuật toán ArrayMax thì: a(5n+1)< T(n)
- Thời gian chạy của các lệnh 1. Các phép toán sơ cấp: O(1) 2. Lệnh gán: X = Thời gian: là tg thực hiện biểu thức 3. Lệnh lựa chọn: 3/6/2020 Phân tích thuật toán 19
- Thời gian chạy của các lệnh 4. Các lệnh lặp: for, while , do..while: Nếu tg thực hiện thân vòng lặp không đổi thì tg thực hiện vòng lặp = số lần lặp x tg thực hiện thân vòng lặp 3/6/2020 Phân tích thuật toán 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 175 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 81 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 59 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 159 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn