Showing posts with label Thuật toán Tìm kiếm - Search. Show all posts
Showing posts with label Thuật toán Tìm kiếm - Search. Show all posts

[Thuật toán Tìm kiếm tuần tự] Ví dụ sử dụng thuật toán tìm kiếm tuần tự [C\C++]

Thuật toán tìm kiếm tuần tự 

Ví dụ sử dụng thuật toán tìm kiếm tuần tự: Viết các hàm thực hiện
 1. Nhập dãy số nguyên có n số (1<n<100).
 2. In dãy vừa nhập
 3. Tìm giá trị x trong dãy số (x nhập từ bàn phím)
 4. Đếm số lần xuất hiện của y (y nhập từ bàn phím)
 5. Tính giá trị phần trăm các số >=5.
 6. In ra vị trí xuất hiện các số nguyên tố có trong dãy.


[Code Turbo C++]

/*

http://lap-trinh-may-tinh.blogspot.com/

*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

// khai bao
int a[100],n;

// Nhap mang
void Nhap(){
  cout<<"\n + NHAP MANG : ";
  cout<<"\n - Nhap so phan tu: ";
  do{
       cout<<"\n n= "; cin>>n;
       if(n<1||n>100)
             cout<<"\n Nhap lai n!";
  } while (n<1||n>100);

  // Nhap mang
  cout<<"\n - Nhap mang : ";
  for (int i=0;i<n;i++)
   {
       cout<<"\n a["<<i<<"]= ";
       cin>>a[i];
    }
   }

// In day
void InDay(int a[],int n){
  cout<<"\n + IN DAY \n";
  for(int i=0;i<n;i++)
      cout<<a[i]<<"; ";
 }

// Tim x trong day
void Tim_x(int x, int a[], int n){
   cout<<"\n + TIM KIEM "<< x <<" TRONG DAY:";
   int t=0;
   for(int i=0;i<n;i++)
     if(x==a[i])
        t=1;
   if(t==1)
      cout<<"\n Tim thay "<<x<<" trong day ";
   else
      cout<<"\n Khong tim thay "<<x<<" trong day ";
}

// Dem so lan xuat hien cua y trong day
int Dem_y(int y, int a[], int n){
    int dem=0;
   for(int i=0;i<n;i++)
      if(y==a[i]) dem++;
  return dem;
}

// Tinh ty le % cac so lon hon 5
void PhanTram(int a[],int n){
   float pt;
   int count=0;
   for(int i=0;i<n;i++)
     if(a[i]>=5) count++;
        pt=((float)count/n)*100;
        cout<<"\n + TY LE % CAC SO >= 5 :"<<pt<<"%";
 }

// Dem so lan xuat hien cua so nguyen to trong day
void DemSNT(int a[],int n){
   cout<<"\n + IN RA VI TRI SO NGUYEN TO: ";
   for(int i=0;i<n;i++)
   {
      int test=0;
      for(int t=2;t<a[i];t++)
          if(a[i]%t==0) test=1;
      if (test==0) cout<<i<<" ; ";
    }

}

//////////////////////
void main(){
// Nhap day
  Nhap();
// In day
 InDay(a,n);

// tim x
 int x;
 cout<<"\n Nhap gia tri can tim x= ";
 cin>>x;
 Tim_x(x,a,n);
// Dem y trong day
 int y;
 cout<<"\n Nhap gia tri can dem y= ";
 cin>>y;
 cout<<"\n + SO LAN XUAT HIEN SO "<<y<<" LA: "<<Dem_y(y,a,n);
 // Tinh ty le phan tram cac so >=5
 PhanTram(a,n);

 // Dem so nguyen to trong day
 DemSNT(a,n);

 getch();
}

[ Search ] Tìm kiếm nhị phân [Code C++]

Thuật toán tìm kiếm nhị phân - Binary sort 


Ý tưởng của thuật toán: 
Phép tìm kiếm nhị phân được thực hiện trên dãy khoá có thứ tự (xét dãy tăng dần):
 a[0]<=a[1]<=a[2]<=...<=a[n-1]. Giá trị cần tìm x.

Chia đôi dãy khoá cần tìm kiếm. So sánh khoá giữa dãy với x, có 3 trường hợp xãy ra:
-  Giá trị khoá này bằng x, tìm kiếm thành công
-  Giá trị khoá này lớn hơn x, thì ta tiến hành tìm x với nữa bên trái của khoá này
-  Giá trị khoá này nhỏ hơn x, thì ta tiến hành tìm x với nữa bên phải của khoá này

Trường hợp tìm kiếm thất bại khi dãy khoá cần tìm không có phần tử nào.
Thuật toán tìm kiếm nhị phân - Binary sort

Cài đặt Thuật toán [code Turbo C\C++]:

/*Thuật toán tìm kiếm nhị phân không đệ quy*/

int BinarySearch(int x, int a[],int n) // Tìm khoá x trong dãy a1,a2…,an
{

 int  left =0; //Left trỏ về chỉ số đầu dãy
 int right =n-1; //right trỏ về vị trí cuối dãy
 int mid; // mid trỏ vào giữa dãy
 int found = 0; //dùng để xác tìm thành công hay không (0: không tìm thấy, 1: tìm thấy)

 while (left <= right && found==0){
    mid = (left + right) / 2;//mid ở giữa dãy
    if (a[mid]== x) //trường hợp tìm thấy dừng thuật toán
       found = 1;
     else
          if (a[mid]<x)
              left = mid +1; //xác định lại đoạn tìm tiếp theo là bên phải
          else
              right = mid -1; //xác định lại đoạn tìm tiếp theo là bên trái
  }

return found;
}

/*Thuật toán tìm kiếm nhị phân đệ quy*/

int BinSearch(int[] a, int gt, int dau, int cuoi)
{
    int i, j;
    i = dau; j = cuoi;
    if (i > j)
   {
        return -1; // không tìm thấy
    }
    int giua = (i + j) / 2;
    if (gt == a[giua])
      {
          return giua; // tìm thấy
       }
    else if (gt < a[giua])
      {
          j = giua - 1;
          return BinSearch(a, gt, dau, j);
       }
    else
      {
          i = giua + 1;
          return BinSearch(a, gt, i, cuoi);
       }
   }

// Đề nghị độc giả chuyể hàm cài trên sang đệ quy và viết đầy đủ chương trình để mo phỏng thuật toán.


--------------------------------------------
Xem thêm các thuật toán khác: 


[ Search ] Tìm kiếm tuần tự [Code C++]

Thuật toán tìm kiếm tuần tự - Sequential search


Ý tưởng thuật toán: xét dãy số cần tìm có n phần tử: a[0], a[1], a[2], ... , a[n-1]. Giá trị cần tìm là x.
 - Bắt đầu từ khoá đầu tiên, lần lượt so sánh khoá x với khoá tương ứng trong dãy.
 - Quá trình tìm kiếm kết thúc khi tìm được khoá thoả mãn hoặc đi đến hết dãy hoặc gặp điều kiện dừng vòng lặp.

Ví dụ: Cho dãy số a[]={1,25,6,5,2,37,40}; tìm phần tử x=37
Kết quả là tìm thấy x trong dãy.

Cài đặt thuật toán:
Có 2 thuật toán tìm tuần tự trên dãy khoá đầu vào khác nhau. 

[Code Turbo C++]

+ Trên dãy khoá chưa sắp xếp

int SequentialSearch(int x, int a[],int  n){
 int i =1;
  while (i <n &&a[i]!=x)
    i = i+1;
  return (i);  // nếu giá trị trả về là i<=n-1 (tìm thấy), i=n (không tìm thấy)
}

+ Trên dãy khoá đã được sắp xếp

int SequentialSearch (int x, int a[], int n){
  int i =1;
  while (i <=n && a[i]<x) i = i+1;

  if (a[i]==x) return 1;
  else return 0; // giá trị trả về là 1 (tìm thấy), 0 (không tìm thấy)
}

// Đề nghị độc giả viết tiếp các hàm còn lại để thực thi các thuật toán trên.

[ Android ] Cài đặt Android SDK, Eclipse và thiết bị giả lập AVD (Android Virtual Device)


Thực hiện cài đặt theo các bước:

Bước 1: Cài đặt Android SDK (Software Development Kit)

- Tải về Android SDK (Software Development Kit) > http://developer.android.com/sdk/index.html

- Bước cài đặt Android SDK sẽ giúp chúng ta cài đặt thiết bị giả lập Android trên máy tính. Việc thiết lập môi trường giả để: test chương trình, hoặc phần mềm thay thế cho thiết bị thật.

- Khi tải Android SDK về, chúng ta tiến hành giải nén vào bất kỳ đâu cũng được. Nên giải nén các tools phát triển trên cùng thư mục.

Bước 2: Cài đặt Eclipse IDE (công cụ lập trình Java)

- Tải Eclipse IDE (Java) > http://www.eclipse.org/downloads/

- Ở đây chúng ta có thể lựa chọn Eclipse hoặc Netbean. Tuy nhiên, theo khuyến cáo của google và kinh nghiệm bản thân, em nghĩ nên chọn Eclipse.

- Sau khi tải về Eclipse, tiến hành giải nén Eclipse. Bạn nên giải nén các tools phát triển trên cùng thư mục.

Bước 3:  Cài đặt Android Development Tools (ADT) plugin cho Eclipse

- Mở Eclipse

>> Vào Help > Install New Software (hoặc Software Updates với các phiên bản cũ hơn)
>> Chọn Tab Available software
>> Chọn Add Site

( Có thể vào trực tiếp đây để download ADT về: http://developer.android.com/tools/sdk/eclipse-adt.html#downloading (chọn Archive) )

Hoặc nhập địa chỉ sau: https://dl-ssl.google.com/android/eclipse/

Nếu ko được: https://dl-ssl.google.com/android/eclipse/


- Chọn tất cả các gói. >> Nhấn Next là Ok


 - Chấp nhận thỏa thuận rồi Finish


- Quá trình cài (mất một chút thời gian)


Bước 4: Kết nối Android SDK với Eclipse IDE

Thực hiện việc kết nối SDK với Eclipse :
>> Chọn Windows > Preference menu
>> Chọn Android từ cây danh mục bên trái
>> Nhập SDK Location: là thư mục giải nén SDK đã thực hiện được ở bước 1


Đến bước này có thể nói đã hoàn thiện các bước chính để cài đặt SDK và eclipse. Để chọn lựa API và Emulator, chúng ta vào thư mục android-sdk-windows (thư mục đã cài đặt ở step 1), chạy file SDK Manager.exe.

Chú ý: chạy file này bằng quyền Administrator trên windows. SDK Manager giúp chúng ta quản lý SDK Tools, SDK Platform Tools (Update, New…), các API và các AVD (Android Virtual Device)…

Tại đây, chúng ta có thể chọn Android version để phát triển. Xem chi tiết các android version: http://developer.android.com/about/index.html .

Ví dụ: 
  Android 4.1 tương ứng API16,
  Android 4.0.3 – API15,
  Android2.2 - API8...

Ở đây chúng ta có thể xem mô tả chi tiết cho End user hoặc cho Developer. API guide chắc chắn sẽ là những kiến thức rất cần thiết với những bạn Developer.

Sau khi đã thiết lập xong, vào Tools > Manager AVDs để tạo virtual device.

>>>> Khi cài xong mở Eclipse xuât hiện các icon Android


Chúc thành công!

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

[TxT]