Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng
Thiết Kế & Đánh Giá Thuật Toán Sắp Xếp Nhanh TS Lê Nguyên Khôi Trường Đại Học Công Nghệ - ĐHQGHN Nội Dung Chia để trị Phân hoạch Phân tích trường hợp xấu Phân hoạch ngẫu nhiên Phân tích Sắp Xếp Nhanh xuất C.A.R Hoare, 1962 Dựa kỹ thuật Chia – Để – Trị Hiệu thực tế (tinh chỉnh) Đề Chia Để Trị Sắp xếp nhanh mảng -phần tử tăng dần: Chia: phân hoạch mảng thành mảng dựa phần tử chốt cho phần tử thuộc mảng bên trái ≤ phần tử thuộc mảng bên phải ≥ Trị: áp dụng đệ quy xếp mảng Gộp: hiển nhiên Lưu ý: phân hoạch với thời gian tuyến tính Phân Hoạch – Mã Giả Partition , , ⇒ ⇒ ← ← for ← to if ≤ then ← 1 exchange ↔ exchange ↔ return , chốt Duy trì Phân Hoạch – Ví Dụ 10 13 11 i j 13 10 11 i j 10 13 11 i j 13 10 11 i j 13 10 11 i=1 j=2->4 i=2 j=5->6 i=3 j=7 i=4 j=8 i=4 Phân Hoạch – Cách Khác Partition , , ) ← ⇒ ⇒ , chốt Xem tr 171-172 Phân Hoạch – Bài Tập 7.1-1 tr.173 Sắp Xếp Nhanh - Mã Giả QuickSort , , ) if < then ← Partition , , QuickSort (, , − 1) QuickSort (, + 1, ) Lời gọi hàm đầu tiên: QuickSort , 1, ) Sắp Xếp Nhanh - Phân Tích Giả sử phần tử dãy khác (khơng có phần tử nhau) Thực tế có số thuật tốn phân hoạch khác tốt cho trường hợp có phần tử Cho thời gian chạy trường hợp xấu với mảng phần tử Trường Hợp Xấu Nhất Mảng xếp Phân hoạch dựa phần tử chốt phần tử lớn nhỏ mảng Một hai mảng ln ln khơng có phần tử = = = ∈ −1 + + −1 + −1 + 10 Trường Hợp Xấu Nhất = −1 + Thay Số học Cây đệ quy Định lý tổng quát Phải dạng = / 11 Trường Hợp Tốt Nhất !!! Partition chia mảng thành phần (may mắn) = 2 /2 = log (giống MergeSort) 12 Trường Hợp Khác Partition chia mảng với tỉ lệ = # #$ & #$ # & : ? #$ #$ Thời gian chạy = ? ( log#$ ≤ ≤ ( log#$/& ) 13 Trường Hợp Khác Giả sử phân hoạch liên tục theo trường hợp xấu tốt * = 2+ /2 + + =* −1 + * =2 * −1 + 2 = 2* − + * ∈ log tốt xấu + 14 Phân Hoạch Ngẫu Nhiên Phân hoạch dựa phần tử ngẫu nhiên: Thời gian chạy không phụ thuộc vào liệu đầu vào Không cần giả thiết phân phối liệu đầu vào Không liệu tạo nên trường hợp xấu Trường hợp xấu hàm sinh số ngẫu nhiên 15 Phân Hoạch – Vấn Đề Khác Giả thiết phân tích thời gian chạy Mảng bao gồm phần tử khác Mảng có phần tử giống nhau? Trường hợp đặc biệt, mảng toàn phần tử giống Thời gian chạy theo trường hợp xấu 16 Phân Hoạch – Vấn Đề Khác Giả thiết phân tích thời gian chạy Mảng bao gồm phần tử khác Mảng có phần tử giống nhau? Trường hợp đặc biệt, mảng toàn phần tử giống Thời gian chạy theo trường hợp xấu 17 Phân Hoạch – Vấn Đề Khác Phân hoạch thành mảng Mảng bên trái < Mảng bên phải > Mảng = Thời gian chạy nhanh Trường hợp đặc biệt, tất phần tử mảng giống Thời gian chạy tuyến tính Mã giả? 18 Áp Dụng Thực Tế Sắp xếp nhanh nói chung thuật tốn xếp tốt Thơng thường xếp nhanh chạy nhanh gấp đôi so với xếp gộp Hằng số ( tương đối nhỏ Sắp xếp nhanh hưởng lợi đáng kể từ việc tùy chỉnh mã Sắp xếp nhanh chạy tốt với nhớ đệm nhớ ảo 19