1. Trang chủ
  2. » Thể loại khác

Phân tích các thuật toán sắp xếp và tìm kiếm. Khoa Công nghệ thông tin. Đại học Sư phạm TPHCM

20 3 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

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

Ngày đăng: 24/06/2022, 11:01

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

TÀI LIỆU LIÊN QUAN

w