1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu và giải thuật chương 2 GV nguyễn minh thành

23 270 1

Đ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 23
Dung lượng 293,82 KB

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

Nội dung

Tìm kiếm nhị phân 2 Nguyễn Minh Thành...  Tìm kiếm hồ sơ, tập tin Tìm kiếm 1 người trong một danh sách... Tìm Kiếm Tuyến Tính Có 2 loại tìm kiếm tuyến tính :  Vét cạn exhaustive  Dù

Trang 1

Giảng viên : Nguyễn Minh Thành Email : thanhnm@itc.edu.vn

Chương 2 (1) : Giải Thuật Tìm Kiếm

Trang 2

Nội Dung

I. Giới thiệu

II. Giải thuật tìm kiếm

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

IV. Tìm kiếm nhị phân

2 Nguyễn Minh Thành

Trang 3

 Tìm kiếm hồ sơ, tập tin

 Tìm kiếm 1 người trong một danh sách

Trang 4

II Giải thuật tìm kiếm

Trang 5

III Tìm Kiếm Tuyến Tính

 Có 2 loại tìm kiếm tuyến tính :

 Vét cạn (exhaustive)

 Dùng lính canh (sentinel)

Trang 6

III Tìm Kiếm Tuyến Tính – Vét Cạn

Trang 7

III Tìm Kiếm Tuyến Tính – Vét Cạn

Trang 8

III Tìm Kiếm Tuyến Tính – Vét Cạn

Trang 9

III Tìm Kiếm Tuyến Tính – Vét Cạn

 Phép so sánh là phép toán sơ cấp được dùng trong thuật toán->

số lượng các phép so sánh sẽ là thước đo độ phức tạp của thuậttoán

 Mỗi vòng lặp có 2 điều kiện cần kiểm tra:

 Kiểm tra cuối mảng

 Kiểm tra phần tử hiện tại có bằng x hay không?

 Trường hợp xấu nhất nằm ở cuối mảng A

 Ta có 2*n+1 số phép so sánh

 => Số phép so sánh tăng/giảm tuyến tính theo số phần tử

 Vậy độ phức tạp của thuật toán là : O(n)

Trang 10

III Tìm Kiếm Tuyến Tính – Lính Căn

10 Nguyễn Minh Thành

 Trong thuật toán vét cạn, có 2 điều kiện được kiểm tra:

 Có thể bỏ việc kiểm tra điều kiện cuối mảng bằng cách dùng

Trang 11

III Tìm Kiếm Tuyến Tính – Lính Căn

 Thuật toán lính căn

 Tìm tuần tự từ đầu mảng cho đến khi tìm thấy x (chắc chắn sẽtìm thấy x)

 Nếu x được tìm thấy tại vị trí lính canh thì x không thuộc mảngA

 Ngược lại trả về vị trí của x trong mảng A

Trang 12

III Tìm Kiếm Tuyến Tính – Lính Căn

12 Nguyễn Minh Thành

 Cài đặt 1 :

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

a[N] = x; // thêm phần tử thứ N+1 while (a[i]!=x )

Trang 13

III Tìm Kiếm Tuyến Tính – Lính Căn

Trang 14

III Tìm Kiếm Tuyến Tính – Lính Căn

14 Nguyễn Minh Thành

 Số phép so sánh trong trường hợp xấu nhất : n+2

 Vậy độ phức tạp của thuật toán là O(n)

 Tuy nhiên, thực nghiệm cho thấy trong trường hợp n lớn, thời gian tìm kiếm giảm khi dùng phương pháp lính canh

 Với n=15000: nhanh hơn khoảng 20% (0.22s so với 0.28s)

Trang 15

IV Tìm Kiếm Nhị Phân

 Khi một mảng đã được sắp thứ tự, tận dụng điều này ta có thể giảm một số thao tác cho thuật toán tìm kiếm

 Thuật toán tìm kiếm nhị phân

Trang 16

IV Tìm Kiếm Nhị Phân

Trang 17

IV Tìm Kiếm Nhị Phân

Trang 18

IV Tìm Kiếm Nhị Phân

Trang 19

IV Tìm Kiếm Nhị Phân

 Các bước của giải thuật

Bước 1: left = 1; right = N; // tìm kiếm trên 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 20

IV Tìm Kiếm Nhị Phân

}while (left <= right);

return -1; // Tìm hết dãy mà không có x }

Trang 21

IV Tìm Kiếm Nhị Phân

Trang 22

IV Tìm Kiếm Nhị Phân

Trang 23

Hỏi Đáp

Ngày đăng: 03/12/2015, 02:15

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm