Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
2,82 MB
Nội dung
Chương 2.1 Giải thuật tìm kiếm *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++ ? Hãy liệt kê phần mềm máy tính có dùng chức 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ó giải thuật thường áp dụng: Tìm tuyến tính tìm nhị phân *Để đơn giản cho việc minh họa, ta đặc tả sau: a a a a a … a a n-1 N *Tập liệu lưu trữ dãy số a1, a2, ,aN *Giả sử chọn cấu trúc liệu mảng để lưu trữ dãy số nhớ chính, có khai báo: int a[N]; *Khố cần tìm x, khai báo sau: int x; *Ý tưởng Tiến hành so sánh x với phần tử thứ nhất, thứ hai, mảng a gặp phần tử có khóa cần tìm, tìm hết mảng mà khơng thấy x *Minh họa tìm x =10 10 12 41 10 32 13 15 3 Chưa Đã tìm hết thấy mảng vị trí 10 *Minh họa tìm x =25 25 Đã hết Chưa hết mảng 12 41 10 32 13 15 3 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 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 13 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 //tìm tiếp x dãy aleft amid -1 a[mid] > x: right =mid - 1; //tìm tiếp x dãy amid +1 aright a[mid] < x: left = mid + 1; Bước 3: Nếu left