/*thuật toán tìm kiếm tuyến tính
Cho danh sách có n phần tử a0, a1, a2…, an-1.
Để đơn giản trong việc trình bày giải thuật ta dùng mảng 1 chiều a để lưu danh sách các phần tử nói trên trong bộ nhớ chính.
Tìm phần tử có khoá bằng X trong mảng
Giải thuật tìm kiếm tuyến tính (tìm tuần tự)
Giải thuật tìm kiếm nhị phân
Lưu ý: Trong quá trình trình bày thuật giải ta dùng ngôn ngữ lập trình C.
Ý tưởng : So sánh X 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.
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ị x cần tìm, có 2 khả năng
+ a[i] == x tìm thấy x. Dừng;
+ a[i] != x sang bước 3;
Bước 3: i=i+1 // Xét tiếp phần tử kế tiếp trong mảng
Nếu i==N: Hết mảng. Dừng;
Ngược lại: Lặp lại bước 2;
Hàm trả về 1 nếu tìm thấy, ngược lại trả về 0:
int LinearSearch(int a[],int n, int x)
{
int i=0;
while((i<n)&&(a[i]!=x))
i++;
if(i==n)
return 0; //Tìm không thấy x
else
return 1; //Tìm thấy
}Nhận xét: Số phép so sánh của thuật toán trong trường hợp xấu nhất là 2*n.
Để giảm thiểu số phép so sánh trong vòng lặp cho thuật toán, ta thêm phần tử “lính canh” vào cuối dãy.
int LinearSearch(int a[],int n, int x)
{ int i=0; a[n]=x; // a[n] là phần tử “lính canh”
while(a[i]!=x)
i++;
if(i==n)
return 0; // Tìm không thấy x
else
return 1; // Tìm thấy
}
*/
#include<iostream>
using namespace std;
int tim(int a[], int n,int x)
{
for (int i = 0; i < n;i++) if (x == a[i]) return i+1;
return 0;
}
void main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int x;
cout << "nhap gia tri muon tim: ";
cin >> x;
int vt = tim(a, 10, x);
if (vt !=0) cout << "tim thay tai vi tri: " << vt << "\n";
else cout << "khong tim thay\n";
}
Saturday, January 24, 2015
Subscribe to:
Post Comments (Atom)
Popular Posts
-
Biểu diễn dãy nhị phân có độ dài N dưới dạng x[1...n] Thử các giá trị {0, 1} gán cho x [ i ]. Với mỗi giá trị thử gán x[i] lại thử các giá...
-
Mọi người download AOE 1 Full DOWNLOAD về rồi giải nén ra và vào phần setup chạy trước để phù hợp với cấu hình sau đó chạy thẳng là được DOW...
-
Sinh các hoán vị và tổ hợp 1) Sinh các hoán vị: Mọi tập hợp có n phần tử đều có đánh số các phần tử theo chỉ số k = 1,2,3,..,n. Thí ...
-
Bài viết sau được mình tổng hợp từ nhiều nguồn, với mục đích để tiện cho việc tra cứu và học tập. Mình cũng xin gửi lời cảm ơn chân thành đế...
-
Để liệt kê các chỉnh hợp không lặp chập k của tập S = {1,2,3,.., n} , ta có thể đưa về liệt kê các cấu hình x[1,..,k] trong đó xi thuộc tập ...
-
Sưu tầm: Cho n thành phố đánh số từ 1 đến n và m tuyến giao thông 2 chiều được cho bởi mảng C cấp nxn. Ở đây c[i,j]= c[j,i] = chi phí đường ...
-
Dãy ABC: Cho trước một số nguyên dương N ( N<= 100), hãy tìm một xâu chỉ gồm các ký tự A,B,C thỏa mãn các điều kiện sau: *Có độ dài N *Ha...
-
Sưu tầm: Cho một số nguyên dương n<=30 , hay tìm tất cả các cách phân tích số n thành tổng của các số nguyên dương, các cách phân tích là...
-
Ta gọi phép nén một số nguyên là tính tổng các chữ số của nó. Dễ thấy, sau một số phép nén, thì số còn lại chỉ có một chữ số và ko nén được ...
-
Từng ngồi tù vì vận chuyển tiền giả, song Thanh tiếp tục sang Trung Quốc mua gần 200 triệu đồng tiền giả mang về nước tiêu thụ. Gần 200 triệ...

0 comments:
Post a Comment