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

Chương 2.1. Giải thuật tìm kiếm

22 81 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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 88,48 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhu cầu tìm kiếm và sắp xếp Thao tác tìm kiếm được sử dụng nhiều nhất trong các hệ lưu trữ và quản lý dữ liệu.. Để đạt được điều này dữ liệu phải được tổ chức theo một thứ tự nào đó thì

Trang 1

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

Trang 2

Cài đặt được giải thuật tìm kiếm bằng ngôn ngữ C/C++

Trang 4

Nhu cầu tìm kiếm và sắp xếp

 Thao tác tìm kiếm được sử dụng nhiều nhất trong các hệ lưu trữ và quản lý dữ liệu.

 Do dữ liệu lớn nên tìm ra giải thuật tìm kiếm nhanh chóng là mối quan tâm hàng đầu Để đạt được điều này dữ liệu phải được tổ chức theo một thứ tự nào đó thì việc tìm kiếm sẽ nhanh chóng và hiệu quả hơn, vì vậy nhu cầu sắp xếp dữ liệu cũng được lưu ý.

 Tóm lại, bên cạnh những giải thuật tìm kiếm thì các giải thuật sắp xếp dữ liệu không thể thiếu trong hệ quản lý thông tin trên máy tính

Trang 5

Các giải thuật tìm kiếm

Có 2 giải thuật thường được áp dụng: Tìm tuyến tính và tìm nhị phân

Đặc tả như sau:

Tập dữ liệu được lưu trữ là dãy số a 1 , a 2 , ,a N

 Giả sử chọn cấu trúc dữ liệu mảng để lưu trữ dãy

số này trong bộ nhớ chính, có khai báo: int a[N];

Khoá cần tìm là x, được khai báo như sau: int x;

Trang 6

Tìm kiếm tuyến tính

Lần lượt so sánh x với phần tử thứ nhất, thứ hai, của mảng a cho đến khi gặp được phần tử cần tìm, hoặc đã tìm hết mảng mà không thấy x

Chưa hết mảng

Đã tìm thấy tại

vị trí 5

Đã hết mảng

Trang 8

Nguyên tắc cài đặt hàm tìm kiếm

Nếu có xuất hiện phần tử có giá trị x thì trả

về vị trí tìm được

Ngược lại thì trả về -1

Trang 9

 return i; //a[i] là phần tử có khoá x }

Trang 10

11

Trang 11

return i;  // tìm thấy x tại vị trí i  } 

Độ phức tạp tính toán cấp n: T(n)=O(n)

Trang 12

Tìm kiếm nhị phân

Ý tưởng

Áp dụng đối với những dãy số đã có thứ tự

Tại mỗi bước tiến hành so sánh x với phần tử

nằm ở vị trí giữa của dãy tìm kiếm hiện hành, dựa vào kết quả so sánh này để quyết định phạm vi tìm kiếm ở bước kế tiếp

Trang 15

Giải thuật

Bước 1: left = 1; right = N; //tìm kiếm tất cả các 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ó 3 khả năng :

Trang 17

Code minh họa

#include <iostream.h>

#include<stdlib.h>

#include<time.h>

#define MAX 1000

void TaoMang(int a[], int N);

void XuatMang(int a[], int N);

int LinearSearch(int a[], int N);

Trang 19

void TaoMang(int a[], int N)

Trang 20

int LinearSearch(int a[], int N, int x)

Trang 21

Bài tập lý thuyết

Cho biết vị trí tìm thấy và số lần so sánh để tìm được phần tử có giá trị x = 6 khi áp dụng giải thuật tìm kiếm: tuyến tính và nhị phân

có giá trị nhỏ nhất trong dãy số: Dùng mã tự nhiên, mã giả và lưu đồ

Trang 22

Bài tập viết chương trình

Viết chương trình tự động phát sinh ra mảng có giá trị ngẫu nhiên có thứ tự tăng dần; nhập vào giá trị cần tìm x; in ra vị trí xuất hiện của x

(nếu  có)  và số lần so sánh với mỗi phương

pháp tìm kiếm: tuyến tính và nhị phân

Ngày đăng: 05/09/2019, 12:54

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w