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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Một số giải thuật sắp xếp và tìm kiếm

29 2 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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Một số giải thuật sắp xếp và tìm kiếm. Chương này có nội dung trình bày về: bài toán sắp xếp và một số phương pháp sắp xếp đơn giản; một số phương pháp sắp xếp cải tiến; bài toán tìm kiếm;... Mời các bạn cùng tham khảo!

8/4/2020 CHƯƠNG MỘT SỐ GIẢI THUẬT SẮP XẾP VÀ TÌM KIẾM 4.1 Bài tốn xếp số phương pháp xếp đơn giản 4.2 Một số phương pháp xếp cải tiến 4.2.1 Sắp xếp nhanh (Quick Sort) 4.2.2 Sắp xếp vun đống (Heap Sort) 4.2.3 Đánh giá 4.3 Bài tốn tìm kiếm 4.3.1 Khái qt tìm kiếm 4.3.2 Tìm kiếm (Sequential Searching) 4.3.3 Tìm kiếm nhị phân (Binary Searching) 4.3.4 Đánh giá Cấu trúc liệu giải thuật 131 4.1 Bài toán xếp số phương pháp xếp đơn giản 4.1.1 Khái quát xếp 4.1.2 Sắp xếp lựa chọn (Selection Sort) 4.1.3 Sắp xếp chèn (Insertion Sort) 4.1.4 Sắp xếp bọt (Bubble Sort) 4.1.5 Độ phức tạp phép xếp đơn giản Cấu trúc liệu giải thuật 132 66 8/4/2020 4.1.1 Khái quát xếp ◼ ◼ ◼ ◼ Sắp xếp q trình bố trí lại phần tử tập đối tượng theo thứ tự định (tăng giảm dần) Ví dụ: ❑ {1,2,5,7,9} ❑ {“An”, “Bình”, “Dương”, “Hương”} Việc xếp toán phổ biến tin học ❑ Do yêu cầu tìm kiếm thuận lợi, xếp kết xuất cho bảng biểu,… Dữ liệu thường tổ chức thành ghi Mỗi ghi thường có số trường liệu khác Trường tham gia trình tìm kiếm gọi khóa Cấu trúc liệu giải thuật 133 4.1.1 Khái quát xếp ◼ ◼ Khóa xếp ❑ Một phận ghi biểu diễn đối tượng xếp ❑ Khóa sử dụng để xác định thứ tự xếp ghi tập ghi Bảng khóa ❑ Sử dụng xếp muốn hạn chế việc di chuyển liệu ❑ Một tập hợp ghi chứa trường: ◼ ◼ ❑ Khóa: Chứa khóa xếp Link: Con trỏ ghi địa ghi đối tượng liệu tương ứng Thứ tự ghi bảng khóa cho phép xác định thứ tự ghi liệu Cấu trúc liệu giải thuật 134 67 8/4/2020 4.1.1 Khái quát xếp Một số phương pháp xếp Cấu trúc liệu giải thuật 135 4.1.1 Khái quát xếp Các đặc trưng thuật tốn xếp: ▪ Tính ổn định thuật tốn xếp • Các phần tử có khóa giữ nguyên thứ tự tương đối chúng trước xếp ❑ Tính chỗ: ◼ Thuật tốn địi hỏi khơng gian nhớ phụ số (không phụ thuộc vào số lượng phần tử dãy cần sắp) Cấu trúc liệu giải thuật 136 68 8/4/2020 4.1.1 Khái quát xếp ❖Bài tốn xếp đơn giản hóa dạng sau: ▪ Đầu vào: Một dãy số nguyên (các khóa) ▪ Đầu ra: Một hốn vị dãy số cho giá trị khóa xếp theo thứ tự tăng dần Cấu trúc liệu giải thuật 137 4.1.2 Sắp xếp lựa chọn (Selection Sort) ❖Ý tưởng: ▪ Tại lượt, chọn phần tử nhỏ số phần tử chưa Đưa phần tử chọn vào vị trí phép đổi chỗ ▪ Sau lượt thứ i (i = n-1), dãy cần coi chia thành phần: • Phần sắp: từ vị trí → i • Phần chưa sắp: từ vị trí i +1 → n Cấu trúc liệu giải thuật 138 69 8/4/2020 4.1.2 Sắp xếp lựa chọn (Selection Sort) ❖ Ví dụ: xếp dãy sau theo thứ tự tăng dần: A = { 12, 5, 3, 10, 18, 4, 9, 16} Lượt Lượt Lượt Lượt Lượt Lượt Lượt 12 3 3 3 5 4 4 4 12 12 5 5 10 10 10 10 9 9 18 18 18 18 18 10 10 10 4 12 12 12 12 12 9 9 10 18 18 16 16 16 16 16 16 16 16 18 Cấu trúc liệu giải thuật 139 4.1.2 Sắp xếp lựa chọn (Selection Sort) Procedure SELECTION-SORT(A,n) for i = to n-1 begin {Duyệt từ đỉnh} = i; {Chọn phần tử nhỏ nhất} for j = i+1 to n if A[j] < A[min] then = j ; {Đổi chổ phần tử i phần tử nhỏ nhất} T = A[i]; A[i] = A[min]; A[min] = T; end; End Cấu trúc liệu giải thuật 140 70 8/4/2020 4.1.2 Sắp xếp lựa chọn (Selection Sort) ❖ Thời gian thực thuật tốn: ▪ Trường hợp tốt nhất: • Dãy ban đầu xếp • phép đổi chỗ, thực n(n-1)/2 phép so sánh ▪ Trường hợp xấu nhất: • n-1 phép đổi chỗ, n(n-1)/2 phép so sánh ❖ Độ phức tạp thời gian trung bình: O(n2) Cấu trúc liệu giải thuật 141 4.1.3 Sắp xếp chèn (Insertion Sort) ❖Ý tưởng: ▪ Dãy cần chia thành phần: phần sắp, lại phần chưa ▪ Tại lượt, phần tử phần chưa “thêm” vào vị trí phần Cấu trúc liệu giải thuật 142 71 8/4/2020 4.1.3 Sắp xếp chèn (Insertion Sort) ❖ Ví dụ: xếp dãy sau theo thứ tự tăng dần: A = { 12, 5, 3, 10, 18, 4, 9, 16} Lượt Lượt Lượt Lượt Lượt Lượt Lượt 12 3 3 3 12 5 4 3 12 10 10 5 10 10 10 12 12 10 9 18 18 18 18 18 12 10 10 4 4 18 12 12 9 9 9 18 16 16 16 16 16 16 16 16 18 Cấu trúc liệu giải thuật 143 4.1.3 Sắp xếp chèn (Insertion Sort) Procedure INSERTION-SORT(A,n) for i := to n begin {Chọn phần tử phần chưa xếp} val := A[i]; j := i; {Tìm vị trí thích hợp đề chèn phần tử A[i] phần sắpchứa phần tử từ vị trí đến i-1} while ( j > 1) and (A[j-1] > val) begin A[j] := A[j-1]; j := j -1; end; {Chèn phần tử A[i] vào vị trí thích hợp} A[j] := val; end; End Cấu trúc liệu giải thuật 144 72 8/4/2020 4.1.3 Sắp xếp chèn (Insertion Sort) ❖ Sắp xếp chèn chỗ ổn định ❖ Thời gian thực thuật tốn: ▪ Trường hợp tốt nhất: • Dãy ban đầu xếp • phép đổi chỗ, thực (n-1) phép so sánh ▪ Trường hợp xấu nhất: • n(n-1)/2 phép so sánh đổi chỗ ❖ Độ phức tạp thời gian trung bình: O(n2) Cấu trúc liệu giải thuật 145 4.1.4 Sắp xếp bọt (Bubble Sort) ❖Ý tưởng: ▪ Dãy cần chia thành phần: phần sắp, cịn lại phần chưa ▪ Thơng qua phép đổi chỗ, lượt phần tử nhỏ phần chưa “đẩy dần” lên trước cuối nhập vào phần Cấu trúc liệu giải thuật 146 73 8/4/2020 4.1.4 Sắp xếp bọt (Bubble Sort) ❖ Ví dụ: xếp dãy sau theo thứ tự tăng dần: A = { 12, 5, 3, 10, 18, 4, 9, 16} Lượt Lượt Lượt Lượt Lượt Lượt Lượt 12 3 3 3 12 4 4 4 12 5 5 10 12 9 9 18 10 9 12 10 10 10 18 10 10 10 12 12 12 9 18 16 16 16 16 16 16 16 16 18 18 18 18 18 Cấu trúc liệu giải thuật 147 4.1.4 Sắp xếp bọt (Bubble Sort) Procedure BUBBLE-SORT(A,n) for i := to n-1 {Duyệt từ đáy} for j:= n downto i+1 {Kiểm tra phần tử kề cận nhau, ngược thứ tự đổi chỗ} ifA[j] < A[j-1] then begin X:= A[j]; A[j] := A[j-1]; A[j-1] := X; end end; Cấu trúc liệu giải thuật 148 74 8/4/2020 4.1.4 Sắp xếp bọt (Bubble Sort) ❖Thời gian thực thuật toán: ▪ Trường hợp tốt nhất: • Dãy ban đầu xếp • phép đổi chỗ, thực n(n-1)/2 phép so sánh ▪ Trường hợp xấu nhất: • n(n-1)/2 phép so sánh đổi chỗ ❖Độ phức tạp thời gian trung bình: O(n2) Cấu trúc liệu giải thuật 149 4.2 Một số phương pháp xếp cải tiến (tự học) 4.2.1 Sắp xếp nhanh (Quick Sort) 4.2.2 Sắp xếp vun đống (Heap Sort) 4.2.3 Đánh giá Cấu trúc liệu giải thuật 150 75 8/4/2020 4.2.1 Sắp xếp nhanh (Quick Sort) Function PARTITION-MID(A, left, right) {A mảng cần sắp, left số phần tử đầu, right số phần tử cuối Phần tử chốt phần tử đầu danh sách} i:=left ; j := right; pivot = [(left + right ) /2 ] {pivot số nguyên >= (left+right)/2} repeat while (A[i] < A[pivot]) i := i+1; while (A[j] > A[pivot]) j:= j-1; if i j Return j Cấu trúc liệu giải thuật 159 4.2.1 Sắp xếp nhanh (Quick Sort) ❖Sắp xếp nhanh chỗ không ổn định ❖Thời gian thực giải thuật ▪ Trường hợp tổng quát • T(0) = T(1) = c • Pha phân đoạn thực việc duyệt danh sách ban đầu lần → Thời gian thực O(n) • Trong giải thuật xuất lời gọi đệ qui: Giả sử sau phân đoạn, phần tử chốt vị trí p thì: T(n) = T(p-1) + T(n-p) + O(n) + O(1) Cấu trúc liệu giải thuật 160 80 8/4/2020 4.2.1 Sắp xếp nhanh (Quick Sort) ▪ Trường hợp xấu nhất: • Cơng thức đệ qui: T(n) = T(n-1) + O(n) + O(1) • Độ phức tạp giải thuật xếp nhanh O(n2) A vốn chốt chọn nút nhỏ ▪ Trường hợp hoàn hảo: • Phân đoạn cân T(n) = T(n/2) + n • Độ phức tạp trung bình giải thuật O(nlog2n) Cấu trúc liệu giải thuật 161 4.2.2 Sắp xếp vun đống (Heap Sort) ❖ Cấu trúc Đống: ▪ Đống nhị phân có hai tính chất • Là nhị phân hồn chỉnh • Có thứ tự : nút gắn với giá trị số tự nhiên, cho giá trị nút cha lớn giá trị nút (Max Heap) Cấu trúc liệu giải thuật 162 81 8/4/2020 4.2.2 Sắp xếp vun đống (Heap Sort) ▪ Đống lưu trữ máy tính dạng vector lưu trữ Cấu trúc liệu giải thuật 163 4.2.2 Sắp xếp vun đống (Heap Sort) ▪ Phép tạo đống • Dãy số cần coi dãy phần tử nhị phân hoàn chỉnh lưu trữ – Dãy số A: {31, 54, 21, 11, 79, 47, 28, 87, 69, 65, 51} – Vector lưu trữ Cấu trúc liệu giải thuật 164 82 8/4/2020 4.2.2 Sắp xếp vun đống (Heap Sort) ▪ Cây nhị phân hoàn chỉnh tương ứng Cấu trúc liệu giải thuật 165 4.2.2 Sắp xếp vun đống (Heap Sort) ▪ Hai thao tác cần thực • Khơi phục tính chất đống nhánh có gốc nút thứ i hai đống • Xây dựng đống tương đương với nhị phân hoàn chỉnh chưa phải đống – Với có gốc từ n / 2 xuống đến 1, khơi phục tính chất đống với Cấu trúc liệu giải thuật 166 83 8/4/2020 4.2.2 Sắp xếp vun đống (Heap Sort) Thực phép xử lý với nhị phân nút gốc có thứ tự Khơi phục tính chất đống cho Cấu trúc liệu giải thuật 167 4.2.2 Sắp xếp vun đống (Heap Sort) Procedure BUILD-HEAP(i,n) {Tạo đống có gốc nút có thứ tự i n nút ban đầu} VAL:= V[i]; {lưu giá trị nút gốc xét} j := 2*i; { j số thứ tự trái nút i} while j A[k] tìm nửa sau mảng cho Cấu trúc liệu giải thuật 185 4.3.3 Tìm kiếm nhị phân Function BINARY-SEARCH(A,l, r, key) If (l> r) return -1; m = (l+r) /2 ; If (A[m] = key ) then return m ; Else if (A[m] > key) then return BINARY-SEARCH(A,l,m-1,key); Else return BINARY-SEARCH(A, m+1, r, key); Cấu trúc liệu giải thuật 186 93 8/4/2020 4.3.3 Tìm kiếm nhị phân Function BINARY-SEARCH(A,n,key) l:=1 ; r := n ; { l, r số phần tử đầu phần tử cuối mảng tìm kiếm đó} while l A[m] then l:= m+1 else return m; end; { Khơng tìm thấy } return -1; Cấu trúc liệu giải thuật 187 4.3.4 Đánh giá ❖ Tìm kiếm dựa vào quan hệ giá trị phần tử mảng để định hướng trình tìm kiếm, áp dụng với dãy có thứ tự ❖ Tìm kiếm nhị phân tìm kiếm nhanh tìm kiếm ❖ Tuy nhiên áp dụng thuật giải nhị phân cần phải quan tâm đến chi phí cho việc xếp mảng Vì mảng thứ tự tìm kiếm nhị phân Cấu trúc liệu giải thuật 188 94 ... 4.2.1 Sắp xếp nhanh (Quick Sort) Cấu trúc liệu giải thuật 157 4.2.1 Sắp xếp nhanh (Quick Sort) Cấu trúc liệu giải thuật 158 79 8/4/2020 4.2.1 Sắp xếp nhanh (Quick Sort) Function PARTITION-MID(A,... số 95 vào vị trí dãy Cấu trúc liệu giải thuật 175 4.2.2 Sắp xếp vun đống (Heap Sort) ▪ Giai đoạn xếp Sau đổi chỗ lần V[1] V[6], vun thành đống cho có nút, số 66 vào vị trí dãy Cấu trúc liệu giải. .. ◼ Khóa tìm kiếm: Một phận phần tử tập mà giá trị sử dụng để so sánh tìm kiếm Cấu trúc liệu giải thuật 181 4.3.2 Tìm kiếm (Sequential Searching) ? ?Tìm kiếm ▪ Các phần tử tập đầu vào không xếp theo

Ngày đăng: 06/07/2022, 22:06

HÌNH ẢNH LIÊN QUAN

4.2.1 Sắp xếp nhanh (Quick Sort) - Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Một số giải thuật sắp xếp và tìm kiếm
4.2.1 Sắp xếp nhanh (Quick Sort) (Trang 13)

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

TÀI LIỆU LIÊN QUAN