Bài giảng Cơ sở lập trình nâng cao - ĐH Ngoại Ngữ TP.HCM
lượt xem 19
download
Bài giảng Cơ sở lập trình nâng cao được thực hiện nhằm trình bày đến cho người học các kiến thức như: Độ phức tạp của thuật toán, ôn tập kỹ thuật xử lý File, mảng, xâu ký tự, lập trình đệ quy, phương pháp quay lui, phương pháp nhánh cạnh, phương pháp chia để trị, phương pháp tham lam, phương pháp hình học,...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cơ sở lập trình nâng cao - ĐH Ngoại Ngữ TP.HCM
- TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TP.HCM KHOA CÔNG NGHỆ THÔNG TIN CƠ SỞ LẬP TRÌNH NÂNG CAO Biên soạn: Ths.Tôn Quang Toại TonQuangToai@yahoo.com TPHCM, NĂM 2013 1
- Mục tiêu môn học § Mục tiêu cần đạt được - Nắm vững một số phương pháp Thiết kế thuật toán để giải bài toán tin học - Nắm vững một số phương pháp Tối ưu hóa chương trình 2
- Nội dung môn học § Chương 1: Độ phức tạp của thuật toán § Chương 2: Ôn tập kỹ thuật xử lý File – Mảng – Xâu ký tự § Chương 3: Lập trình Đệ quy § Chương 4: Phương pháp Quay lui § Chương 5: Phương pháp Nhánh cận § Chương 6: Phương pháp Chia để trị § Chương 7: Phương pháp Tham lam § Chương 8: Phương pháp Quy hoạch động § Chương 9: Phương pháp Hình học § Chương 10: Tối ưu hóa chương trình 3
- Tài liệu tham khảo § Books 1. Vũ Đình Hòa, Đỗ Trung Kiên, “Thuật toán và độ phức tạp của thuật toán”, NXB ĐHSP, 2007 2. Steven S. Skiena, “The Algorithm Design Manual”, Springer , 2008 3. Art Lew, Holger Mauch, “Dynamic Programming – A Computational Tool”, Springer, 2007 4. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, “Introduction to Algorithms”, 2009 5. Jon Bentley, “Writing Efficient Programs”, Prentice-Hall, 1982 6. Jon Bentley, “Programming Pearls”, Addison Wesley, 2000 4
- Chương 1 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN 5
- Nội dung § Độ phức tạp của thuật toán § Ước lượng độ phức tạp của thuật toán 6
- ĐỘ PHỨC TẠP CỦA THUẬT TOÁN 7
- Thời gian thực hiện thuật toán § Phân tích thuật toán: Phân tích thuật toán là xác định lượng tài nguyên cần thiết để thực thi thuật toán: • Thời gian thực hiện thuật toán • Bộ nhớ cần thực hiện thuật toán § Tiêu chí thường được dùng để đánh giá thuật toán là thời gian thực hiện thuật toán. 8
- Thời gian thực hiện thuật toán § Mục tiêu của phân tích thuật toán • So sánh để chọn ra thuật toán nào chạy nhanh nhất • Tìm những yếu điểm của thuật toán để Cải tiến thuật toán tốt hơn § 2 cách “đo” thời gian thực hiện của thuật toán • Thời gian thực hiện thực tế • Thời gian thực hiện lý thuyết (Phân tích thuật toán) 9
- Thời gian thực hiện thuật toán § Thời gian thực hiện thực tế: Dựa trên thực tế khi chạy các thuật toán được tình bằng (mili second, second, minute, hour, day) Kết luận: Thuật toán nào nhanh, thuật toán nào chậm 10
- Thời gian thực hiện thuật toán § Thời gian thực hiện thực tế phụ thuộc vào nhiều yếu tố: • Dữ liệu vào: – Kích thước dữ liệu – Đặc điểm của dữ liệu • Tốc độ của máy tính • Ngôn ngữ lập trình • Chương trình dịch cho ngôn ngữ lập trình • Hệ điều hành để thực hiện chương trình 11
- Thời gian thực hiện thuật toán § Thời gian thực hiện thực tế: Dựa trên thực tế khi chạy các thuật toán được viết trên: • Cùng ngôn ngữ lập trình, cùng trình biên dịch • Cùng hệ thống máy tính • Cùng bộ dữ liệu vào chuẩn Kết luận: Thuật toán nào nhanh, thuật toán nào chậm 12
- Thời gian thực hiện thuật toán § Thời gian thực hiện lý thuyết: Dựa vào • Số phép toán cơ bản trong thuật toán sẽ được thực hiện bao nhiêu lần • Kích thước dữ liệu vào Kết luận + Thuật toán nào nhanh, thuật toán nào chậm + Tìm ra những nơi cần cải tiến thuật toán 13
- Thời gian thực hiện thuật toán § Phép toán cơ bản: Một phép toán được gọi là cơ bản nếu thời gian thực hiện của nó bị chặn trên bởi một hằng số (chỉ phụ thuộc cách cài đặt được sử dụng – ngôn ngữ lập trình, máy tính, …). § Ví dụ: • +, -, *, / • Các phép so sánh: >, =,
- Thời gian thực hiện thuật toán § Định nghĩa [Thời gian thực hiện thuật toán]: Gọi T(n) là số phép toán cơ bản khi thực hiện thuật toán với kích thước dữ liệu vào n. T(n) được gọi là thời gian thực hiện thuật toán. § Chú ý: Thuật toán có nhiều loại phép toán cơ bản nên chúng ta có thể thực hiện đánh theo một trong hay cách: • Đánh giá thời gian chạy trên từng loại phép toán • Tổng hợp các phép toán và gán trọng số cho từng phép toán • Xem các phép toán là như nhau 15
- Thời gian thực hiện thuật toán § Ví dụ: Tìm thời gian thực hiện của thuật toán // Thuật toán tính tổng S=a[0]+a[1]+…+a[n-1] {1} s = 0; {2} for (i=0; i
- Thời gian thực hiện thuật toán § Ví dụ: Tìm thời gian thực hiện của thuật toán // Thuật toán tìm max {1} max = a[0]; {2} for (i=1; i
- Thời gian thực hiện thuật toán § 3 trường hợp đánh giá thời gian thực hiện thuật toán • Trường hợp xấu nhất (worst case): T(n) là thời gian lớn nhất khi thực hiện thuật toán với mọi bộ dữ liệu kích thước n • Trường hợp tốt nhất (best case): T(n) là thời gian ít nhất khi thực hiện thuật toán với mọi bộ dữ liệu kích thước n • Trường hợp trung bình (average case): Dữ liệu tuân theo 1 phân bố xác suất nào đó. Giả sử P(input) là xác suất dữ liệu input xuất hiện, khi đó thời gian trung bình của thuật toán là T ( n) = P (input )T (input ) input D 18
- Thời gian thực hiện thuật toán § Ví dụ: Tìm thời gian thực hiện của thuật toán trong trường hợp xấu nhất // Thuật toán tìm max {1} max = a[0]; {2} for (i=1; i
- Độ phức tạp thuật toán § Nhận xét: • Việc đánh giá thời gian thực hiện thuật toán qua hàm T(n) như trên là quá chi tiết. Cho nên việc dùng T(n) để so sánh tính hiệu quả giữa các thuật toán sẽ gặp khó khăn. • Để giải quyết khó khăn này Bachmann và Landau giới thiệu khái niệm hàm O (đọc là ô lớn) để xác định độ lớn của hàm T(n) 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cơ sở lập trình - Chương 3: Các cấu trúc điều khiển
56 p | 136 | 22
-
Bài giảng Cơ sở lập trình 1: Giới thiệu môn học - Lê Quý Tài
9 p | 132 | 8
-
Bài giảng Cơ sở lập trình: Chương 1 - Lê Viết Mẫn
55 p | 73 | 5
-
Bài giảng Cơ sở lập trình Csharp: Bài 4 - Cấu trúc lặp
17 p | 79 | 4
-
Bài giảng Cơ sở lập trình: Chương 1 - Thuật toán và thuật giải
30 p | 13 | 3
-
Bài giảng Cơ sở lập trình: Chương 1 - Khái niệm lập trình
428 p | 14 | 3
-
Bài giảng Cơ sở lập trình - Trường ĐH Thương mại
108 p | 39 | 3
-
Bài giảng Cơ sở lập trình: Chương 2 - Tổng quan về lập trình máy tính
14 p | 6 | 2
-
Bài giảng Cơ sở lập trình: Kiểu cấu trúc
26 p | 7 | 2
-
Bài giảng Cơ sở lập trình: Kiểu chuỗi ký tự
21 p | 4 | 2
-
Bài giảng Cơ sở lập trình: Kiểu con trỏ
50 p | 3 | 2
-
Bài giảng Cơ sở lập trình: Kiểu dữ liệu mảng
54 p | 5 | 2
-
Bài giảng Cơ sở lập trình: Chương trình con
22 p | 3 | 2
-
Bài giảng Cơ sở lập trình: Các cấu trúc điều khiển trong ngôn ngữ C
38 p | 8 | 2
-
Bài giảng Cơ sở lập trình: Các phần tử cơ bản của ngôn ngữ C
55 p | 9 | 2
-
Bài giảng Cơ sở lập trình: Các khái niệm cơ bản về lập trình
20 p | 7 | 2
-
Bài giảng Cơ sở lập trình: Chương 4 - Các cấu trúc điều khiển
41 p | 13 | 2
-
Bài giảng Cơ sở lập trình: Kiểu tập tin
32 p | 3 | 1
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