Bài giảng Hệ thống thông tin: Bài 3 Các thuật toán sắp xếp, cung cấp cho người học những kiến thức như: Bài toán sắp xếp; Tiếp cận sắp xếp đơn giản; Tiếp cận sắp xếp độ phức tạp O(nlog(n)); Một số tiếp cận khác. Mời các bạn cùng tham khảo!
Giới thiệu Các thuật toán xếp 08/02/2014 Nội dung trình bày • Bài tốn xếp • Tiếp cận xếp đơn giản Sắp xếp chọn Sắp xếp chèn Sắp xếp bọt • Tiếp cận xếp độ phức tạp O(nlog(n)) Sắp xếp theo phân đoạn (Quick sort) Sắp xếp hịa nhập Sắp xếp vung đống • Một số tiếp cận khác Sắp xếp theo số 08/02/2014 Sắp xếp hòa nhập hai file lớn Bài tốn xếp • Cho dãy liệu so sánh (theo tiêu chí so sánh) • Sắp xếp phần tử mảng theo thứ tự (không giảm, khơng tăng) • Ví dụ: Cho danh sách mức xám điểm ảnh: xếp theo thứ tự không tăng mức xám Cho danh sách sinh viên: xếp sinh viên theo thứ tự không giảm theo ngày sinh 08/02/2014 Đánh giá ứng dụng • Tính ứng dụng: Bài tốn lựa chọn theo thứ tự tốn xếp theo tiêu chí Nhiều thuật tốn thực hiệu liệu xếp theo xu hướng • Đặc điểm Phải có tiêu chí so sánh lớn hơn, bé Có thể so sánh số thành phần đối tượng để xác định tiêu chí Tính hiệu thuật tốn phụ thuộc vào độ phức tạp phép so sánh hốn đổi vị trí Một số thuật toán độ phức tạp nhớ 08/02/2014 vấn đề liệu lớn Phân loại theo độ phức tạp • Thuật tốn đơn giản O(n2) Sắp xếp chọn Sắp xếp chèn Sắp xếp bọt • Sắp xếp theo phương pháp chia để trị O(nlog(n)) Sắp xếp phân đoạn Sắp xếp trộn Sắp xếp vun đống • Sắp xếp theo phương pháp O(n) Sắp xếp theo số 08/02/2014 Sắp xếp chọn – selection sort - Sắp xếp dãy không giảm 08/02/2014 6 Sắp xếp chọn (t) • Ý tưởng Chọn phần tử bé đổi chổ đưa lên đầu Tiếp theo chọn phần tử bé thứ đưa lên vị trí thứ hai Chọn phần tử bé thứ k đưa đến vị trí thứ k Lặp lại đến phần tử thứ N-1 08/02/2014 Sắp xếp chọn (t) • Phát biểu lại Chọn phần tử bé đổi chổ đưa lên đầu Giả sử có k phần tử đầu xếp Tìm phần tử bé từ k+1 đến n, đổi chổ cho phần tử k+1 Lặp tương tự phần tử N-1 08/02/2014 Sắp xếp chọn (t) • Thuật tốn Input: A[0 N-1] Output: A[0 N-1] xếp không giảm for i=0->N-2 a vt=i; b for j=i+1->N-1 if (a[j] a for j=0->i-1 if(a[j]>a[j+1]) swap(a[j],a[j+1]); 08/02/2014 19 Sắp xếp bọt (t) i 6 6 5 4 08/02/2014 j 1 1 1 1 1 3 3 3 2 3 7 7 2 3 8 2 6 2 6 4 6 6 4 7 4 4 8 8 8 20 Sắp xếp bọt (t) • Độ phức tạp thuật tốn Số phép toán so sánh N(N-1)/2 Số phép toán gán 3(N)(N-1)/2 Độ phức tạp thuật tốn O(n2) 08/02/2014 21 Nhận xét • So sánh độ phức tạp thuật toán ba thuật toán Theo đánh giá chung Đánh giá theo tiêu chí • Số phép so sánh • Số phép gán liệu • Số phép gán số 08/02/2014 22 Nhận xét • Nhìn chung ba thuật tốn có độ phức tạp tương đương thời gian thực tương đương • Thực tế Sự phức tạp so sánh, phép gán, phép gán số không giống với kiểu liệu khác (Ví dụ) 08/02/2014 23 Nhận xét • Thuật tốn chọn, bọt chọn k phần tử đứng đầu, cuối N phần tử mà không cần phải xếp tồn phần tử (Ví dụ) • Thuật tốn xếp chèn, bọt phù hợp với hệ thống trì tính xếp với liệu thêm bớt thường xuyên mà xếp lại tồn (ví dụ) 08/02/2014 24 Thảo luận • Đánh trường hợp xấu nhất, tốt Chọn Chèn Nổi bọt 08/02/2014 25 Thảo luận • Trong trường hợp cho dãy N phần tử xếp, cần thêm M phần tử vào dãy 08/02/2014 26 Thảo luận • Thảo luận tính ổn định thứ tự thuật tốn Các phần tử có giá trị so sánh giữ nguyên thứ tự 08/02/2014 27 Nội dung trình bày • Bài tốn xếp • Tiếp cận xếp đơn giản Sắp xếp chọn Sắp xếp chèn Sắp xếp bọt 08/02/2014 28 Bài tập lớp • Sinh viên thực thuật tốn với liệu • 1647393 08/02/2014 29 Bài tập - - 08/02/2014 Cài đặt thuật tốn ngơn ngữ lập trình chạy thử Thử nghiệm thuật tốn xếp để đạt dãy không tăng với liệu sau 123456 654321 526413 Nhận xét trường hợp thuật toán thực nhiều thao tác (đâu trường hợp tốt nhất, xấu nhất) số thao tác trường hợp Trong trường hợp độ phức tạp phép chuyển chổ so sánh khác xếp tốt hơn, ngược lại 30 ... N-1] phần tử • Output: A[0 N-1] phần tử xếp không giảm for i=N-1 -> a for j= 0-> i-1 if(a[j]>a[j+1]) swap(a[j],a[j+1]); 08/02/2014 19 Sắp xếp bọt (t) i 6 6 5 4 08/02/2014 j 1 1 1 1 1 3 3 3 2 3. .. N-1] phần từ Ouput: A[0 N-1] xếp không giảm for i= 1-> N-1 a x=A[i]; b vt=i; c while (vt>0 && A[vt-1]>x) A[vt]=A[vt-1]; vt ; d A[vt]=x; 08/02/2014 14 Sắp xếp chèn (t) 08/02/2014 i vt 1 1 3 4 1 3. .. liệu • 164 739 3 08/02/2014 29 Bài tập - - 08/02/2014 Cài đặt thuật tốn ngơn ngữ lập trình chạy thử Thử nghiệm thuật toán xếp để đạt dãy không tăng với liệu sau 1 234 56 65 432 1 5264 13 Nhận xét trường