Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 198 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
198
Dung lượng
3,31 MB
Nội dung
Tìm kieám &Saép xeáp
Tìm kieám &Saép xeáp
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 2
Tìm kiếm & Sắp xếp
Tìm kiếm & Sắp xếp
Mục tiêu:
Mục tiêu:
Giới thiệu một số thuật toán tìmkiếm
Giới thiệu một số thuật toán tìmkiếm
và sắpxếp nội.
và sắpxếp nội.
Phân tích, đánh giá độ phức tạp của
Phân tích, đánh giá độ phức tạp của
các giải thuật tìm kiếm, sắp xếp.
các giải thuật tìm kiếm, sắp xếp.
Nội dung:
Nội dung:
Nhu cầu tìmkiếmvàsắpxếp dữ liệu
Nhu cầu tìmkiếmvàsắpxếp dữ liệu
trong một hệ thống thông tin.
trong một hệ thống thông tin.
Các giải thuật tìmkiếm nội.
Các giải thuật tìmkiếm nội.
Các giải thuật sắpxếp nội.
Các giải thuật sắpxếp nội.
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 3
Nhu cầu tìmkiếmvàsắpxếp
Nhu cầu tìmkiếmvàsắpxếp
dữ liệu trong 1 hệ thống thông tin
dữ liệu trong 1 hệ thống thông tin
Trong hầu hết các hệ lưu trữ, quản lý
Trong hầu hết các hệ lưu trữ, quản lý
dữ liệu, thao tác tìmkiếm thường được
dữ liệu, thao tác tìmkiếm thường được
thực hiện nhất để khai thác thông tin.
thực hiện nhất để khai thác thông tin.
Do các hệ thống thông tin thường phải
Do các hệ thống thông tin thường phải
lưu trữ một khối lượng dữ liệu đáng
lưu trữ một khối lượng dữ liệu đáng
kể, nên việc xây dựng các giải thuật
kể, nên việc xây dựng các giải thuật
cho phép tìmkiếm nhanh sẽ có ý nghóa
cho phép tìmkiếm nhanh sẽ có ý nghóa
rất lớn.
rất lớn.
Nếu dữ liệu trong hệ thống đã được tổ
Nếu dữ liệu trong hệ thống đã được tổ
chức theo một trật tự nào đó, thì việc
chức theo một trật tự nào đó, thì việc
tìm kiếm sẽ tiến hành nhanh chóng và
tìm kiếm sẽ tiến hành nhanh chóng và
hiệu quả hơn
hiệu quả hơn
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 4
Nhu cầu tìmkiếmvàsắpxếp
Nhu cầu tìmkiếmvàsắpxếp
dữ liệu trong 1 hệ thống thông tin
dữ liệu trong 1 hệ thống thông tin
Có nhiều giải thuật tìmkiếmvàsắpxếp
Có nhiều giải thuật tìmkiếmvàsắpxếp
Mức độ hiệu quả của từng giải thuật phụ
Mức độ hiệu quả của từng giải thuật phụ
thuộc vào tính chất của cấu trúc dữ liệu
thuộc vào tính chất của cấu trúc dữ liệu
cụ thể mà nó tác động đến.
cụ thể mà nó tác động đến.
Dữ liệu được lưu trữ chủ yếu trong bộ nhớ
Dữ liệu được lưu trữ chủ yếu trong bộ nhớ
chính và trên bộ nhớ phụ, do đặc điểm
chính và trên bộ nhớ phụ, do đặc điểm
khác nhau của thiết bò lưu trữ, các thuật
khác nhau của thiết bò lưu trữ, các thuật
toán tìmkiếmvàsắpxếp được xây dựng
toán tìmkiếmvàsắpxếp được xây dựng
cho các cấu trúc lưu trữ trên bộ nhớ chính
cho các cấu trúc lưu trữ trên bộ nhớ chính
hoặc phụ cũng có những đặc thù khác nhau.
hoặc phụ cũng có những đặc thù khác nhau.
Chương này sẽ trình bày các thuật toán sắp
Chương này sẽ trình bày các thuật toán sắp
xếp vàtìmkiếm dữ liệu được lưu trữ trên
xếp vàtìmkiếm dữ liệu được lưu trữ trên
bộ nhớ chính - gọi là các giải thuật
bộ nhớ chính - gọi là các giải thuật
tìm
tìm
kiếm vàsắpxếp nội
kiếm vàsắpxếp nội
.
.
Các giải thuật
Các giải thuật
tìm kiếm nội
tìm kiếm nội
Tìm kiếm tuần tự
Tìm kiếm tuần tự
Tìm kiếm nhò phân
Tìm kiếm nhò phân
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 6
Các giải thuật tìmkiếm nội
Các giải thuật tìmkiếm nội
Bài toán: Tìm vò trí xuất hiện của phần
Bài toán: Tìm vò trí xuất hiện của phần
tử có giá trò x trên danh sách đặc a
tử có giá trò x trên danh sách đặc a
Tập dữ liệu được lưu trữ là dãy số
Tập dữ liệu được lưu trữ là dãy số
a
a
1
1
, a
, a
2
2
, ,a
, ,a
N
N
int
int
a[N];
a[N];
Khoá cần tìm là x
Khoá cần tìm là x
int
int
x;
x;
Tìm kieám tuaàn töï
Tìm kieám tuaàn töï
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 8
Tìm kiếm tuần tự
Tìm kiếm tuần tự
Bước 1: i = Vò trí đầu;
Bước 1: i = Vò trí đầu;
Bước 2: Nếu a[i] = x : Tìm thấy. Dừng,
Bước 2: Nếu a[i] = x : Tìm thấy. Dừng,
vò trí xuất hiện: i
vò trí xuất hiện: i
Bước 3 : i = Vò trí kế(i);// xét tiếp
Bước 3 : i = Vò trí kế(i);// xét tiếp
phần tử kế trong mảng
phần tử kế trong mảng
Bước 4: Nếu i >Vò trí cuối: //Hết mảng
Bước 4: Nếu i >Vò trí cuối: //Hết mảng
Không tìm thấy. Dừng.
Không tìm thấy. Dừng.
Ngược lại: Lặp lại Bước 2.
Ngược lại: Lặp lại Bước 2.
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 9
Tìm kiếm tuần tự
Tìm kiếm tuần tự
Ví dụ: Cho dãy số a
Ví dụ: Cho dãy số a
12
12
2
2
8
8
5
5
1
1
6
6
4
4
15
15
Giá trò cần tìm: 8
Giá trò cần tìm: 8
i = 1
i = 1
Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 10
Tìm kiếm tuần tự
Tìm kiếm tuần tự
i = 2
i = 2
i = 3
i = 3
[...]... liệu - TìmkiếmvàSắpxếp 23 Tìmkiếm nhò phân Đánh giá giải thuật: Giải thuật tìm nhò phân có độ phức tạp tính toán cấp logn: T(n) = O(log 2 n) Cấu trúc Dữ liệu - Tìm kiếmvàSắpxếp 24 Tìmkiếm nhò phân Nhận xét: Giải thuật tìm nhò phân dựa vào quan hệ giá trò của các phần tử mảng để đònh hướng trong quá trình tìm kiếm, do vậy chỉ áp dụng được cho những dãy đã có thứ tự Giải thuật tìm nhò... hiện: mid Bước 23: Nếu a[mid] > x: / /tìm x trong dãy con aleft amid -1 right = mid - 1; Ngược lại / /tìm x trong dãy con amid +1 aright left = mid + 1; //Hết lặp Bước 3: Dừng, không tìm thấy Cấu trúc Dữ liệu - Tìm kiếmvàSắpxếp 19 Tìmkiếm nhò phân Ví dụ: Cho dãy số a gồm 8 phần tử: 1 2 4 5 6 8 12 15 Giá trò cần tìm là 8 Cấu trúc Dữ liệu - Tìm kiếmvàSắpxếp 20 Tìmkiếm nhò phân left = 1, right... một trong hai giải thuật tìmkiếm trên sao cho có lợi nhất Cấu trúc Dữ liệu - Tìm kiếmvàSắpxếp 26 Các giải thuật Sắpxếp nội Đònh nghóa bài toán sắpxếp Sắpxếp là quá trình xử lý một danh sách các phần tử (hoặc các mẫu tin) để đặt chúng theo một thứ tự thỏa mãn một tiêu chuẩn nào đó dựa trên nội dung thông tin lưu giữ tại mỗi phần tử Cấu trúc Dữ liệu - Tìm kiếmvàSắpxếp 28 Khái niệm nghòch... giữa của dãy tìmkiếm hiện hành, dựa vào kết quả so sánh này để quyết đònh giới hạn dãy tìmkiếm ở bước kế tiếp là nửa trên hay nửa dưới của dãy tìmkiếm hiện hành Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 18 Tìmkiếm nhò phân Bước 1: left = VTĐ; right = VTC; Bước 2: Trong khi left ≤ right lặp: //đoạn tìmkiếm chưa rỗng Bước 21: mid = (left+right)/2; // lấy mốc so sánh Bước 22: Nếu a[mid] = x: / /Tìm thấy... dựa vào vò trí tìm thấy để kết luận Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 12 Tìmkiếm tuần tự int LinearSearch(int a[], int N, int x) { // mảng gồm N phần tử từ a[0] a[N-1] a[N] = x; // thêm lính canh vào cuối dãy for (int i=0; (a[i]!=x); i++); if (i ai thì x chỉ có thể xuất hiện trong đoạn [ai+1 ,aN] của dãy Nếu x < ai thì x chỉ có thể xuất hiện trong đoạn [a1 ,ai-1] của dãy Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 17 Tìmkiếm nhò phân Ý tưởng... so với giải thuật tìm tuần tự do Tnhò phân (n) = O(log 2 n) < Ttuần tự (n) = O(n) Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 25 Tìmkiếm nhò phân Nhận xét: Khi muốn áp dụng giải thuật tìm nhò phân cần phải xét đến thời gian sắpxếp dãy số để thỏa điều kiện dãy số có thứ tự Thời gian này không nhỏ, và khi dãy số biến động cần phải tiến hành sắpxếp lại => khuyết điểm chính cho giải thuật tìm nhò phân Cần... nhò phân left = 1, right = 8, mid = 4 Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 21 Tìmkiếm nhò phân left = 5, right = 8, mid = 6 Cấu trúc Dữ liệu - TìmkiếmvàSắpxếp 22 Tìmkiếm nhò phân int BinarySearch(int a[],int N,int x ) { int left =0, right = N-1, midle; while (left . giải thuật tìm kiếm, sắp xếp.
các giải thuật tìm kiếm, sắp xếp.
Nội dung:
Nội dung:
Nhu cầu tìm kiếm và sắp xếp dữ liệu
Nhu cầu tìm kiếm và sắp xếp dữ liệu. thuật
tìm
tìm
kiếm và sắp xếp nội
kiếm và sắp xếp nội
.
.
Các giải thuật
Các giải thuật
tìm kiếm nội
tìm kiếm nội
Tìm kiếm tuần tự
Tìm kiếm