cấu trúc dữ liệu va giải thuật đỗ bích diệp chương 1 các kiến thức cơ bản sinhvienzone com

21 68 0
cấu trúc dữ liệu va giải thuật đỗ bích diệp chương 1 các kiến thức cơ bản sinhvienzone com

Đ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

Cấu trúc liệu Giải thuật Cấu trúc liệu Giải thuật Chương I: Các kiến thức Các kiến thức Nội dung ™ Các khái niệm ™ Giải thuật ™ Cấu trúc liệu ™ Phân tích giải thuật ™ Giả ngơn ngữ ™ Thời gian thực giải thuật ™ Đánh giá độ phức tạp sử dụng tiệm cận Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật – Một thủ tục bao gồm dãy hữu hạn bước cần thực để thu đầu cho đầu vào cho trước toán Giải thuật z Đặc trưng giải thuật – – – – – Đầu vào Đầu Tính hữu hạn Tính hiệu Tính xác định Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Chương trình Chương trình thể Giải thuật ngơn ngữ lập trình Cấu trúc liệu z Kiểu liệu trừu tượng (Abstract Data Type) – Là mơ hình tốn học phép tốn thực mơ hình tốn học – Ví dụ: ADT List z z Dữ liệu: Các nút Các phép toán: – – – – Bổ sung nút Loại bỏ nút Tìm kiếm nút có giá trị cho trước … Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Cấu trúc liệu z Cấu trúc liệu – – – – Sử dụng để biểu diễn mơ hình tốn học ADT Việc cài đặt kiểu liệu trừu tượng đòi hỏi phải chọn cấu trúc liệu để biểu diễn Liên quan đến cách thức tổ chức truy nhập phần tử liệu Ví dụ: ADT List z z Cài đặt sử dụng cấu trúc mảng đơn giản Cài đặt sử dụng cấu trúc trỏ Xây dựng chương trình giải tốn – Lời giải tốn bao gồm z z – Cấu trúc liệu Thuật tốn Xây dựng chương trình giải tốn z z Tương tự vòng đời phần mềm Gồm bước Thu thập yêu cầu: Hiểu rõ đầu vào kết đầu Thiết kế : Xây dựng giải thuật, bỏ qua chi tiết cách thức cài đặt liệu hay phương thức, tập trung vào bước xử lý – Phân tích : Tìm, so sánh với giải thuật khác – Cài đặt: Xây dựng chương trình, quan tâm đến cách thức tổ chức, biểu diễn cài đặt phương thức – Kiểm thử : Bao gồm chứng minh tính đắn chương trình, kiểm thử trường hợp , tìm, sửa lỗi – – Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Thuật toán độ phức tạp – Đánh giá lượng tài nguyên loại mà giải thuật sử dụng z z Giải thuật thực thời gian Ỉ Phân tích thời gian thực giải thuật Giải thuật sử dụng nhớ Ỉ Phân tích độ khơng gian nhớ mà giải thuật (chương trình) cần có Phân tích thời gian thực giải thuật – Mục tiêu việc xác định thời gian thực giải thuật: z z z z Để ước lượng chương trình thực Để ước lượng kích thước liệu đầu vào lớn cho giải thuật Để so sánh hiệu giải thuật khác nhau, từ lựa chọn giải thuật thích hợp cho toán Để giúp tập trung vào đoạn giải thuật thực với thời gian lớn Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phân tích thời gian thực giải thuật z Cách thức – – Xác định độ phụ thuộc thời gian tính thuật tốn vào kích thước liệu đầu vào Các phương pháp thực z z Phương pháp thực nghiệm Phương pháp phân tích dựa mơ hình lý thuyết Phân tích thời gian thực giải thuật z Phương pháp thực nghiệm – – – z Cài đặt giải thuật ngơn ngữ lập trình Chạy chương trình với liệu đầu vào khác Đo thời gian thực thi chương trình đánh giá độ tăng trưởng so với kích thước liệu đầu vào Hạn chế: – – Sự hạn chế số lượng chất lượng mẫu thử Đòi hỏi mơi trường kiểm thử (phần cứng phần mềm) thống , ổn định Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phân tích thời gian thực giải thuật z Phương pháp lý thuyết – – – z Có khả xem xét liệu đầu vào Sử dụng để đánh giá giải thuật mà không phụ thuộc vào môi trường kiểm thử Sử dụng với mô tả mức cao giải thuật Thực phương pháp cần quan tâm – – – Ngôn ngữ mô tả giải thuật Xác định độ đo thời gian tính Một cách tiếp cận để khái qt hóa độ phức tạp thời gian Mô tả giải thuật – Giả ngôn ngữ z Giả ngôn ngữ (Pseudo-code) Mô tả mức khái quát cao sử dụng diễn tả giải thuật Giả ngơn ngữ = Cấu trúc lập trình + Ngôn ngữ tự nhiên – Algorithm arrayMax(A,n) Input: Mảng chứa n phần tử số nguyên Output: Phần tử lớn mảng Begin currentMax = A[0] for i = to n-1 if currentMax < A[i] then currentMax = A[i] return currentMax End Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giả ngôn ngữ – Các cấu trúc lập trình giả ngơn ngữ z z Câu lệnh gán: V = E V Å E Cấu trúc điều khiển: if B then S1 [else S2] – Case B1 : S1 ; B2 : S2 ; … Bn : Sn else Sn+1 end case; – Giả ngôn ngữ z Câu lệnh lặp z z z Vòng lặp với số lần lặp biết trước for i = m to n S for i = n down to m S Với số lần lặp trước while B S repeat S until B Câu lệnh vào Đọc liệu vào read (); ƒ Ghi liệu write (); – Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giả ngôn ngữ z Khai báo hàm Function () Begin return (giá trị) End z Gọi hàm: Hàm gọi tên hàm danh sách giá trị tham số thực sự, nằm biểu thức Giả ngôn ngữ Function AVERAGE(A,n) Begin {A mảng gồm n phần tử số nguyên Giải thuật trả giá trị trung bình giá trị mảng} sum = 0; {Duyệt mảng} for I = to n sum = sum + A[i]; average = sum/n return(average) End Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giả ngôn ngữ – Khai báo thủ tục Procedure () Begin End – Thủ tục gọi cách sử dụng câu lệnh Call () Phân tích thời gian thực giải thuật – Độ đo thời gian tính sử dụng phương pháp phân tích lỳ thuyết z – Phép tốn phép tốn thực với thời gian bi chặn số không phụ thuộc vào kích thước liệu Thời gian tính giải thuật xác định cách đếm số phép toán mà giải thuật thực T(n) ≈ cop*C(n) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 10 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phân tích thời gian thực giải thuật – Các phép toán thường dùng z z z z z z Gán giá trị cho biến số Gọi hàm hay thủ tục Thực phép toán số học Tham chiếu vào mảng Trả kết Thực phép so sánh Phân tích thời gian thực giải thuật Dòng 1: phép tốn Dòng 2: phép gán giá trị đầu cho i, phép so sánh i < n thực n lần – Thân vòng lặp thực n-1 lần, thân, tối thiểu phải thực phép so sánh (2 phép toán bản) , tăng i lên (2 phép toán bản) tối đa phải có thêm phép gán (2 phép tốn bản) – Dòng 3: phép tốn Tổng số phép toán Trường hợp xấu : 7n-2 – – Function ARRAY-MAX(A,n) Đâu vào : mảng A gồm n phần tử Đầu ra: phần tử lớn mảng Begin currentMax = A[0] for i = to n-1 if currentMax < A[i] then currentMax = A[i] return currentMax End Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 11 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phân tích thời gian thực giải thuật – Thời gian tính tồi (Worst-case) z – Thời gian tính tốt (Best-case) z – Thời gian nhiều để thực thuật toán với liệu vào kích thước n Thời gian để thực thuật toán với liệu với kích thước n Thời gian tính trung bình (Average case) z Thời gian trung bình cần thiết để thực thuật toán tập hữu hạn đầu vào kích thước n Phân tích thời gian thực giải thuật worst-case ms } ms average-case? ms best-case ms ms A B C D Input E F G Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 12 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phân tích thời gian thực giải thuật – Ví dụ : Tìm kiếm giá trị mảng a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11] a[12] 10 21 14 22 36 62 91 77 81 Thời gian xấu : n – Thời gian tốt : – Thời gian trung bình: T(n) = ∑i.pi pi xác suất giá trị cần tìm xuất a[i] pi = 1/n thời gian (n+1)/2 – Ký hiệu tiệm cận – Khái niệm Big-O – Cho hàm số t(n) g(n), ta nói t(n) O(g(n)) tồn số nguyên dương c n0 cho t(n) ≤ cg(n) for n ≥ n0 t(n) thuộc O(g(n)) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 13 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ký hiệu tiệm cận Big - O – 7n -2 7n-2 O(n) tìm c > n0 ≥ cho 7n-2 ≤ c*n với n ≥ n0 điều với c = n0 = z – 3n3 + 20n2 + 3n3 + 20 n2 + O(n3) tìm c > n0 ≥ cho 3n3 + 20n2 + ≤ c*n3 vơi n ≥ n0 điều với c = n0 = 21 z – log n + log n + O(log n) cần c > n0 ≥ cho log n + ≤ c*log n với n ≥ n0 ta xác định c = n0 = z Ký hiệu tiệm cận Big - O – Ví dụ: Giải thuật có T(n) = 2n + 10 có độ 10,000 phức tạp O(n) z 2n + 10 ≤ cn 1,000 z (c − 2) n ≥ 10 z n ≥ 10/(c − 2) z Lấy c = n0 = 10 100 3n 2n+10 n 10 1 10 100 1,000 n Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 14 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ký hiệu tiệm cận Big - O – Đồ thị số hàm Ký hiệu tiệm cận Big - O – Big-O độ tăng trưởng z z Big-O ký hiệu tiệm cận hàm Nếu ta có T(n) O(g(n)) độ tăng trưởng T(n) khơng vượt q độ tăng trưởng g(n) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 15 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ký hiệu tiệm cận Big - O – Qui tắc xác định độ phức tạp thời gian z z z Hàm thời gian T(n) đoạn thuật tốn đa thức bậc k T(n) O(nk) nx = O(an), với x > a > log nx = O(log n), với x > Ký hiệu tiệm cận Big - O – Qui tắc xác định độ phức tạp z Cấu trúc - Qui tắc tổng z Cho đoạn thuật toán P1 P2 với thời gian thực tương ứng T1(n) T2(n) Thời gian thực P1 P2 là: T1(n) + T2(n) z Độ phức tạp hai đoạn chương trình P1 P2 liên tục xác định O(max(f(n), g(n))) T1(n) = O(f(n)) T2(n) = O(g(n)) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN SinhVienZone.com 16 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ký hiệu tiệm cận Big - O – Qui tắc xác định độ phức tạp z Cấu trúc lồng - Quy tắc nhân – Cho đoạn chương trình P1 P2 với thời gian thực tương ứng T1(n) T2(n) Thời gian thực P1 P2 lồng vào là: T1(n)T2(n) – Độ phức tạp hai đoạn chương trình P1 P2 liên tục xác định O(f(n)*g(n)) T1(n) = O(f(n)) T2(n) = O(g(n)) Ký hiệu tiệm cận Big - O for i = to n begin P; {đoạn giải thuật với thời gian thực T} end i: = while (i

Ngày đăng: 30/01/2020, 21:08

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan