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

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

113 678 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 113
Dung lượng 1,58 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• 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 se

Trang 1

[214331]

Trang 3

• 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

Trang 4

• 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

Trang 5

• 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

Trang 6

• Ý 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)

Trang 7

vị trí 5

Đã hết mảng

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

Trang 8

• 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

Trang 11

• Ý 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

– 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<middle: tiếp tục tìm kiếm nửa bên trái của danh sách cũ

Trang 12

– 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

Trang 15

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

Trang 16

– 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

– 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)

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

Trang 20

– 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:

Trang 24

– 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

Trang 27

• Xem phần binary search tree

• Thời gian chạy: O(log n)

Trang 28

• Các thuật toán tìm kiếm trên danh sách có thể được mở rộng thành tìm kiếm trên khoảng (range search)

• Bảng băm không dùng để tìm kiếm trên khoảng

Trang 29

• Binary search tree:

– Tìm kiếm theo chiều rộng

– TÌm kiếm theo chiều sâu:

• Tìm kiếm trước (preorder)

• Tìm kiếm sau (postorder)

• Tìm kiếm giữa(inorder)

• http://www.cosc.canterbury.ac.nz/mukundan/dsal/BST.html

• Ngoài ra còn có một số các thuật toán tìm kiếm trên cây khác như:

– Tìm kiếm lặp sâu dần

– Tìm kiếm chiều sâu giới hạn

– Tìm kiếm hai chiều

– Tìm kiếm chi phí đều

Trang 30

• Là các thuật toán mở rộng của tìm kiếm trên cây.

• Một số thuật toán tìm kiếm thường gặp:

– Thuật toán Dijkstra

– Thuật toán Kruskal

– Thuật toán láng giềng gần nhất

– Giải thuật Prim

Trang 31

• Trong các thuật toán này ta sẽ sử dụng 1 hàm đánh giá heuristic đặc thù cho bài toán cần giải quyết đóng vai trò hướng dẫn trong quá trình tìm kiếm.

• Một hàm heuristic tốt sẽ làm cho quá trình tìm kiếm hoạt động hiệu quả hơn

• Đa số các thuật toán tìm kiếm có thông tin đều là tìm kiếm trên cây

– Tìm kiếm theo lựa chọn tốt nhất

– A*

Trang 32

• Áp dụng trong các trò chơi đối kháng: cờ vua,cờ tướng, cờ caro…

• Trong loại tìm kiếm này ta phải tính đến mọi nước đi mà đối thủ

sử dụng

• Một số thuật toán tìm kiếm đối kháng thường gặp:

– Thuật toán min–max algorithm

– Thuật toán tỉa cây tìm kiếm – search tree prunning

– Thuật toán tỉa cây alpha-beta – alpha-beta prunning

Trang 34

là một tập các giá trị được gán cho một tập các biến.

• Do các biến có thể được xử lý theo thứ tự tùy ý, các thuật toán

thông thường dành cho tìm kiếm trên cây rất không hiệu quả

• Các phương pháp thường gặp:

– Tìm kiếm tổ hợp

– Tìm kiếm quay lui

Trang 35

– Thử từng khả năng cho đến khi tìm thấy lời giải đúng.

– Là quá trình tìm kiếm theo độ sâu trong 1 tập các lời giải

– Trong quá trình tìm kiếm nếu gặp 1 hướng lựa chọn ko thỏa mãn hoặc đã thử hết các lựa chọn trong hướng đó quay lui về điểm có các hướng khác và thử hướng tiếp theo

– Thuật toán kết thúc khi tìm tháy lời giải hoặc khi không còn hướng lựa chọn nào nữa

Trang 37

• Các thuật toán tìm xâu ký tự (String searching algorithm) tìm

kiếm các mẫu trong các xâu ký tự; cây hậu tố (suffix tree) là một

cấu trúc dữ liệu thông dụng có tác dụng làm tăng hiệu quả của các thuật toán này

• Giải thuật di truyền hay thuật toán gien sử dụng ý tưởng tiến hóa

để làm các heuristic cho việc giảm không gian tìm kiếm

• Các thuật toán sắp xếp cần thiết cho việc thực thi một số thuật

toán tìm kiếm nhất định

Trang 38

• Giả lập luyện thép là một thuật toán tìm kiếm xác suất

• Tìm kiếm Tabu là một kỹ thuật tránh việc các quá trình tìm kiếm rời rạc bị tắc trong các cực tiểu địa phương

• Tìm kiếm liên bang (Federated search).

• Giải thuật Minimax được tối ưu hóa bằng kỹ thuật tỉa cây beta là một thuật toán dành cho tìm kiếm các nước đi tốt trong các trò chơi tổng bằng không

Trang 39

[214331]

Trang 40

– Sắp xếp ổn định: sau khi tiến hành sắp xếp, thứ tự của các phần

tử bằng nhau không bị thay đổi

– Sắp xếp so sánh: Trong quá trình sắp xếp ta tiến hành so sánh các khóa và đổi chổ các phần tử cho nhau

Trang 41

• Một số các thuật toán sắp xếp thường gặp:

– Sắp xếp nổi bọt – bubble sort

– Sắp xếp chọn – selection sort

– Sắp xếp chèn – insertion sort

– Sắp xếp nhanh – quick sort

– Sắp xếp trộn – merge sort

– Sắp xếp vun đống – heap sort

– Sắp xếp theo cơ số - radix sort

– …

Trang 42

– Exchange sort: Sắp xếp nổi bọt, Sắp xếp nhanh

– Selection sort: Sắp xếp chọn, Sắp xếp vun đống

– Merge sort: Sắp xếp vun đống

– Distribution sort: Sắp xếp theo cơ số

Trang 43

– Giải thuật bắt đầu từ đầu của tập dữ liệu

– Nó tiến hành so sánh hai phần tử đầu tiên, nếu chưa đúng thứ

tự thì đổi chỗ

– Tiếp tục làm như vậy với các cặp tiếp theo cho tới cuối danh sách Sau bước này phần tử cuối cùng chính là phần tử lớn nhất của dãy

– Sau đó quay lại với hai phần tử đầu cho tới khi không cần phải đổi chỗ nữa

Trang 52

Nếu a[j]<a[j-1] thì đổi chỗ a[j], a[j-1]

Trang 53

Sắp xếp nổi bọt – bubble sort

• Thời gian chạy:

– Với mỗi i = 1, 2, n-1 ta cần i phép so sánh Số lần so sánh và đổi chỗ tối đa trong giải thuật là:

– Do đó độ phức tạp của thuật toán là O(n 2 ) sum = (n - 1)+(n – 2) +…+2+1 = (n - 1)n/2

Trang 67

Độ phức tạp Tối thiểu Trung bình Tối đại

O(n 2 ) O(n 2 ) O(n 2 ) sum = (n - 1)+(n – 2) +…+2+1 = (n - 1)n/2

Trang 81

• Thời gian chạy:

• Tại lượt thứ i thuật toán cần trung bình i/2 phép so sánh tổng

số phép toán:

• O(n 2 )

sum = (1/2) + (2/2) + (3/2)+…+(n /2) = (n +1) * n/4

Sắp xếp chèn – insertion sort

Trang 83

– Các phần tử lớn hơn được đưa về phía sau và thuộc danh sách con thứ 2.

– Tiếp tục thực hiện các bước trên cho tới lúc các danh sách con chỉ còn 1 phần tử

Trang 84

k = int((k1 + k2) / 2) + 1

Trang 85

Không l n h n xớn hơn x ơn x

Phân hoạch dãy

Trang 89

Sắp xếp đoạn 3

Trang 92

Sắp xếp nhanh – quick sort

• Thời gian chạy:

Độ phức tạp Tối thiểu Trung bình Tối đại

O(nlogn) O(nlogn) O(n 2 )

Trang 95

– Tiếp tục cho tới khi một trong hai danh sách ban đầu rỗng.

– Cho tất cả các phần tử của danh sách còn lại vào cuối danh

sách mới

Trang 97

– Tiến hành sắp xếp trên hai danh sách con này.

– Sau đó trộn chúng lại với nhau

Trang 100

Độ phức tạp Tối thiểu Trung bình Tối đại

O(nlogn) O(nlogn) O(nlogn)

Trang 103

• Đống: heap là một cây nhị phân hoàn chỉnh có tính chất là khóa ở nút cha bao giờ cũng lớn hơn khóa ở các nút con.

Trang 105

• Tạo một heap từ 1 dãy cho trước 

– Tạo một heap với phần tử đầu tiên

– tiến hành chèn các phần tử còn lại vào heap trên

Trang 106

• Xóa phần tử gốc ra khỏi heap:

Trang 107

• Ý tưởng: cơ bản là thực hiện việc sắp xếp thông qua việc tạo các heap

– Tạo ra 1 heap với các phần tử cần sắp xếp  nút cha bao giờ cũng lớn nhất

– Sắp xếp dãy dựa trên heap đã tạo ra Nút gốc sẽ được đưa về cuối danh sách

– Chuyển cây vừa xóa nút gốc về heap, tiếp tục việc tạo heap và sắp xếp cho tới khi chỉ còn 1 nút trong heap

Trang 109

Độ phức tạp Tối thiểu Trung bình Tối đại

O(nlogn) O(nlogn) O(nlogn)

Ngày đăng: 03/12/2015, 06:44

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm