Trường Đại học Khoa học Tự nhiên Khoa Công nghệ thông tin KỸ THUẬT LẬP TRÌNH TÌM KIẾM... Tìm kiếm tuần tự - Vét cạn Thuật toán: cho đến khi gặp được phần tử cần tìm, hoặc hết dãy...
Trang 1Trường Đại học Khoa học Tự nhiên
Khoa Công nghệ thông tin
KỸ THUẬT LẬP TRÌNH
TÌM KIẾM
Trang 2Nội dung
Giới thiệu
Thuật toán tìm kiếm
• Vét cạn
• Lính canh
• Tuyến tính
• Đệ quy
So sánh hiệu suất
Tổng kết
Trang 3Giới thiệu
hàng ngày
Trang 4Thuật toán tìm kiếm
Có nhiều loại:
Mục tiêu:
phù hợp khi áp dụng vào thực tế
Trang 5Thuật toán tìm kiếm tuần tự
• Input:
• Output:
• Thuật toán:
Trang 6Tìm kiếm tuần tự - Vét cạn
Thuật toán:
cho đến khi gặp được phần tử cần tìm, hoặc hết dãy
1 25 6 5 2 37 40
x = 6
x = 6
Dừng
1 25 6 5 2 37 40
1 25 6 5 2 37 40
x = 6
Trang 7Tìm kiếm tuần tự - Vét cạn
Vậy độ phức tạp của thuật toán là:
Trang 8Tìm kiếm tuần tự - Lính canh
kiểm tra
bằng cách dùng “lính canh”
cần tìm và đặt ở cuối mảng
Trang 9Tìm kiếm tuần tự - Lính canh
Thuật toán:
1 25 5 2 37 6
x = 6
x = 6
x = 6
1 25 5 2 37 6
1 25 5 2 37 6
1 25 5 2 37 6
1 25 5 2 37 6
1 25 5 2 37 6
x = 6
x = 6
x = 6
(a)
(b)
(c)
(d)
(e)
(f)
Trang 10Tìm kiếm tuần tự - Lính canh
Thuật toán:
x (chắc chắn sẽ tìm thấy x)
không thuộc mảng A
Trang 11Tìm kiếm tuần tự - Lính canh
• Thuật toán:
int LinearSentinel(int a[], int n, int x)
{
a[n] = x; //đặt lính canh
for (int i = 0; ;i++)
if (a[i] == x)
return i;
}
Trang 12Tìm kiếm tuần tự - Lính canh
thời gian tìm kiếm giảm khi dùng phương pháp lính canh
so với 0.28s)
Trang 13Thuật toán tìm kiếm nhị phân
tạp của thuật toán tìm kiếm tuần tự không đổi
để giới hạn vị trí của giá trị cần tìm trong mảng -> Thuật toán tìm kiếm nhị phân
Trang 14Thuật toán tìm kiếm nhị phân
• Input:
• Output: giống với thuật toán tìm kiếm tuần tự
• Ý tưởng:
• Nếu x là phần tử giữa thì dừng
trái hay nửa phải của A
Trang 15Thuật toán tìm kiếm nhị phân
Minh họa:
A[i] 1 2 6 26 28 37 40 Vòng 1 left mid right
Vòng 2 left mid right
x = a[1] -> return 1
Trang 16Thuật toán tìm kiếm nhị phân
Minh họa:
A[i] 1 2 6 26 28 37 40 Vòng 1 left mid right
Vòng 2 left mid right
mid right
x = a[6] -> return 6
Trang 17Thuật toán tìm kiếm nhị phân
Minh họa:
A[i] 1 2 6 26 28 37 40 Vòng 1 left mid right
Vòng 2 left mid right
Vòng 3 left
mid right
Vòng 4
right = -1, left = 0
Trang 18Thuật toán tìm kiếm nhị phân
Độ phức tạp của tìm kiếm nhị phân
Trang 19So sánh hiệu suất
So sánh trường hợp xấu nhất của 2 thuật
toán:
Kích thước mảng
T/h xấu nhất
Tuần tự Nhị phân 100.000 100.000 16 200.000 200.000 17 400.000 400.000 18 800.000 800.000 19 1.600.000 1.600.000 20