Bài giảng Kỹ thuật lập trình - Một số thuật toán và kỹ thuật nâng cao cung cấp cho người học các kiến thức: Thuật toán sắp xếp, thuật toán số học, quy hoạch động, kỹ thuật cài đặt các thuật toán hay qui trình tổng quát, thuật ngữ và bài đọc thêm tiếng Anh.
Kỹ thuật lập trình ThS Đặng Bình Phương (dbphuong@fit.hcmus.edu.vn) CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật toán xếp Thuật toán số học Quy hoạch động Kỹ thuật cài đặt thuật toán hay qui trình tổng quát Thuật ngữ đọc thêm tiếng Anh 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt CuuDuongThanCong.com https://fb.com/tailieudientucntt • Sắp xếp trình xử lý danh sách phần tử để đặt chúng theo thứ tự theo yêu cầu • Ví dụ: danh sách trước xếp: {1, 25, 6, 5, 2, 37, 40} Danh sách sau xếp: {1, 2, 5, 6, 25, 37, 40} xếp giúp cho việc tìm kiếm nhanh • Khi khảo sát tốn xếp, ta phải làm việc nhiều với khái niệm nghịch 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Xét mảng số a0, a1, …, an Nếu i aj ta gọi nghịch • Nhận xét: – Mảng chưa xếp có nhiều nghịch – Mảng xếp không chứa nghịch – Việc xếp mảng nhằm tìm cách giảm số nghịch cách hoán vị cặp nghịch (ai, aj) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Nhóm thuật tốn đơn giản chi phí cao: – Selection sort (phương pháp chọn trực tiếp) – Insertion sort (phương pháp chèn trực tiếp) – Binary Insertion sort (phương pháp chèn trực tiếp, tìm kiếm nhị phân) – Interchange sort (phương pháp đổi chỗ trực tiếp) – Bubble sort (phương pháp “nổi bọt”) – Shaker sort (phương pháp “lắc”, cải tiến “nổi bọt”) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Nhóm thuật tốn phức tạp hiệu hơn: – Shell sort – Heap sort (phương pháp “vun đống”) – Quick sort (phương pháp nhanh) – Merge sort (phương pháp trộn) • Nhóm thuật tốn khác: – Radix sort (phương pháp số) –… 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Các thuật toán Bubble sort, Selection sort, Insertion sort – Cài đặt thuật tốn đơn giản – Chi phí thuật tốn cao: O(n2) • Heap sort cải tiến từ Selection sort chi phí thuật tốn thấp hẳn, O(nlog2n) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Các thuật tốn Quick sort, Merge sort thuật toán theo chiến lược “chia để trị”: – Cài đặt thuật toán phức tạp – Chi phí thuật tốn thấp: O(nlog2n) – Rất hiệu dùng danh sách liên kết – Trong thực tế, Quick sort chạy nhanh hẳn Merge sort Heap sort 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Người ta chứng minh O(nlog2n) ngưỡng chặn thuật toán xếp dựa việc so sánh giá trị phần tử • Radix sort thuật tốn phát triển theo hướng khác nên vượt qua khỏi ngưỡng Nó đại diện cho nhóm thuật tốn xếp có độ phức tạp tuyến tính 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt • Phương pháp quy hoạch động thường dùng để giải tốn tối ưu có chất đệ qui, tức việc tìm phương án tối ưu cho tốn đưa tìm phương án tối ưu số hữu hạn tốn • Ngun lý “chia để trị” thường đóng vai trị chủ đạo thiết kế thuật tốn nói chung phương pháp quy hoạch động nói riêng 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 14 • Đặc điểm giải thuật đệ qui – Theo hướng “từ xuống” (top-down) tức toán lớn phân rã thành nhiều toán giải tốn – Việc giải toán lại đưa phép phân rã tiếp thành nhiều toán nhỏ lại giải tiếp tốn nhỏ giải hay chưa – Có thể khơng tối ưu mặt thời gian thực không gian nhớ 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 15 • Đặc điểm giải thuật quy hoạch: – Theo hướng “từ lên” (bottom-up) tức việc giải tất toán nhỏ (bài toán sở) để từ bước giải toán lớn giải toán lớn (bài toán ban đầu) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 16 • Bài toán giải theo phương pháp quy hoạch động gọi tốn quy hoạch động • Cơng thức phối hợp nghiệm tốn để có nghiệm tốn lớn cơng thức truy hồi quy hoạch động • Tập tốn nhỏ có lời giải để từ giải toán lớn gọi sở quy hoạch động • Khơng gian lưu trữ lời giải tốn để tìm cách phối hợp chúng gọi bảng phương án quy hoạch động 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 17 • Bài toán lớn phải phân rã thành nhiều tốn mà phối hợp lời giải cho ta lời giải tốn lớn • Vì quy hoạch động giải tất tốn nên chúng khơng đủ khơng gian vật lý lưu trữ lời giả (bộ nhớ, đĩa, …) để phối hợp chúng phương pháp quy hoạch động khơng thể thực • Q trình từ tốn sở tìm lời giải tốn ban đầu phải qua hữu hạn bước 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 18 • Bước Phân tích tốn lập cơng thức truy hồi (giải pháp đệ qui) • Bước Giải tất tốn sở (thơng thường dễ) lưu lời giải vào bảng phương án • Bước Dùng công thức truy hồi phối hợp lời giải toán nhỏ lưu bảng phương án để tìm lời giải toán lớn lưu chúng vào bảng phương án (từ lên) Lặp lại tìm lời giải tốn ban đầu • Bước Dựa vào bảng phương án, truy vết tìm nghiệm tối ưu 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 19 • Bài tốn tìm dãy đơn điệu tăng dài • Bài tốn ba-lơ: – Dạng 1: Cho trước đồ vật – Dạng 2: Cho trước loại đồ vật • • • • Bài Bài Bài Bài 2/27/2014 toán toán toán toán biến đổi xâu nhân ma trận ghép cặp di chuyển CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 20 • Cài đặt số tốn theo gợi ý (tham khảo giáo trình Kỹ thuật lập trình) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 21 CuuDuongThanCong.com https://fb.com/tailieudientucntt • Khái niệm tái sử dụng mã nguồn • Giới thiệu trỏ hàm thuật tốn tùy biến • Thuật tốn tìm kiếm tùy biến cho kiểu liệu điều kiện khác • Thuật tốn xếp tùy biến • Qui trình xử lý cho phép thay thuật toán khác 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt • • • • • • • bottom-up: từ lên divide and conquer: chia để trị dynamic programming: quy hoạch động optimal: tối ưu sort: xếp swap: hoán vị top-down: từ xuống 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 25 • Theory and Problems of Fundamentals of Computing with C++, John R.Hubbard, Schaum’s Outlines Series, McGraw-Hill, 1998 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt ...? ?Thuật toán xếp ? ?Thuật toán số học Quy hoạch động ? ?Kỹ thuật cài đặt thuật toán hay qui trình tổng quát ? ?Thuật ngữ đọc thêm tiếng Anh 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự. .. để từ bước giải toán lớn giải toán lớn (bài toán ban đầu) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 16 • Bài tốn giải theo phương pháp quy... Bài 2/27/2014 toán toán toán toán biến đổi xâu nhân ma trận ghép cặp di chuyển CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 20 • Cài đặt số tốn theo gợi