Câu 15 :
Hãy viết các bước của thuật toán tìm kiếm tuần tự để tìm số x trong dãy số gồm n phần tử.
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a[]={10,2,5,12,20,6,8,15,18}; //mảng đã cho
ll n=sizeof(a)/sizeof(a[0]); //độ dài mảng
sort(a,a+n); //sắp xếp mảng
//Thuật toán tìm kiếm nhị phân
ll l=0, r=n-1;
while(l<=r) {
ll mid=(l+r)/2; //Tìm phần tử giữa left và right
if(a[mid]<15) l=mid+1; //Vì từ đoạn [0,mid] thì phần tử nhỏ hơn 15 nên ta duyệt từ khoảng (mid,r]
else r=mid-1; //vì thấy nên rút r để thu hẹp phạm vi
}
cout << l+1; //in ra kq (vì bắt đầu từ 0 đến n-1 nên phải tăng thêm để ra vị trí đúng)
}
(Bạn có thể dựa vào code mình để rút ra các bước)
Chúc bạn học tốt!
#include <bits/stdc++.h>
using namespace std;
long long i,n,x,k;
int main()
{
cin>>n>>k;
for (i=1; i<=n; i++)
{
cin>>x;
if (x==k) cout<<i<<" ";
}
return 0;
}
def timTatCaGiaTri(a, x):
danhSach = [] # Khởi tạo danh sách rỗng để lưu trữ các phần tử tìm thấy
for i in range(len(a)):
if a[i] == x:
danhSach.append(i) # Nếu phần tử được duyệt là phần tử cần tìm, thêm chỉ số của nó vào danh sách
return danhSach # Trả về danh sách chứa các chỉ số của các phần tử bằng giá trị cần tìm
Bước 1: Bắt đầu từ phần tử đầu tiên của danh sách.
Danh sách: [3, 5, 12, 25, 11, 22]
Bước 2: So sánh số cần tìm (25) với từng phần tử:
- So sánh với 3 → không bằng 25 → tiếp tục
- So sánh với 5 → không bằng 25 → tiếp tục
- So sánh với 12 → không bằng 25 → tiếp tụca
- So sánh với 25 → bằng nhau → tìm thấy
Bước 3: Dừng thuật toán và thông báo:
- Số 25 được tìm thấy
- Ở vị trí thứ 4 trong danh sách (nếu tính từ 1) (hoặc vị trí chỉ số 3 nếu tính từ 0)
Thuật toán tìm kiếm nhị phân thực hiện tìm kiếm một mảng đã sắp xếp bằng cách liên tục chia các khoảng tìm kiếm thành 1 nửa. Bắt đầu với một khoảng từ phần tử đầu mảng, tới cuối mảng. Nếu giá trị của phần tử cần tìm nhỏ hơn giá trị của phần từ nằm ở giữa khoảng thì thu hẹp phạm vi tìm kiếm từ đầu mảng tới giửa mảng và nguợc lại. Cứ thế tiếp tục chia phạm vi thành các nửa cho dến khi tìm thấy hoặc đã duyệt hết.
Thuật toán tìm kiếm nhị phân tỏ ra tối ưu hơn so với tìm kiếm tuyết tính ở các mảng có độ dài lớn và đã được sắp xếp. Ngược lại, tìm kiếm tuyến tính sẽ tỏ ra hiệu quả hơn khi triển khai trên các mảng nhỏ và chưa được sắp xếp.
Dưới đây là các bước của thuật toán tìm kiếm tuần tự để tìm số \(x\) trong dãy số gồm \(n\) phần tử:
Thuật toán tìm kiếm tuần tự
Đặt biến \(i = 1\) (vị trí bắt đầu của dãy).
So sánh phần tử thứ \(i\) trong dãy với giá trị cần tìm \(x\).
Tăng \(i\) lên 1 (tức xét phần tử tiếp theo).
Tóm tắt:
Nếu bạn cần, mình có thể giúp bạn viết thuật toán này bằng ngôn ngữ lập trình hoặc mô tả bằng sơ đồ khối!