Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
88,48 KB
Nội dung
Chương 2.1 Giải thuật tìm kiếm Trần Minh Thái Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Mục tiêu Xác định vai trị tìm kiếm xếp hệ thống thông tin Nắm vững minh họa giải thuật tìm kiếm tuyến tính tìm kiếm nhị phân mảng chiều Cài đặt giải thuật tìm kiếm ngôn ngữ C/C++ Suy nghĩ ? Tại hầu hết phần mềm phải có chức tìm kiếm xếp, mối quan hệ tìm kiếm xếp? Nhu cầu tìm kiếm xếp Thao tác tìm kiếm sử dụng nhiều hệ lưu trữ quản lý liệu Do liệu lớn nên tìm giải thuật tìm kiếm nhanh chóng mối quan tâm hàng đầu Để đạt điều liệu phải tổ chức theo thứ tự việc tìm kiếm nhanh chóng hiệu hơn, nhu cầu xếp liệu lưu ý Tóm lại, bên cạnh giải thuật tìm kiếm giải thuật xếp liệu thiếu hệ quản lý thơng tin máy tính Các giải thuật tìm kiếm Có giải thuật thường áp dụng: Tìm tuyến tính tìm nhị phân Đặc tả sau: Tập liệu lưu trữ dãy số a1, a2, ,aN a a2 chọn cấu a3 trúc adữ … số an-1 để lưu trữ dãy nhớaNchính, có khai Giả sử liệu amảng báo: int a[N]; Khố cần tìm x, khai báo sau: int x; Tìm kiếm tuyến tính Ý tưởng Lần lượt so sánh x với phần tử thứ nhất, thứ hai, mảng a gặp phần tử cần tìm, tìm hết mảng mà khơng thấy x Minh họa tìm x =10 Minh họa tìm x =25 10 Đã tìm thấy Chưa hếttại 12 41 10 10 32 13 15 3 10 25 vịmảng trí Chưa hết mảng Đã hết mảng 12 41 10 32 13 15 10 Giải thuật Bước 1: i = 1; // phần tử dãy Bước 2: So sánh a[i] với x, có khả : a[i] = x : Tìm thấy Dừng a[i] != x : Sang Bước Bước 3: i = i+1; // xét tiếp phần tử kế mảng Nếu i >N: Hết mảng, không tìm thấy Dừng Ngược lại: Lặp lại Bước Ngun tắc cài đặt hàm tìm kiếm Nếu có xuất phần tử có giá trị x trả vị trí tìm Ngược lại trả -1 Cài đặt int LinearSearch(int a[], int N, int x) { int i=0; while ((i r: Kết thúc: Khơng tìm thấy m m 14 Giải thuật Bước 1: left = 1; right = N; //tìm kiếm tất phần tử Bước 2: mid = (left+right)/2; // lấy mốc so sánh So sánh a[mid] với x, có khả : a[mid] = x: Tìm thấy Dừng a[mid] > x: //tìm tiếp x dãy aleft amid -1 right =mid - 1; a[mid] < x: //tìm tiếp x dãy amid +1 aright left = mid + 1; Bước 3: Nếu left