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 - Trần Minh Thái (Trường Đại học Hồng Bàng )

30 18 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 30
Dung lượng 100,7 KB

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

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Giải thuật tìm kiếm cung cấp cho người học các kiến thức: Nhu cầu tìm kiếm, sắp xếp dữ liệu trong một hệ thống thông tin, các giải thuật tìm kiếm nội, tìm kiếm tuyến tính, tìm kiếm nhị phân,... Mời các bạn cùng tham khảo.

Trang 1

Chương 2.1 Giải thuật

tìm kiếm

Trần Minh Thái

Email: minhthai@huflit.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 3

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

Tìm kiếm: Có trong hầu hết trong các hệ thống thông tin

Muốn tìm kiếm nhanh và hiệu quả  dữ liệu

có thứ tự  sắp xếp

Trang 4

Vấn đề tìm kiếm

Dựa vào một phần thông tin được gọi là khoá

(key)  tìm một mẫu tin (record) chứa các

thông tin khác liên quan với khoá này

Có thể có nhiều mẫu tin hoặc không có mẫu tin nào chứa khoá cần tìm

Trang 5

Đánh giá giải thuật tìm kiếm

Tìm kiếm thường là tác vụ tốn nhiều thời gian trong một chương trình

Tổ chức cấu trúc dữ liệu và giải thuật cho việc tìm kiếm ảnh hưởng lớn đến hiệu suất hoạt động của chương trình

Thông số đo chủ yếu là số lần so sánh khoá cần tìm

Trang 6

Phân loại

Tìm kiếm nội và tìm kiếm ngoại

Dữ liệu lưu trên thiết bị lưu trữ ngoài như đĩa hay băng từ: tìm kiếm ngoại

Dữ liệu được lưu trữ trên bộ nhớ chính: tìm kiếm nội

Trang 7

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

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

Đặc tả:

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

Khai báo: int a[N];

Khóa cần tìm: int x;

Trang 8

Tìm tuần tự (Linear Search)

Ý tưởng

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 hết mảng

Trang 9

Đã tìm thấy tại

vị trí 5

Đã hết mảng

Trang 10

Giải thuật

Bước 1:

  i = 1;         // bắt đầu từ phần tử đầu tiên của dãy

Bước 2: So sánh a[i] với x, có 2 khả năng :

a[i] = x : Tìm thấy Dừng

a[i] != x :  Sang Bước 3

Bước 3:

 i = i+1;      // xét tiếp phần tử kế trong 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 2

Trang 11

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 12

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

Trang 13

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

Nếu có x thì không cần thiết

Có thể loại bỏ?

Trang 14

11

Trang 15

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 16

Q & A

Trang 17

Tìm kiếm nhị phân (Binary Search)

Ý tưởng

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

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

giữa của dãy hiện hành để quyết định phạm vi tìm kế tiếp

Trang 20

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 21

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

{ int left =0; right = N-1;

Trang 22

Bài tập

Cài đặt hàm tìm kiếm nhị phân bằng phương pháp đệ quy?

Trang 23

Q & A

Trang 24

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, int x);

Trang 26

void TaoMang(int a[], int N)

Trang 27

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

Trang 28

Bài tập áp dụng

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

Trang 29

Bài tập lý thuyết

LT1_1: Cho dãy số sau:

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

LT1_2: Xây dựng giải thuật tìm kiếm phần tử

có giá trị nhỏ nhất trong dãy số: Dùng mã tự

Trang 30

Q & A

Ngày đăng: 09/05/2021, 18:25

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