Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm và sắp xếp - Đậu Ngọc Hà Dương có nội dung trình bày về tìm kiếm tuần tự và tìm kiếm nhị phân; sắp xếp bubble sort, selection sort, insert sort, quick sort,... Mời các bạn cùng tham khảo!
1 TÌM KIẾM & SẮP XẾP Bài giảng Cấu trúc liệu Giải thuật Nội d dung Tì kiếm Tìm kiế Tuần tự Nhị phân Sắp xếp Bubble sort Selection sort Insert sort Quick sort Tìm kiếm Tìm kiếm: duyệt danh sách lấy phần tử thoả tiêu chuẩn cho trước Là thao tác phổ biến máy tính: Tìm mẫu tin sở liệu Tìm kiếm thơng tin Internet… Khảo sát việc tìm kiếm mảng/danh sách Tìm kiếm Giải thuật Input: put: Mảng A gồm n phần tử Giá trị x cần tìm Trả về: Vị trí phần tử x A –1 x không xuất Thao tác bản: So sánh Tìm kiếm Giải thuật Giải thuật: Lần lượt so sánh x với phần tử mảng A gặp phần tử cần tìm, hết mảng Ví dụ: A = {1, 25, 6, 5, 2, 37, 40}, x = x = 25 37 40 37 40 37 40 x = 25 x = 25 Dừng Tìm kiếm Đánh giá Đánh giá (thao tác so sánh): Tốt nhất: O(1) Xấu nhất: O(n) Trung bình: Giả Hiếm xảy Tại sao? sử liệu phân bố đều, xác suất bắt gặp x vị trí Mỗi vòng lặp thực thao tác so sánh Tại sao? Số thao tác = 2*(1 + + … + n) = n + Độ phức tạp: O(n) Tìm kiếm Phần tử lính canh Mỗi vòng lặp cần thao tác so sánh: Kiểm tra hết mảng Kiểm tra phần tử có x Phần tử lính canh: đặt giá trị x vào cuối mảng ⇒ khơng cần kiểm tra điều kiện hết mảng Ví dụ: A = {1, 25, 5, 2, 37}, x = 25 37 Trả về: ề: n nế khơng tìm thấ thấy Tìm kiếm nhịị phân p Khi mảng gồm phần tử sắp, tận dụng điều kiện để giảm số thao tác Ý tưởng: Xét phần tử A[m] Nếu A[m] = x, trả m Nếu A[m] > x, x tìm phần tử bên trái m Nếu A[m] < x, tìm phần tử bên trái m Tìm kiếm nhị phân Ví dụ minh hoạ A = {2, {2 3, 6, 7, 10 10, 16, 16 18}, 18} x = 16 [0] 10 16 18 [1] [2] [3] [4] [5] [6] [4] [5] [6] 10 16 18 Tìm kiếm nhị phân Chương trình 10 int BinarySearch(int a[], int n, int x) { int l = 0, r = n-1; while ( (l x) Số lần lặp pos { a[pos+1]=a[pos]; pos ; } a[pos+1] = x; } } 44 Insertion Sort Đánh giá So sánh: Tốt nhất: n −1 ∑ = ( n − 1) i =1 n −1 Xấu nhất: ∑ i = n ( n − 1) i =1 Gán: Tốt n −1 nhất: ∑ = 3((n − 1)) i=1 n −1 Xấu nhất: ∑ i =1 n ( n − 1) (3 + i ) = 3( n − 1) + Quick sort 45 Các giải thuật Bubble sort sort, Selection sort, sort Insertion sort: Dễ hiểu,, dễ cài đặt ặ Hiệu thấp: O(n2) Các giải thuật xếp dựa so sánh: độ phức tạp ≥ n × log2n Quick Qu c so sort (C A R Hoare, o e, 1962) 96 ) có thểể đạt đạ độ phức tạp 46 Quick Sort Ý tưởng Dựa việc phân hoạch dãy ban đầu thành phần: Dãy y 1: a0, a1, …,, có ggiá trịị nhỏ x Dãy 2: aj, …, an-1 có giá trị lớn x Dãyy ban đầu ợ pphân thành pphần: akx k = …i k = i+1 … j k = jj+1, … n-1 Phần có thứ tự Phần 1, 3: cần thứ tự, tiến hành phân hoạch dãy theo h cách h phân hâ hoạch h h dãy dã ban b đầu đầ (chia ( hi để trị) ị) 47 Quick Sort Giải thuật Giải G ả tthuật uật p phân â hoạch oạc tthành dãy co con:: Chọn phần tử a[k] dãy làm giá trị mốc, ≤ k ≤ r-1 x=a[k], i = 0, j = r-1 Thường chọn phần tử dãy: k = (l+r)/2 Phát hiệu chỉnh cặp phần tử a[i], a[j] sai vị trí Trong 2.1 T (a[i] ( [i] < x), ) tăng tă i i 2.2 Trong (a[j] >x), giảm j 2.3 Nếu ii