1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng cấu trúc dữ liệu và giải thuật (data structures and algorithms) chương 7 gv ngô công thắng

13 0 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

28/04/22 Chương 7: Giải thuật tìm kiếm Bài tốn tìm kiếm * Bài tốn tìm kiếm: Cho dãy khóa k số ngun có n phần tử Tìm khóa có giá trị x cho trước * Gọi x khố tìm kiếm hay giá trị tìm kiếm Cơng việc tìm kiếm hồn thành có tình sau xảy ra: 1- Tìm khóa có giá trị x 2- Khơng tìm khóa có giá trị x Sau phép tìm kiếm khơng thấy, có u cầu bổ sung khố x vào dãy khóa giải thuật gọi “Tìm kiếm có bổ sung” 28/04/22 Tìm kiếm (Sequential searching) 2.1 Phương pháp Đây giải thuật đơn giản, cổ điển Ý tưởng giải thuật: Bắt đầu từ khóa thứ nhất, so sánh khố tìm kiếm x với khóa dãy khóa tìm thấy hết dãy khóa mà chưa thấy * Giải thuật: Cho dãy khố k có n phần tử lưu trữ mảng chiều k có n nhớ với số từ đến n Tìm khố có giá trị x, tìm thấy trả thứ tự khố, khơng tìm thấy trả Minh họa ý tưởng k 10 n=7 x=5 28/04/22 Function sequenceSearch(k,n,x) { Khởi tạo } i:=1; k[n+1]:=x; {Tìm kiếm dãy} While k[i] x Do i:=i+1; { Trả kết tìm kiếm } If i=n+1 then Return(0) Esle Return(i); Return 28/04/22 Tìm kiếm nhị phân mảng 3.1 Phương pháp • Phương pháp tìm kiếm thực dãy khóa xếp tăng dần: - Điều kiện: dãy khóa mảng xếp tăng dần - Tương tự tra tìm từ từ điển danh bạ điện thoại Chỉ khác tra cứu ta chọn từ ngẫu nhiên, cịn tìm kiếm nhị phân ln chọn khố “ở giữa” dãy khố - Giả sử có dãy khoá kL, , kR xếp tăng dần, có khố km với m=(L+R) div + Tìm kiếm kết thúc nếu: x=km + Nếu xkm tìm kiếm thực tiếp với km+1, , kR với cách tương tự Qúa trình tìm kiếm kết thúc tìm thấy khố mong muốn dãy khố rỗng (khơng tìm thấy ) 28/04/22 Minh họa ý tưởng k 10 17 24 31 n=7 x=3 m = (1+7) div = k[m] = 10 * Giải thuật: Cho dãy k gồm n khoá, xếp theo thứ tự tăng dần Tìm khố có giá trị =x Nếu tìm thấy trả vị trí khóa, khơng tìm thấy trả Dùng biến L, R, m: số đầu, số cuối, số dãy khoá k 10 28/04/22 Function binarySearch(k,n,x) {Khởi tạo} L := 1; R := n; {Tìm kiếm} While L k[m] then L := m+1 Else Return (m); End; {Khơng tìm thấy} Return (0) 11 * Giải thuật viết dạng đệ quy sau: L, r số đầu, số cuối dãy K, biến nguyên Loc để đưa số ứng với khoá cần tìm, khơng tìm thấy Loc =0 Function binarySearch(L,R,x) If L>R then Loc:=0 Else begin m:=(L+R) div 2; If xk[m] then Loc:=binarySearch(m+1,R,x) Else Loc:=m; end; Return(Loc) 12 28/04/22 3.2 Đánh giá Phép tính tích cực phép so sánh L

Ngày đăng: 16/06/2023, 16:19

Xem thêm:

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

TÀI LIỆU LIÊN QUAN