Translate

Jumat, 03 Maret 2017

METODE binary search dan Interpolationsearch. Pemrograman C++

Contoh Kasus:
1. Problem: Buat program untuk mencari data yang diiputkan oleh user . Data tersebut harus dapat diinputkan secara dinamis oleh user , jika data ditemukan, berikan konfirmasi
“Data ditemukan”
beserta letak indeks data dan jumlah data yang ditemukan tersebut.
2. Metode pencarian yang kedua adalah
binary search , pada metode pencarian ini, data harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua bagian (secara logika), untuk setiap tahap pencarian. Algoritma binary searc h : 1. Data diambil dari posisi 1 sampai posisi akhir N 2. Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2 3. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar? 4. Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 5. Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1 6. Jika data sama, pencarian dihentikan, data ditemukan.  7. Jika sudah melewati semua posisi, data tidak ditemukan, pencarian dihentikan.
3. I n t e r p o l a t i o n s e a r c h
merupakan salah satu metode pencarian yang dapat
digunakan. Seperti pada
binary search, data yang harus diurutkan terlebih dahulu, sebelum dapat dilakukan pencarian dengan metode ini. Pada metode pencarian ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan 
• Jika data[posisi] > data yg dicari, high = pos – 1 • Jika data[posisi] < data yg dicari, low = pos + 1


 SOLUSI_1
#include<iostream>
#include<conio.h>
#include<stdio.h>

using namespace std;
int main()
{
    cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
   
     int data[10];
     int i,cari;
     int flag=0;
     int counter=0;
     int batas;
    
    cout<<"masukkan batasan memory (batas<11) : "; cin>>batas;
    if(batas<=10)
        {
            cout<<endl;
             cout<<"masukkan data memory: " <<endl;
             for(i=0; i<batas; i++)
                {
                cout<<"data ke-"<<i+1<<" : "; cin>>data[i];
                 }
            cout<<endl;
            cout<<"\tData pada masing masing ruang memory anda : "<<endl;
            
            for(i=0; i<batas; i++)
                {
                cout<<"data ke-"<<i+1<<" : "<<data[i]<<endl;
                 }
             cout<<"\nMasukkan data yang dicari : ";
             cin>>cari;
            
             for(i=0; i<batas; i++)
                 {
                       if (data[i]==cari)
                           {
                           flag=1;
                           counter++;
                           }
           
                 }
       
            if (flag==1)
                {
                    for(i=0; i<batas; i++)
                        {
                           if (data[i]==cari)
                               {
                                    cout<<"data pada memory ke :"<<i+1<<endl;
                               }
                        }
                        cout<<"data ditemukkan sebanyak : "<<counter<<endl;
                }
            else
                cout<<"\ndata tidak ditemukkan \n"<<endl;
        goto ulang;   
        }
    else
        {
            cout<<"\nbatas tidak boleh lebih dari 10\nmasukkan ulang\n";
            goto ulang;
        }
   
    

}


SOLUSI_2
#include <iostream>
#include <stdio.h>

using namespace std;

int main()

{
       cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
  
   int data[10]={0,2,5,7,11,14,12,22,26,31};
   int awal,tengah,akhir,cari,flag=0,i;
   awal=0;
   akhir=9;
    cout<<endl;
    cout<<"data anda : "<<endl;
 for(i=0; i<10; i++){
    cout<<data[i]<<"  ";
 }
    cout<<endl;
   cout<<"data yang di cari : ";cin>>cari;
   while(awal<=akhir && flag==0)
   {
       tengah=(awal+akhir)/2;
       cout<<"data tengah "<<tengah<<" data ke- "<<data[tengah]<<endl;
       if(data[tengah]==cari)
       {
           flag=1;
       }
       else if (data[tengah]<cari)
       {
           awal=tengah+1;
           cout<<"cari dibagian kanan \n";
       }
           else
            {
            akhir=tengah-1;
            cout<<"cari dibagian kiri \n";
            }
   }
   if (flag==1){
    cout<<"data ditemukan ! \n";
    for(i=0; i<10; i++)
    {
   if (data[i]==cari)
   {
       cout<<"data pada indeks ke :"<<i<<endl;
   }
   }
   }
   else cout<<"data tidak ditemukan ! \n";
}

SOLUSI_3
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
    cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
         
          int data[9]={3,9,11,12,15,17,23,31,35};
          int low, high, find ;
          int flag=0,i;
          float pos1;
          int pos;
          low=0;
          high=8;
         
          cout<<"data yang anda cari : ";cin>>find;
              do
              {
                    pos1=(float) ((find-data[low])/(data[high]-data[low]))*(high-low)+low;
                    pos=floor(pos1);
                    if (data[pos]==find)
                    {
                        flag=1;
                        break;
                    }
                    if(data[pos]>find) high=pos-1;
                    else if (data[pos]<find) low=pos+1;
              }
            while(find>=data[low] && find<=data[high]);
       
              if (flag==0)
       
                {
                cout<<"data tidak ditemukan ! ";
                  }
                 
            else if (flag==1)
                {
                    for(i=0; i<9; i++)
                    {
                       if (data[i]==find)
                           {
                               cout<<"data pada indeks ke :"<<i+1<<endl;
                           }
                    }
               cout<<"data di temukan ! ";
               }
            else
                cout<<"";
}

Tidak ada komentar:

Posting Komentar