Professional Documents
Culture Documents
Nhom1 Tim Kiem Va Sap Xep
Nhom1 Tim Kiem Va Sap Xep
NHÓM 1
THÀNH VIÊN NHÓM
NỘI DUNG CHÍNH
01
Giới thiệu về tìm kiếm
Võ Tấn Thời
MSSV:22521427 02
Giải thuật tìm
Hà Khả Nguyên
kiếm
MSSV:22520964 03
Giới thiệu về
Trương Quốc Huy
STL
MSSV:22520583 04
Giới thiệu lớp vector và
Trương Quang Huy
một số hàm có sẵn cho
MSSV:22520582
bài toán tìm kiếm
1. Giới thiệu về tìm
kiếm
2. Giải thuật tìm kiếm
Bài toán: Cho mảng A gồm n phần tử và biến K. Tìm vị trí
phần tử có giá trị bằng K trong mảng A
VD: Mảng A( n=8): K=4
A[i] 3 5 1 2 16 90 4 0
i 0 1 2 3 4 5 6 7
2.1. Tìm kiếm tuyến
tính
Ý tưởng: So sánh K lần lượt với
phần tử thứ 1, thứ 2,...của mảng a
cho đến khi gặp được khóa cần tìm
hoặc tìm hết mảng mà không thấy.
2.1. Tìm kiếm tuyến tính
Các bước tiến hành:
Bước 1: Khởi gán i=0;
Bước 2: So sánh a[i] với giá trị k cần tìm. Nếu:
• a[i] == k: Tìm thấy x. Dừng;
• a[i] != k: Sang bước 3;
Bước 3: i = i+1. Nếu:
• i == N: Hết mảng. Dừng;
• i != N: Lặp lại bước 2;
2.1. Tìm kiếm tuyến tính
Hàm trả về 1
nếu tìm thấy,
ngược lại trả
về 0
2.1. Tìm kiếm tuyến tính
Hàm trả về
vị trí nếu
tìm thấy,
ngược lại
trả về -1
2.1. Tìm kiếm tuyến tính
VD: Mảng A( n=8): K=4
3 ≠ 4 5 ≠ 4 1≠ 4 2 ≠ 4 1𝟔 ≠ 49 𝟎 ≠ 4 4 =4
A[i]
3 5 1 2 16 90 4 0
i 0 1 2 3 4 5 6 7
2.1. Tìm kiếm tuyến
tính
Độ phức tạp thuật toán( O(N)):
• Tốt nhất: 1
• Xấu nhất: N
• Trung bình: (N+1)/2
2.2. Tìm kiếm nhị phân
Ý tưởng:
Giả xử ta xét mảng có thứ tự tăng, khi ấy ta có a[i-1]<a[i]<a[i+1]
Nếu K>a[i] thì K chỉ có thể xuất hiện trong đoạn [a[i+1],a[n-1]]
Nếu K<a[i] thì K chỉ có thể xuất hiện trong đoạn [a[0],a[i-1]]
Tại mỗi bước ta so sánh K với phần tử đứng giữa trong dãy tìm kiếm hiện hành, dựa
vào kết quả so sánh này mà ta quyết định giới hạn dãy tìm kiếm ở nữa dưới hay nữa
trên của dãy tìm kiếm hiện hành.
2.2. Tìm kiếm nhị phân
Các bước tiến hành:
Bước 1: Left=0; Right=N-1;
Bước 2: mid=(Left+Right)/2; //chỉ số phần tử giữa trong dãy
So sánh a[mid] với k. Có 3 khả năng:
• a[mid]= k: tìm thấy. Dừng
• a[mid]> k: Right= mid-1;
• a[mid]< k: Left= mid+1;
Bước 3: Nếu Left <=Right ; // còn phần tử trong dãy
Lặp lại bước 2. Ngược lại : Dừng
2.2. Tìm kiếm nhị phân
Hàm trả về
vị trí nếu
tìm thấy,
ngược lại
hàm trả về
giá trị -1
2.2. Tìm kiếm nhị phân
A[i]
1 2 4 5 16 76 80 110 150
i 0 1 2 3 4 5 6 7 8
2.2. Tìm kiếm nhị phân
VD: Mảng A( n=9)
K=76
16<76
A[i]
1 2 4 5 16 76 80 110 150
i 0 1 2 3 4 5 6 7 8
left
right mid
2.2. Tìm kiếm nhị phân
VD: Mảng A( n=9)
K=76
76=76
A[i]
1 2 4 5 16 76 80 110 150
i 0 1 2 3 4 5 6 7 8
left ht
mid rig
2.2. Tìm kiếm nhị phân
VD: Mảng A( n=9)
K=76
76=76
A[i]
1 2 4 5 16 76 80 110 150
i 0 1 2 3 4 5 6 7 8
left ht
mid rig
3.Giới thiệu STL
• Standard Template Library - thư viện
Template chuẩn của C++
• STL chính là một thư viện chứa những template
của cấu trúc dữ liệu cũng như thuật toán được
xây dựng một cách tổng quát nhất, nhằm hỗ trợ
cho người dùng trong quá trình lập trình.
• Thư viện STL vô cùng rộng lớn, gồm rất nhiều các template
khác nhau.
3.Giới thiệu STL
Nhưng ta có thể chia STL làm 4 phần chính:
• Containers Library: Thư viện chứa các cấu trúc dữ liệu mẫu như
vector, stack, queue, deque, set, map,...
• Algorithm Library: Chứa các thuật toán viết sẵn để thao tác với
dữ liệu.
• Iterator Library: Là các biến lặp, sử dụng để truy cập, duyệt các
phần tử dữ liệu của các containers. Về cơ bản, nó giống như các
biến chạy trên dữ liệu nhưng truy cập vào địa chỉ của dữ liệu.
• Numeric Library: Chứa các hàm toán học.
4.1.Giới thiệu Vector
Vector là kiểu dữ liệu mảng động - hỗ trợ người dùng lưu trữ các
phần tử có cùng kiểu. Nhưng khác với mảng thông thường, vector
rất linh hoạt và có nhiều phương thức để hỗ trợ người dùng
Tìm kiếm phần tử x trong vector v, trả về true nếu tìm thấy và false
nếu không tìm thấy.
Ví dụ:
INPUT OUTPUT
1 2 8 3 7 4 6 10 9 21 0 5
4 21 10 9 8 7
X
MỜI MỌI
NGƯỜI ĐẶT
CÂU HỎI