Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
321,88 KB
Nội dung
Chương 2: Phân tích thuật tốn xếp tìm kiếm Trịnh Huy Hồng Khoa Cơng nghệ thơng tin Đại học Sư phạm TPHCM Mục đích Áp dụng kí pháp O lớn để phân tích đánh giá phương pháp xếp: – – – – – – – – – – Sắp xếp phương pháp chọn (selection sort) Sắp xếp phương pháp chèn (insertion sort) Sắp xếp phương pháp đổi chỗ (interchange sort) Sắp xếp phương pháp bọt (bubble sort) Sắp xếp phương pháp Shell (Shell Sort) Sắp xếp phương pháp trộn (merge sort) Sắp xếp phương pháp vun đống (heap sort) Sắp xếp nhanh (quick sort) Sắp xếp phương pháp thẻ (bucket sort) Sắp xếp phương pháp số (radix sort) Sắp xếp phương pháp chọn Ý tưởng: – Tìm phần tử nhỏ đưa đầu dãy – Tiếp tục thực phần lại dãy Thuật toán: Algorithm selectSort(A) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần For i ← to n-1 ← i For j ← i+1 to n if A[j] < A[min] then ← j swap(A, i, min) Return array A Phân tích SX pp chọn Vịng lặp ngồi (biến i) thi hành n-1 lần: O(n) – Tăng i: n-1 lần – Kiểm tra i: n lần – Gán i vào min: n-1 lần – Đổi chỗ: tối đa n-1 lần Với giá trị i, vòng lặp (biến j) thi hành n-1-i lần tổng cộng (n-1) + (n-2) + … + = (n-1)n/2 lần: O(n2) – So sánh: (n-1)n/2 lần – Gán: tối đa (n-1)n/2 lần Phân tích SX pp chọn (tt) Thời gian thực thi: T(n) = O(n) + O(n2) = O(n2+n) = O(n2) Sắp xếp phương pháp chèn Ý tưởng: – Chèn phần tử vào dãy xếp đến bước tại, vào vị trí để bảo đảm sau chèn dãy có thứ tự Thuật tốn: Algorithm insertSort(A) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần For i ← to n temp ← A[i] j←i-1 while temp 0 A[j+1] ← A[j] j←j-1 A[j+1] ← temp Return array A Phân tích thuật tốn SX pp chèn Vòng – – – lặp for (biến i) thực n-1 lần Tăng i: n-1 lần So sánh i với n: n lần Gán giá trị vào biến temp, j, A[j+1]: n lần Với giá trị i, thân vòng lặp while (biến j) tối thiểu thực lần tối đa thực i lần – – – Tmin(n) = n-1 Tmax(n) = 1+…+(n-1) = (n-1)n/2 = O(n2) Ttb(n) = ½Tmax(n) Sắp xếp phương pháp đổi chỗ Ý tưởng: – Xuất phát từ đầu dãy, tìm tất nghịch chứa phần tử này, triệt tiêu chúng cách đổi chỗ phần tử với phần tử tương ứng cặp nghịch Thuật toán: Algorithm interchangeSort(A) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần For i ← to n-1 For j ← i+1 to n if A[j] < A[i] then swap(A,j,i) Return array A Phân tích SX pp đổi chỗ Vịng – – lặp for ngồi (biến i) thi hành n lần Tăng i: n-1 lần So sánh i: n lần Với giá trị i, vòng lặp for (biến j) thi hành (n-1-i) lần – – – – Tăng j: n(n-1)/2 lần So sánh j: n(n+1)/2 lần Phép so sánh: n(n-1)/2 lần Phép đổi chỗ: tối đa n(n-1)/2 lần Phân tích SX pp đổi chỗ Thời gian thực thi: T(n) = O(n) + O(n2) = O(n2) 10 Sắp xếp phương pháp bọt (buble sort) Ý tưởng: – So sánh hai phần tử kề nhau, chúng chưa đứng thứ tự đổi chỗ (swap) Thuật 11 toán: Algorithm BubleSort(A) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần For i ← to n-1 For j ← n downto i+1 if A[j] < A[j-1] then swap(A,j-1,j) Return array A Phân tích SX pp đổi chỗ Vịng – – lặp for ngồi (biến i) thi hành n-1 lần Tăng i: n-1 lần So sánh i: n lần Với giá trị i, vòng lặp for (biến j) thi hành (n-1-i) lần – – – 12 – Tăng j: n(n-1)/2 lần So sánh j: n(n+1)/2 lần Phép so sánh: n(n-1)/2 lần Phép đổi chỗ: tối đa n(n-1)/2 lần Phân tích SX pp đổi chỗ Thời gian thực thi: T(n) = O(n) + O(n2) = O(n2) 13 Bài tập 14 Cài đặt thuật toán xếp selection sort,insertion sort, bubble sort ngôn ngữ C/C++ Khảo sát thời gian thực thi thuật toán với giá trị n khác với dãy số Thời gian thực thi thuật toán với giá trị n (rất lớn, >10000) với dãy số có khác hay khơng? Nếu có giải thích có Nếu khơng giải thích khơng Vẽ đồ thị thể thời gian thực thi thuật toán phụ thuộc vào n Sắp xếp phương pháp Shell Ý – tưởng: Là mở rộng insertion Sort cho phép dịch chuyển phần tử xa Algorithm ShellSort(A) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần 15 16 h←1 repeat h←3*h+1 until h > n repeat h ← h div for i ← h+1 to n v ← A[i] j←i while a[j-h] > v and j>h a[j] ← a[j-h] j ← j-h A[j] ← v until h=1 Return array A Phương pháp Chia Trị Một – mơ hình thiết kế thuật tốn có bước: Chia: Nếu kích thước liệu đầu vào nhỏ ngưỡng giải trực tiếp Ngược lại chia nhỏ liệu đầu vào thành hai nhiều tập liệu rời – Đệ qui: Giải – Trị: Kết 17 cách đệ qui toán để lấy lời giải hợp lời giải toán thành lời giải toán ban đầu Sắp xếp phương pháp trộn Áp dụng mô hình chia để trị để thiết kế thuật tốn xếp phương pháp trộn Chia: – – Đệ qui: – 18 Nếu mảng A rỗng có phần tử trả A (đã có thứ tự) Ngược lại A chia thành mảng A1 A2, mảng chứa n/2 phần tử Sắp xếp cách đệ qui hai mảng A1 A2 Trị: – Tạo mảng A cách trộn hai mảng xếp A1 A2 Sắp xếp phương pháp trộn (2) Algorithm mergeSort(A, n) Input: Một mảng n phần tử số A Output: Mảng A xếp tăng dần For i ← to n/2 A1[i] = A[i] For i ← n/2+1 to n-1 A2[i-n/2-1] = A[i] mergeSort(A1,n/2) mergeSort(A2, n-n/2-1) 19 merge(A1,A2,A) Return array A Cây xếp trộn Chia đôi liệu A Giải đệ qui Giải đệ qui A1 A2 Trộn 20 PP xếp trộn biểu diễn nhị phân Chiều cao cây: [log2n]+1