1. Trang chủ
  2. » Tất cả

Tìm kiếm &Sắp xếp

27 0 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

Tìm kiếm &Sắp xếp CácCác giảigiải thuậtthuật tìmtìm kiếmkiếm nộinội TìmTìm kiếmkiếm tuyến tínhtuyến tính TìmTìm kiếmkiếm nhịnhị phânphân Caáu truùc Döõ lieäu Tìm kieám vaø Saép xeáp 2  Tìm kieám la[.]

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 Nhu cầu tìm kiếm xếp liệu hệ thống thông tin   - Tìm kiếm thao tác thường thực Dữ liệu xếp => tìm nhanh => Vấn đề: - Tìm kiếm nhanh - Sắp xếp nhanh Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Các giải thuật tìm kiếm nội Bài toán: - Chọn cấu trúc liệu mảng (a) để lưu trữ dãy số a 1, a2 ,…,an - Tìm số nguyên x mảng a Có giải thuật tìm kiếm: - Tìm kiếm tuyến tính - Tìm kiếm nhị phân Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính Tìm (tìm tuyến tính)  Ý tưởng: Thuật toán tiến hành so sánh x với phần tử thứ nhất, thứ hai,… mảng a gặp phần tử có khóa cần tìm, tìm hết mảng mà không thấy x Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính   Bước 1: i = Vị trí đầu; Bước 2: Nếu a[i] = x : Tìm thấy Dừng, vị trí xuất hiện: i  Bước : i = Vị trí kế(i);// xét tiếp phần tử kế mảng  Bước 4: Nếu i >Vị trí cuối: //Hết mảng Khơng tìm thấy Dừng Ngược lại: Lặp lại Bước Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính (sequential search) Vị trí = Khóa tìm 7 13 21 15 Tìm thành cơng Số lần so sánh: Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính (Không tìm thấy) Khóa tìm 7 13 21 15 Khơng tìm thấy Số lần so sánh: Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính int LinearSearch(int a[], int n, int x) { int i=0; while(i x: //tìm x dãy aleft amid -1 right = mid - 1; Ngược lại //tìm x dãy amid +1 aright left = mid + 1; //Hết lặp Bước 3: Dừng, khơng tìm thấy Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp 17 Ví dụ: Tìm nhị phân position = 10 Khóa cần tìm khơng nhỏ lớn hơn Target key 10 12 13 15 18 21 24 bottom middle top return success Số lần so sánh: Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp 18 Tìm kiếm nhị phân int BinarySearch(int a[],int n,int x ) { int left =0, right = n-1, mid; while (left tìm nhanh => Vấn đề: - Tìm kiếm nhanh - Sắp xếp nhanh Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Các giải... sánh: Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính (Không tìm thấy) Khóa tìm 7 13 21 15 Khơng tìm thấy Số lần so sánh: Cấu trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính int LinearSearch(int... trúc Dữ liệu - Tìm kiếm Sắp xếp Tìm kiếm tuyến tính Tìm (tìm tuyến tính)  Ý tưởng: Thuật toán tiến hành so sánh x với phần tử thứ nhất, thứ hai,… mảng a gặp phần tử có khóa cần tìm, tìm hết mảng

Ngày đăng: 31/12/2022, 14:08

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w