Tải bản đầy đủ (.pptx) (113 trang)

Bài giảng cấu trúc dữ liệu chương 13 nguyễn xuân vinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (987.91 KB, 113 trang )

GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU

CẤU TRÚC DỮ LIỆU
DATA STRUCTURES
[214331]

TÌM KIẾM

1

/XX

12/3/15

Teacher: Nguyễn Xuân Vinh
Email:


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
2

Định nghĩa

 Giải thuật tìm kiếm là một thuật toán trả về kết quả là một lời giải cho bài toán đó.
 Trong giải thuật tìm kiếm người ta thường cân nhắc giữa các lời giải có thể và tìm ra lời giải tối ưu nhất.
 Không gian tìm kiếm: tập hợp các lời giải có thể đối với 1 bài toán.



GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
3

Phân loại tìm kiếm

 Tìm kiếm không có thông tin
 Tìm kiếm trên danh sách
 TÌm kiếm trên cây
 Tìm kiếm trên đồ thị
 TÌm kiếm có thông tin
 Tìm kiếm đối kháng
 Thỏa mãn ràng buộc


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
4

Tìm kiếm không có thông tin

 Một giải thuật không tính đến bản chất cụ thể của bài toán.
 Ưu điểm:
 Có thể được sử dụng cho nhiều bài toán.
 Nhược điểm:

 Không gian tìm kiếm rất lớn.
 Thời gian tìm kiếm lâu.


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
5

Tìm kiếm trên danh sách












Tìm một khóa nào đó trong 1 tập hợp các phần tử nào đó.
Các thuật toán:
Tìm kiếm tuyến tính – linear search
Tìm kiếm nhị phân – binary search
Tìm kiếm nội suy – interpolation search
Fibonaccian search
Jump search

Secant search
Bảng băm – hashtable
Cây tìm kiếm nhị phân cân bằng – self-balancing binary search tree


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
6

Tìm kiếm tuyến tính – linear search

 Ý tưởng của thuật toán: Thuật toán tiến hành kiểm tra từng phần tử trong danh sách theo thứ tự của danh sách đó.
 Ưu điểm:
 Đơn giản, dễ cài đặt
 Có thể áp dụng cho 1 danh sách bất kỳ mà không cần tiền xử lý.
 Nhược điểm:
 Thời gian chạy lớn:
Trường hợp trung bình và xấu nhất O(n).
Trường hợp tốt nhất O(1).


GV: NGUYỄN XUÂN VINH

Tìm kiếm tuyến tính – linear search


/>



Minh họa tìm x =10

MÔN: CẤU TRÚC DỮ LIỆU

10
Đã tìm thấy tại



7

5

12

41

10
10

32

13

9

15

3


1

2

3

4

5

6

7

8

9

10

vị trí 5

Minh họa tìm x = 25
25
5

12

41


10

32

13

9

15

3

1

2

3

4

5

6

7

8

9


10

Đã hết mảng

7

/XX

12/3/15

7

7


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
8

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 thuật toán.
 a[i] != x: sang bước 3.
 Bước 3:
 i = i+1 //xét phần tử kế tiếp 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.


9

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cài đặt


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
10

Độ phức tạp

 Độ phức tạp trong thuật toán này chính là số lần thực hiện các phép so sánh.
 Mỗi bước của vòng lặp cần 2 phép so sánh:
 Đã hết danh sách chưa.
 Có bằng phần tử cần tìm không
 Do đó tại bước thứ i đã có 2i phép so sánh.
 Trong trường hợp xấu nhất ta có 2n phép so sánh

  độ phức tạp O(n)


GV: NGUYỄN XUÂN VINH

Tìm kiếm nhị phân – binary search

 Ý tưởng của thuật toán: giả sử danh sách đã được sắp xếp, ta tiến hành chọn một phần tử ở giữa danh sách
(middle), sau đó so sánh phàn tử cần tìm kiếm (target) và phần tử middle.

11

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU





Nếu target=middle: đã tìm thấy, kết thúc thuật toán.
Nếu target>middle: tiếp tục tìm kiếm nửa bên phải của danh sách cũ.
Nếu target

GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15

/XX
12

Tìm kiếm nhị phân – binary search

 Ưu điểm:
 Thời gian chạy nhanh:
Trường hợp tốt nhất O(1)
Trường hợp trung bình và xấu nhất O(logn).
 Nhược điểm:
 Danh sách phải được sắp xếp trước.
 Danh sách phải có khả năng truy xuất ngẫu nhiên.


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
13

Tìm kiếm nhị phân – binary search

 />

GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU

Tìm kiếm nhị phân – binary search
Minh họa tìm x = 41


12/3/15
/XX

x

x

3

14

16

19

22

41

46

51

63

71

1

2


3

4

5

6

7

8

9

10

l

14

x

m

m

Tìm thấy x tại vị trí 6
r


m

14


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU

Tìm kiếm nhị phân – binary search
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

15

/XX

12/3/15

m

m

15


GV: NGUYỄN XUÂN VINH

Giải thuật





MÔN: CẤU TRÚC DỮ LIỆU




12/3/15
/XX

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:



a[mid] = x. Tìm thấy, dừng.



a[mid] > x //tìm tiếp trong dãy con aleft …amid-1
right = mid – 1;



a[mid] < x //tìm tiếp trong dãy con amid+1 …aright
left = mid+1






16

Bước 1: left = 1, right = N //tìm trên tất cả các phần tử

Bước 3:
left <= right = N //còn phần tử chưa xét lặp lại bước 2
Ngược lại, dừng, không tìm thấy


17

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cài đặt


18

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH


So sánh giữa TKTT & TKNP


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
19

Tìm kiếm nhị phân – binary search

 Ý tưởng: là giải thuật tìm kiếm trên danh sách đã được sắp xếp bằng cách ước lượng vị trí tiếp theo để kiểm tra
bằng phép nội suy tuyến tính của khóa và giá trị của phần tử cuối cùng của danh sách.

 Tức là sử dụng các vị trí đã biết để đoán ra các vị trí có thể.
 Ưu điểm:
 Thời gian chạy nhanh:
Trung bình: O(log log n)
Trường hợp xấu nhất: O(n)


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
20

Giải thuật

 Bước 1: chọn l = 0, r = N-1

 Bước 2:
 m = l + (x – a[l])*(r-l)/(a[r]-a[l])  Hàm nội suy
 Tiến hành so sánh, có 3 trường hợp xảy ra:
x = a[m]: Tìm thấy, dừng.
x < a[m]: đặt r = m-1
x > a[m]: đặt l = m + 1
 Bước 3:
 Nếu x<a[l] hay x>a[r]  m>r hay m Ngược lại quay lại bước 2.


GV: NGUYỄN XUÂN VINH

Ví dụ
Tìm x = 32
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 4 7 9 9 12 13 17 19 21 24 32 36 44 45 54 55 63 66 70

21

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU



Lần 1:







l=0, r=19  m=0+(32-0)*(19-0)/(70-1) = 8
a[8]=19<32=x l=9

Lần 2:




l=9, r=19  m=9+(30-24)*(19-9)/(70-24) = 11
a[11]=32=x  tìm thấy giá trị x= 32 tại vị trí m = 11


GV: NGUYỄN XUÂN VINH

Ví dụ
Tìm x = 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

22

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU


1 4 7 9 9 12 13 17 19 21 24 32 36 44 45 54 55 63 66 70


23

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cài đặt


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
24

So sánh giữa TKNP &TKNS

 Tính về tốc độ thực hiện thì tìm kiếm nội suy nhanh hơn hẳn tìm kiếm nhị phân.
 Ví dụ: với 1 tập hợp 232 (4 triệu) phần tử
 Tìm kiếm nhị phân cần thực hiện 32 bước
 Trong khi đó tìm kiếm nội suy chỉ cần 5 bước
 Đối với các tập phần tử lớn thì tốc độ thực hiện của TKNS gần như là hàm hằng.



25

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Bảng băm – hashtable


×