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

Cấu trúc dữ liệu di động chuong 2c

32 92 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 32
Dung lượng 411,53 KB

Nội dung

ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHƯƠNG II TÌM KIẾM VÀ SẮP XẾP Nguyễn Trọng Chỉnh chinhnt@uit.edu.vn TÌM KIẾM VÀ SẮP XẾP NHU CẦU TÌM KIẾM VÀ SẮP XẾP GIẢI THUẬT TÌM KIẾM GIẢI THUẬT SẮP XẾP TÌM KIẾM VÀ SẮP XẾP NHU CẦU TÌM KIẾM VÀ SẮP XẾP - Tìm kiếm để tra cứu thông tin Ví dụ: tra từ điển, xem thông tin hàng hóa, tìm kiếm tài liệu, - Tìm kiếm để giải vấn đề Ví dụ: suy diễn tự động - Việc tìm kiếm có hiệu tập hợp có thứ tự GIẢI THUẬT TÌM KIẾM KHÁI NIỆM TÌM KIẾM TUYẾN TÍNH TÌM KIẾM NHỊ PHÂN PHẦN TỬ CẦM CANH GIẢI THUẬT TÌM KIẾM KHÁI NIỆM Tìm kiếm thao tác duyệt toàn tập hợp để xác định phần tử tập hợp thỏa tính chất b Ví dụ: a 1 b b GIẢI THUẬT TÌM KIẾM KHÁI NIỆM Khóa trường cấu trúc sử dụng để tính toán trình tìm kiếm xếp Ví dụ 1: giả sử có cấu trúc struct MayTinh { int maso; char tenmay[20]; int dongia; }; Trường dongia gọi khóa dùng để tính toán tìm kiếm xếp GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH (Linear Search) Tìm kiếm tuyến tính tìm kiếm giá trị khóa x tập hợp chưa có thứ tự cách duyệt phần tử tập hợp để xác định phần tử có giá trị khóa x • Ví dụ 2: tìm phần tử có giá trị tập hợp {1, 2, 9, 4, 3, 5, 7} GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH • Giải thuật: Giả sử n phần tử tập hợp A đánh số thứ tự từ đến n-1, tìm phần tử có giá trị khóa x - Bước 1: i  - Bước 2: Nếu i < n qua bước 3, ngược lại qua bước - Bước 3: Nếu A[i] == x qua bước - Bước 4: i  i + qua bước - Bước 5: Nếu i < n tìm thấy, ngược lại không tìm thấy - Bước 6: Kết thúc GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH Lưu đồ: Bắt đầu i0 i x rm-1 lm+1 20 GIẢI THUẬT TÌM KIẾM TÌM KIẾM NHỊ PHÂN l=0 m=3 r=6 x=3 l=0 m=1 r=2 l=2 m=2 r=2 5 x=3 4 A[m] = = x x=3 21 GIẢI THUẬT TÌM KIẾM TÌM KIẾM NHỊ PHÂN • Cài đặt int BinarySearch(int *A, int n, int x) { int l = 0, r = n-1, m; { m = (l + r) / 2; if (x == A[m]) return m; // Tìm thấy else if (x < A[m]) r = m - 1; else l = m + 1; }while (l

Ngày đăng: 08/09/2017, 15:38