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

Bài giảng cấu trúc dữ liệu và giải thuật chương 2 tìm kiếm và sắp xếp trên mảng 1 chiều phần 1

32 502 2

Đ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 32
Dung lượng 175,04 KB

Nội dung

Cài đặt được giải thuật tìm kiếm bằng ngôn ngữ C/C++... 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ó

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

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 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ả:

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 6

Tìm kiếm tuyến tính (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 7

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

Minh họa tìm x =10

Minh họa tìm x =25

Chưa hết mảng

Đã tìm thấy tại

vị trí 5

Đã hết mảng

Trang 8

Giải thuật

Bước 1:

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

Trang 9

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 10

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

Trang 11

11

Trang 12

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 13

Q & A

Trang 14

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 17

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 19

Q & A

Trang 20

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 22

void TaoMang(int a[], int N)

Trang 23

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

Trang 24

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 25

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ự nhiên, mã giả và lưu đồ

Trang 26

Bài tập lý thuyết – Hướng dẫn

LT1_1: Tìm x = 6

i=1 (a[i]=3)  x Tăng vị trí i

i=2 (a[i]=4)  x Tăng vị trí i

i=3 (a[i]=6) = x Dừng, trả về vị trí i (3)

Tìm x theo phương pháp tuyến tính

Trang 27

Bài tập lý thuyết – Hướng dẫn

Trang 28

Q & A

Trang 29

Bài tập lý thuyết – Hướng dẫn LT1_2

Trang 30

Bài tập lý thuyết – Hướng dẫn LT1_2

Trang 31

Bài tập lý thuyết – Hướng dẫn LT1_2

Trang 32

Q & A

Ngày đăng: 04/09/2015, 15:14

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w