Các giải thuật tìm kiếm
lượt xem 54
download
Tham khảo tài liệu 'các giải thuật tìm kiếm', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Các giải thuật tìm kiếm
- CÁC GIẢI THUẬT TÌM KIẾM 1
- 2. 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. Để đơn giản cho việc minh họa, ta đặc tả như sau: a1 a2 a3 a4 a5 … an-1 aN Tập dữ liệu được lưu trữ là dãy số a , a , ... ,a . Giả sử chọn cấu trúc dữ liệu mảng để lưu trữ dãy số này trong bộ nhớ chính, có khai báo: int a[N]; Khoá cần tìm là x, được khai báo như sau: int x; 2
- 3. Tìm kiếm tuyến tính Ý tưởng Tiến hành so sánh x lần lượt 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ó khóa cần tìm, hoặc đã tìm hết mảng mà không thấy x. Minh họa tìm x =10 Chưa Đã tìm 10 thấy t ại hế 7 5 12 41 10 32 13 9 15 3 vị ảng m trí 5 1 2 3 4 5 6 7 8 9 10 Minh họa tìm x =25 Chưa Đã hết hết 25 mảng mảng 3 7 5 12 41 10 32 13 9 15 3 1 2 3 4 5 6 7 8 9 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 4 Ngược lại: Lặp lại Bước 2.
- Cài đặt int LinearSearch(int a[], int N, int x) { int i=0; while ((i
- Cai tiên (dung linh canh) giup giam bớt môt ̉ ́ ̀ ́ ́ ̉ ̣ ́ ́ phep so sanh Minh họa tìm x =10 10 10 7 5 12 41 10 32 13 9 15 3 Minh 2họa tìm 1 3 x4= 255 6 7 8 9 10 25 25 7 5 12 41 10 32 13 9 15 3 25 1 2 3 4 5 6 7 8 9 10 11 6
- Giải thuật Bước 1: i = 1; a[N+1] = 1; // phần tử “lính canh” Bước 2: So sánh a[i] với x, có 2 khả năng : a[i] = x : sang bước 3 a[i] != x : i = i+ 1; Bước 3: Nếu i ≤ N : tìm thấy x tại vị trí i. Ngược lại: không tìm thấy x trong dãy. 7
- Cài đặt int LinearSearch2(int a[],int N,int x) { int i=0; // mảng gồm N phần tử từ a[0]..a[N-1] a[N] = x; // thêm phần tử thứ N+1 while (a[i]!=x ) i++; if (i==N) // tìm hết mảng nhưng không có x return -1; else // tìm thấy x tại vị trí i return i; } giá giải thuật Ðánh 8 Độ phức tạp tính toán cấp n: T(n)=O(n)
- 4. Tìm kiếm nhị phân Ý tưởng Áp dụng đối với những dãy số đã có thứ tự. Giải thuật tìm cách giới hạn phạm vi tìm kiếm sau mỗi lần so sánh x với một phần tử trong dãy. Ý tưởng của giải thuật là tại mỗi bước tiến hành so sánh x với phần tử nằm ở vị trí giữa của dãy tìm kiếm hiện hành, dựa vào kết quả so sánh này để quyết định giới hạn dãy tìm kiếm ở bước kế tiếp là nửa trên hay nửa dưới của dãy tìm kiếm hiện hành. 9
- Minh họa tìm x = 41 x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 Tìm thấy x tại vị trí 6 l m m r m 10
- Minh họa tìm x = 45 x x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 l m m r l > r: Kết thúc: Không tìm thấy m m 11
- 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: // lấy mốc so sánh mid = (left+right)/2; So sánh a[mid] với x, có 3 khả năng : a[mid] = x: Tìm thấy. Dừng //tìm tiếp x trong dãy con a .. a a[mid] > x: right =mid - 1; //tìm tiếp x trong dãy con a a[mid] < x: .. a left = mid + 1; Bước 3: Nếu left
- Cài đặt int BinarySearch(int a[],int N,int x ) { int left =0; right = N-1; int mid; do{ mid = (left + right)/2; if (x == a[mid]) return mid;//Thấy x tại mid else if (x
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Trí tuệ nhân tạo - Chương 3: Các kỹ thuật tìm kiếm Heuristics
35 p | 265 | 43
-
Bài giảng Cấu trúc dữ liệu: Chương 2 - Các giải thuật tìm kiếm và sắp thứ tự
186 p | 185 | 22
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - ThS. Trịnh Quốc Sơn (ĐH Công nghệ Thông tin)
186 p | 84 | 21
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 2: Tìm kiếm và sắp xếp
79 p | 100 | 17
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm theo bảng băm - ĐHKHTN
11 p | 103 | 8
-
Bài giảng Phân tích thiết kế giải thuật - Chương 8: Giải thuật tìm kiếm trong đồ thị
42 p | 101 | 7
-
Bài giảng Các giải thuật tìm kiếm, sắp xếp
98 p | 109 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán tìm kiếm và sắp xếp cơ bản - Lê Thị Ngọc Hạnh
28 p | 129 | 7
-
Bài giảng môn Cấu trúc dữ liệu - Chương 2: Kỹ thuật tìm kiếm (searching)
29 p | 75 | 5
-
Sử dụng thuật tìm kiếm theo xác suất giải một số bài toán tối ưu kỹ thuật
15 p | 65 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật tìm kiếm tuyến tính và nhị phân - TS. Trần Ngọc Việt
38 p | 18 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Trường ĐH Công nghệ Thông tin
191 p | 26 | 4
-
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 nội
18 p | 77 | 3
-
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 p | 60 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Đỗ Ngọc Như Loan
90 p | 50 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm và sắp xếp - Đậu Ngọc Hà Dương
56 p | 13 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật tìm kiếm - TS. Ngô Hữu Dũng
25 p | 59 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn