Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 5: Các thuật toán xắp xếp cung cấp cho người học các kiến thức: Bài toán sắp xếp, ba thuật toán sắp xếp cơ bản, sắp xếp trộn, sắp xếp nhanh, sắp xếp vun đống,... Mời các bạn cùng tham khảo nội dung chi tiết.
Chương : Các thuật toán xếp Trịnh Anh Phúc Bộ mơn Khoa Học Máy Tính, Viện CNTT & TT, Trường Đại Học Bách Khoa Hà Nội Ngày tháng năm 2014 CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Giới thiệu Bài toán xếp Ba thuật toán xếp Sắp xếp trộn Sắp xếp nhanh Sắp xếp vun đống Cận cho toán xếp Tổng kết Các phương pháp xếpCuuDuongThanCong.com đặc biệt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài toán xếp Định nghĩa toán xếp Sắp xếp (Sorting) trình tổ chức lại họ liệu theo thứ tự giảm dần tăng dần (ascending or descending order) Dữ liệu cần xếp : Số nguyên (Intergers) Xâu ký tự (String) Đối tượng (Object) Ta cần có khóa xếp (sort key) dùng để phân biệt liệu với Khóa cho liệu dùng để xếp Lưu ý, khơng có khóa trùng lặp cho hai liệu phân biệt giải thuật xếp thực CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài toán xếp Lưu ý biểu diễn tốn xếp máy tính Việc xếp tiến hành trực tiếp ghi liệu đòi hỏi thao tác di chuyển tốn Vì người ta thường xây dựng bảng khóa gồm ghi gồm hai trường (khóa, trỏ) : trường "khóa" chứa giá trị khóa trường "con trỏ" chứa địa trỏ đến ghi liệu tương ứng Việc xếp theo khóa bảng khóa khơng đòi hỏi di chuyển ghi liệu - bảng chính, trình tự ghi bảng khóa cho phép xác định trình tự ghi liệu CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài tốn xếp Mơ tả giải thuật toán xếp Đầu vào : Dãy gồm n khóa A = (a1 , a2 , · · · , an ) Đầu : Một hoán vị dãy A dãy A = (a1 , a2 , · · · , an ) cho dãy thỏa mãn a1 ≤ a ≤ · · · ≤ an Độ quan trọng thuật toán xếp 40% thời gian hoạt động máy tính dành cho việc xếp - D.Knuth CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài toán xếp (tiếp) Phân loại Sắp xếp (internal sort) : Đòi hỏi họ liệu đc đưa toàn vào nhớ máy tính Sắp xếp ngồi (external sort) : Họ liệu khơng thể lúc đưa tồn vào nhớ trong, đọc vào phận từ nhớ Đặc trưng Tại chỗ (in place) : khơng gian nhớ phụ mà thuật tốn đòi hỏi O(1), nghĩa chặn số không phụ thuộc vào độ dài dãy cần xếp Ổn định (stable) : phần tử có giá trị giữ nguyên thứ tự tương đối chúngCuuDuongThanCong.com trước xếp Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài toán xếp (tiếp) Hai phép toán mà thuật toán xếp thường sử dụng Đổi chỗ (swap) : thời gian thực O(1), ví dụ mã nguồn cài đặt C void swap(datatype &a, datatype &b){ datatype temp = a; a=b; b=temp; } So sánh (compare) : hàm compare(a,b) trả lại true a vị trí trước b theo thứ tự cần xếp false trái lại CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Bài toán xếp Ba thuật toán xếp Sắp xếp trộn Sắp xếp nhanh Sắp xếp vun đống Cận cho toán xếp Tổng kết Các phương pháp xếp đặc biệt CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Ba thuật toán xếp Sắp xếp chèn - insertion sort Phỏng theo cách làm người chơi bài, có qn người chơi tìm vị trí thích hợp cầm tay để chèn vào cho giá trị quân tăng dần CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà 5Nội tháng ) năm 2014 / 92 Ba thuật toán xếp Sắp xếp chèn (tiếp) Thuật toán Tại bước thứ k = 1, 2, · · · , n đưa phần tử thứ k mảng A cho vào vị trí dãy gồm k phần tử Kết sau bước k k phần tử xếp thứ tự CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 10 / 92 Các phương pháp xếp đặc biệt Các phương pháp xếp sau coi tập đọc thêm Sắp xếp đếm (counting sort) Sắp xếp theo số (radix sort) Sắp xếp phân cụm (bunket sort) CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 80 / 92 Các phương pháp xếp đặc biệt Mở đầu Ý tưởng ta làm tốt với phép so sánh vởi thông tin bổ sung từ giả thiết đầu vào Thông tin bổ sung/Giả thiết Các số nguyên nằm khoảng [0 k] k = O(n) Các số thực phân bố dều khoảng [0,1) Ta trình bầy ba thuật tốn có thời gian xếp tuyến tính : Sắp xếp đếm (counting sort) Sắp xếp theo số (radix sort) Sắp xếp phân cụm (bunket sort) theo thơng tin bổ sung số ngun đc xếp số nguyên không CuuDuongThanCong.com âm Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 81 / 92 Các phương pháp xếp đặc biệt Sắp xếp đếm (Counting sort) Theo giả thuyết đầu vào : n số nguyên không âm cần xếp khoảng [0 k] k số nguyên k = O(n) Ý tưởng với phần tử x dãy đầu vào ta xác định hạng (rank) số lượng phần tử nhỏ x Sau biết hạng r x, ta xếp vào vị trí r + Lặp có loạt phần tử có giá trị, ta xếp chúng theo thứ tự xuất dãy ban đầu (để có tính ổn định xếp) CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 82 / 92 Các phương pháp xếp đặc biệt Sắp xếp đếm (tiếp) Mã nguồn C void countSort(int a[], int b[], int k){ // k -giá trị phần tử lớn // Đếm : b[] - số phần tử có giá trị i for(i=0; i n Sắp xếp đếm khơng có tính chỗ CuuDuongThanCong.com Các phương pháp xếp đặc biệt Sắp xếp theo số Giả thiết đầu vào gồm n số nguyên, số có d chữ số Ý tưởng thuật toán Do thứ tự xếp số cần tìm thứ tự từ diển xâu tương ứng với chúng, nên để tiến hành xếp ta tiến hành d bước sau : Bước : Sắp xếp số theo chữ số Bước : Sắp xếp số theo chữ số Bước d : Sắp xếp số theo chữ số d Giả sử số hệ đếm số k, chữ số có k giá trị nên bước ta sử dụng xếp theo số với thời gian tính CuuDuongThanCong.com O(n + k) Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 85 / 92 Các phương pháp xếp đặc biệt Sắp xếp theo số (tiếp) Cho mảng A chứa số có d chữ số Procedure Radix-Sort(A,d) for i ← to d sử dụng xếp ổn định để xếp theo chữ số thứ i endfor End CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 86 / 92 Các phương pháp xếp đặc biệt Sắp xếp theo số (tiếp) Phân tích độ phức tạp : Thời gian tính : bước sử dụng xếp đếm thời gian tính lần lặp Θ(n + k) thời gian tính thuật toán Radix Sort T (n) = Θ(d (n + k)) CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 87 / 92 Các phương pháp xếp đặc biệt Sắp xếp theo số (tiếp) Ví dụ : Xét dãy số d = 2, k =10 23, 45, 7, 56, 20, 19, 88, 77, 61, 13, 52, 39, 80, 2, 99 Việc xếp bao gồm nhiều bước, chữ số trái nhất, tiếp đến chữ số hàng chục, hàng trăm, v.v Bước (i=1) : 20, 80, 61, 52, 2, 23, 13, , 45, 56, 7, 77, 88, 19, 39, 99 Bước (i=2) : 2, 7, 13, 19, 20, 23, 39, 45, 52, 56, 61, 77, 80, 88, 99 CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 88 / 92 Các phương pháp xếp đặc biệt Sắp xếp phân cụm (Bucket Sort) Giả thiết : Đầu vào gồm n số thực có phần bố khoảng [0 1) ( số có xác suất xuất ) Ý tưởng thuật toán Chia đoạn [0 1) làm n cụm (bunkets) 0, 1/n, 2/n, · · · , (n − 1)/n Đưa phần tử aj vào cụm i/n ≤ aj < (i + 1)/n Do số phân bố nên khơng có q nhiều số rơi vào cụm Nếu ta chèn chúng vào cụm (sử dụng xếp chèn) cụm CuuDuongThanCong.com phần tử chúng xếp theo thứ tự Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 89 / 92 Các phương pháp xếp đặc biệt Sắp xếp phân cụm (tiếp) Minh họa xếp phân cụm với dãy số thực đầu vào 0.78, 0.17, 0.39, 0.26, 0.72, 0.94, 0.21, 0.12, 0.23, 0.68 0.78 0.17 0.39 0.26 0.72 0.94 0.21 0.12 0.23 0.68 0.12 0.17 0.21 0.23 0.26 0.39 0.68 0.72 0.78 CuuDuongThanCong.com 0.94 0.12 0.17 0.21 0.23 0.26 0.39 0.68 0.72 0.78 0.94 Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 90 / 92 2014-03-05 Các phương pháp xếp đặc biệt Cấu trúc liệu giải thuật Các phương pháp xếp đặc biệt Sắp xếp phân cụm (Bucket Sort) Các phương pháp xếp đặc biệt Sắp xếp phân cụm (tiếp) Minh họa xếp phân cụm với dãy số thực đầu vào 0.78, 0.17, 0.39, 0.26, 0.72, 0.94, 0.21, 0.12, 0.23, 0.68 0.78 0.17 0.39 0.26 0.72 0.94 0.21 0.12 0.23 0.68 0.12 0.17 0.21 0.23 0.26 0.39 0.68 0.72 0.78 0.94 Ba cọc số gồm : Cột bên trái danh sách A số ban đầu, tính thứ tự xuống Cột cụm B tương ứng với cụm danh sách phần tử xếp Cột bên phải dãy số thực xếp CuuDuongThanCong.com 0.12 0.17 0.21 0.23 0.26 0.39 0.68 0.72 0.78 0.94 Các phương pháp xếp đặc biệt Sắp xếp phân cụm (tiếp) BucketSort(A) /* A[0 n-1] mảng đầu vào, B[0] B[n-1] danh sách cụm */ n ← length(A) for i ← to n-1 Bổ sung A[i] vào danh sách B[ n*A[i] ] endfor for i ← to n-1 InsertionSort(B[i]) endfor Nối danh sách B[0] B[n-1] theo thứ tự sau xếp chèn cụm CuuDuongThanCong.com End Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 91 / 92 Các phương pháp xếp đặc biệt Sắp xếp phân cụm (tiếp) Phân tích thời gian tính BucketSort Tất dòng giải thuật, ngoại trừ dòng 6, đòi hỏi thời gian tính tốn O(n) tình tồi Trong tình tồi nhất, O(n) số đưa vào cụm, thuật tốn có thời gian tính O(n2 ) tình tồi Trong tình trung bình, có lượng số phần tử dãy cần xếp rơi vào cụm thuật tốn có thời gian tính trung bình O(n) CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà5 Nội tháng) năm 2014 92 / 92 ... CNTT trúc& dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày H 5 Nội tháng) năm 2014 12 / 92 201 4-0 3- 05 Ba thuật toán xếp Cấu trúc liệu giải thuật Ba thuật toán xếp Sắp xếp chèn Ba thuật toán... 15 28 42 CuuDuongThanCong.com 17 20 23 Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc& dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày H 5 Nội tháng) năm 2014 16 / 92 201 4-0 3- 05. .. 15 28 42 CuuDuongThanCong.com 17 20 23 Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc& dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày H 5 Nội tháng) năm 2014 20 / 92 201 4-0 3-0 5