1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Giới thiệu các thuật toán sắp xếp

26 45 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 206,94 KB

Nội dung

Mời các bạn tham khảo Bài giảng Giới thiệu các thuật toán sắp xếp sau để nắm bắt được những kiến thức về 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)), sắp xếp theo cơ số, sắp xếp hòa nhập file lớn.

Giới thiệu Các thuật toán xếp Nội dung trình bày • 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ố Sắp xếp hòa nhập file lớn Sắp xếp đếm - countingsort • Bài tốn Có n phần tử cần xếp kiểu nguyên Các giá trị phần tử không lớn giá trị k • Có cách xác định nhanh phần tử x đầu vào xác định vị trí danh sách đầu • Ví dụ: Nếu kiểm tra có 17 phần tử bé phần tử x, x bắt đầu vị trí 18 Dùng mảng trung gian để đếm vị trí xuất x dãy đầu Sắp xếp đếm - countingsort (t) Đếm thông qua thống kê số lần xuất phần tử Cộng dồn để xác định vị trí xuất cuối phần tử danh sách • Phân phối giá trị theo vị trí xác định Sắp xếp đếm – countingsort (t) • Thuật tốn – countingsort (t) • Input: dãy A[0 N-1] ngun, miền giá trị [0 k] • Output: dãy B[0 N] xếp for(i=0->k) c[i]=0; for(i=0->N-1) c[a[i]]++; for(i=1->k) c[i]=c[i-1]+c[i]; Sắp xếp đếm – countingsort (t) • Thuật toán – countingsort (t) for(i=N-1->0) a b[c[a[i]]-1]=a[i]; b c[a[i]] ; Sắp xếp đếm – countingsort (t) • Thử nghiệm i a c c c 0 1 0 6 0 9 7 Sắp xếp đếm – countingsort (t) • Thử nghiệm i a b c b c b c b c b c b c b c 3 2 2 2 6 6 6 3 3 8 8 0 1 1 1 3 7 7 9 9 9 9 6 6 6 5 6 6 Sắp xếp đếm – countingsort (t) • Đánh giá độ phức tạp Số phép toán số: 2*k Số phép toán gán: N Độ phức tạp thuật toán: O(N+K) Độ phức tạp nhớ: thêm mảng b, mảng c trung gian Sắp xếp số - radixsort • Ý tưởng thuật tốn Nếu xem số nguyên tập hợp số Sắp xếp theo số bên trái (most significant) thành nhóm Sau tiến hành nội nhóm với số bên phải Lặp hết vị trí dãy xếp Ý tưởng hay khó khăn có nhiều nhóm nhỏ khó để kiểm sốt Giải pháp: xếp từ phải sang trái (least fignificant) 10 Sắp xếp số - radixsort (t) • Thuật tốn radix • Input: A[0 N-1] kiểu ngun, d số chữ số lớn • Ouput: A[ N-1] xếp for(i=1->d) countingsortex(A[0 N-1],i) 12 Sắp xếp số - radixsort (t) • countingsortex(A[0 N-1],k) Mở rộng countingsort với việc phân phối dựa giá trị số vị trí thứ k 13 Sắp xếp số - radixsort (t) • Thuật tốn – countingsortex (t) • Input: dãy A[0 N-1] ngun, cột tìm số k • Output: dãy B[0 N] xếp for(i=0->9) c[i]=0; for(i=0->N-1) c[a[i]Θk]++; for(i=0->9) c[i]=c[i-1]+c[i]; 14 Sắp xếp số - radixsort (t) • Thuật toán – countingsortex (t) for(i=N-1->0) a b[c[a[i]Θk]-1]=a[i]; b c[a[i]Θk] ; for(i=0->N-1) a[i]=b[i]; // Θk: lấy giá trị cột k số 15 Sắp xếp số - radixsort (t) • Thử nghiệm 1423 4325 4329 2342 3423 3234 5433 3532 3538 3432 6342 6343 5326 4354 2342 3532 3432 6342 1423 3423 5433 6343 3234 4354 4325 5326 3538 4329 1423 3423 4325 5326 4329 3532 3432 5433 3234 3538 2342 6342 6343 4354 3234 4325 5326 4329 2342 6342 6343 4354 1423 3423 3432 5433 3532 3538 1423 2342 3234 3423 3432 3532 3538 4325 4329 4354 5326 5433 6342 6343 16 Sắp xếp số - radixsort (t) • Đánh giá độ phức tạp Dựa phép toán thuật toán countingsort nhân với d – số chữ số Độ phức tạp thuật toán O(dn) Với trường hợp d bé, hữu hạn coi O(n) Độ phức tạp nhớ: Thêm mảng b trung gian 17 Sắp xếp số - radixsort (t) • Phát triển Có thể phát triển để xếp với khóa xếp chuỗi có độ dài xác định COW, DOG, SEA, … 18 Sắp xếp nhớ ngồi • Bài toán Sắp xếp với liệu lưu nhớ ngồi (ổ đĩa) Khối lượng liệu lớn (khơng thể đồng thời đọc vào nhớ được) • Các đặc trưng: Khơng thể đọc vào nhớ máy tính đồng thời Thời gian thực thao tác đọc ghi đĩa chậm • Mục tiêu Hạn chế đọc ghi đĩa Tận dụng tối đa nhớ 19 Sắp xếp nhớ ngồi • Giải pháp Đọc tối đa liệu lên nhớ, sử dụng thuật toán xếp hiệu nhớ (heapsort, quicksort, radixsort) Ghi liệu xếp thành file tạm (mỗi khối thành file tạm) Đọc phần nhỏ file xếp, tiến hành xếp trộn, tiếp tục đọc phần đến hết Trong trường hợp số lượng khối (file) trung gian lớn khối nhỏ đọc lên để so sánh trộn khơng hiệu chia thành nhiều nhóm trộn nhóm trước, sau trộn lại 20 Sắp xếp nhớ ngồi • Ví dụ Có 110 mb liệu Bộ nhớ sử dụng 10mb • Thực Đọc khối 10mb tiến hành xếp với thuật toán quicksort, ghi thành file t01 -> t11 Mỗi file t01->t11 đọc khối 10/11 mb, tiến hành xếp trộn với 11 dòng (kiểm tra 11 dòng trộn vào) File kết file trộn hết t01->t11 21 Sắp xếp nhớ • Ví dụ Có 110000 mb liệu Bộ nhớ sử dụng 10mb • Thực Đọc khối 10mb tiến hành xếp với thuật toán quicksort, ghi thành file t00001 -> t11000 Do lần đọc nhớ dựa khối 64kb thuận tiện lúc 10mb/11000 ~ 1kb việc đọc chưa tối ưu khả đọc liệu 22 Sắp xếp nhớ ngồi Vì xây dựng 100 khối trung gian để từ t00001 ->t00100 thành t001, có t001 -> t110 Sau tiến hành trộn t001->t110 thành file đầu 23 Bài tập lớp Triển khai thuật toán trộn nhớ ngồi 24 Nội dung trình bày Sắp xếp đếm countingsort Sắp xếp theo số radixsort Sắp xếp nhớ 25 Bài tập - 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 5342 5435 7634 7632 3432 3232 3433 4534 5342 5342 5342 5342 5342 5342 5342 5342 26 ... 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. .. ngồi 24 Nội dung trình bày Sắp xếp đếm countingsort Sắp xếp theo số radixsort Sắp xếp nhớ 25 Bài tập - 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... mảng b trung gian 17 Sắp xếp số - radixsort (t) • Phát triển Có thể phát triển để xếp với khóa xếp chuỗi có độ dài xác định COW, DOG, SEA, … 18 Sắp xếp nhớ ngồi • Bài toán Sắp xếp với liệu lưu nhớ

Ngày đăng: 08/05/2021, 16:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w