Langsung ke konten utama

SEARCHING ARRAY

 Kali ini akan dibahas proses pencarian / searching data pada suatu array / barisan data. Jika diketahui ada sebuah array / barisan data bernama A yang menampung 10 data yang bertipe integer sbb A={1,2,3,4,8,5,7,9,6,0} dan kita diberi tugas untuk mencari beberapa data misal:

  • Jika data yang akan dicari dalam array A adalah 6, maka dengan cepat dapat kita ketahui bahwa data 6 ada dalam array A pada index ke-9 (index pada array dimulai dari 0)
  • Sedangkan jika data yang akan dicari dalam array A adalah 12, maka dapat disimpulkan bahwa array A tidak memiliki data 12 tersebut.
Sesudah memahami proses pencarian data yang sederhana tersebut dalam pikiran kita, sekarang permasalahannya adalah bagaimana mengimplementasikannya kedalam program ?.
Pada umumnya dikenal dua metode searching antara lain : Sequensial search dan binary search, Untuk lebih memahami, dimulai dari metode yang paling sederhana terlebih dahulu yaitu sequensial search.

Sequensial search
Disebut juga sebagai metode pencarian urut adalah metode pencarian yang paling mudah.

Sequential search memiliki proses sebagai berikut :
  • Tentukan banyaknya data yang akan di olah, misal banyak data adalah N.
  • Tentukan data apa yang akan dicari, misal data yang akan dicari adalah C.
  • Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan, missal counternya adalah K.
  • Inisialisasikan K =0
  • Lakukanlah perulangan sebanyak N kali
  • Dalam tiap proses perulangan tersebut periksalah apakah data yang sedangpakah data ke tesebut cisal oses sebagai berikut:
  • ketemu.
  • n yang paling mudah. ebih baik kita mulai dari metode yang diolah sama dengan data yang dicari.
  • Jika ternyata sama K=K+1
  • Jika tidak, lanjutkan proses perulangan .
  • Setelah proses perulangan berhenti, periksalah nilai K.
  • Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan tampilkan nilai K ke layer sebagai jumlah data yang ditemukan.
  • Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan tampilkan ke layar bahwa data tidak ditemukan
  • Proses selesai.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.

Misalkan pada perulangan yang pertama kita masukkan data sebagai berikut :

Array A (berisi data yang akan diolah)
ISI
1
3
5
8
6
5
7
11
9
0
INDEX
0
1
2
3
4
5
6
7
8
9
Data yang akan dicari K=5
Proses pencarian / proses perulangan yang kedua

Array A (berisi data yang akan diolah)
ISI13586571190
INDEX0123456789
Data ditemukan ketika i = 2
Maka K++ menjadi 1, artinya ada 1 data dalam array A
Array index akan menyimpan index tempat data tersebut ditemukan pada array A

Array index (berisi index data yang ditemukan pada array A)
ISI2         
INDEX0123456789
Data ditemukan ketika i = 5
Maka K++ menjadi 2, artinya ada 2 data dalam array A
Array index akan menyimpan index tempat data tersebut ditemukan pada array A

Array index (berisi index data yang ditemukan pada array A)
ISI25        
INDEX0123456789
Proses pencarian data selesai dan tampilkan hasil output
Data 5 yang dicari ada 2 buah   ß ambil dari variable K
Data tersebut terdapat dalam index ke: 2 5 ß ambil dari array index.

Binary search
Proses pencarian binary search hanya dapat dilakukan pada kumpulan data yang sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah, data yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari data yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Kemudian ujung data pada setiap bagian dibandingkan lagi dengan nilai yang akan dicari.

#include<stdio.h>void main()
{
//deklarasi variabel
int A[10], i,j,k,tkr,top,bottom,middle,tm;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("Data ke-%d:",i+1);
scanf("%d",&A[i]);
}
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pengurutan data

for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if (A[i]>A[j])
{
tkr=A[i];
A[i]=A[j];
A[j]=tkr;
}
}
}
//proses pencarian data
tm=0;
top=9;
bottom=0;
while(top>=bottom)
{
middle=(top+bottom)/2;
if(A[middle]==k)
{
tm++;
}
if(A[middle]<k)
{
bottom=middle+1;
}
else
{
top=middle-1;
}
}
if (tm>0)
{
printf("Data %d yang dicari ada dalam array\n",k);
}
//jika tidak ditemukan
else
{
printf("Data tidak ditemukan dalam array\n");
}
}
Coding Program Binary Search untuk dicoba

Contoh kasus:

Ada 12 data 11 13 15 18 23 27 29 31 54 58 59 61
Data yang akan dicari : 13
  • Proses 1
11 13 15 18 23 27 29 31 54 58 59 61 lebih besar dengan data yg akan dicari , lakukan pembagian data
  • Proses 2
11 13 15 18 23 27 lebih besar dari data yang dicari, bagi 2 29 31 54 58 59 61
  • Proses 3
11 13 15 lebih besar dari data yang dicari, bagi 2 18 23 27 29 31 54 58 59 61
  • Proses 4
11 lebih kecil dari data yang dicari, abaikan saja 13 15 lebih besar dari data yang dicari, bagi 2 18 23 27 29 31 54 58 59 61
  • Proses 5
11 13 sesuai data yang dicari 15 lebih besar dari data yang dicari 18 23 27 29 31 54 58 59 61
Dari proses diatas dapat disimpulkan bahwa binary search akan membagi-bagi sekumpulan data menjadi 2 bagian sampai data yang dicari ditemukan.

Kesimpulan
Sequential search lebih efektif jika digunakan pada sekumpulan data yang sedikit, sedangkan binary search efektif jika digunakan pada sekumpulan data yang berjumlah banyak.
Sequential search dapat digunakan pada sekumpulan data yang urut  ataupun tidak urut, sedangkan binary search harus pada data yang sudah urut.

Interpolation search
Proses pencarian data ini hampir sama dengan proses pencarian binary search, pencarian ini juga dilakukan pada kumpulan data yang sudah urut. Akan tetapi jika pada binary search kita membagi data menjadi 2 bagian tiap prosesnya, pada interpolation search kita akan membagi data menurut rumus sebagai berikut:

Posisi = ( kunci – data[low] / data[high] – data[low] ) * ( high – low ) + low

Singkatnya proses pencarian interpolation search hampir mirip dengan proses pencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan cara memperkirakan letak data.

Misal terdapat data sebagai berikut:

Kode                Judul                                                 Buku Pengarang
025                  The C++ Programming           James Wood
034                  Mastering Delphi 6                 Marcopolo
041                  Professional C#                      Simon Webe
056                  Pure JavaScript v2                  Michael Bolton
063                  Advanced JSP & Servlet        David Dunn
072                  Calculus Make it Easy            Gunner Christian
088                  Visual Basic 2005 Express      Antonie
096                  Artificial Life : Volume 1       Gloria Virginia

Kunci Pencarian ? 088
Low ? 0
High ? 7
Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]
Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005
Kunci Pencarian ? 060
Low ? 0
High ? 7
Posisi = (060 – 025) / (096 – 025) * (7 – 0) + 0 = [3]
Kunci[3] < kunci pencarian, maka teruskan
Low = 3 + 1 = 4
High = 7
Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.
Berarti tidak ada kunci 060.
#include<stdio.h>void main()
{
//deklarasi variable
int A[10], i,j,k,tkr,low,high,pos,tm;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("data ke-%d:",i+1);
scanf("%d",&A[i]);
}
//Input data yang akan dicari
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pengurutan data
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if (A[i]>A[j])
{
tkr=A[i];
A[i]=A[j];
A[j]=tkr;
}
}
}
//proses pencarian data
tm=0;
high=9;
low=0;
do
{
pos = ((k - A[low]) / (A[high] - A[low]))*(high-low) + low;
if (A[pos] == k)
{
tm++;
break;
}
if (A[pos] > k)
high = pos-1;
else
if (A[pos] < k)
low = pos + 1;
}
while(k >= A[low] && k <= A[high]);
if (tm>0)
{
printf("data %d yang dicari ada dalam array\n",k);
}
//jika tidak ditemukan
else
{
printf("data tidak ditemukan dalam array\n");
}
}
Coding Program Interpolation Search untuk dicoba
 
Array Splice/Explode
Secara harafiah, dapat diartikan sebagai metode untuk memecah-mecah array. Pemecahan array itu sendiri, tergantung berdasarkan apa array akan dipecah.

 Agar lebih jelas, lihat ilustrasi array splice pada gambar berikut :
CharPAK ANTON
Indeks012345678
CharPAK ANTON
Indeks1000 11111
Indeks2012 01234
Ada pemecahan dari array of character 1 dimensi menjadi array of character 2 dimensi berdasarkan spasi pada inputan stringnya.

Coba coding array explode dan searchingnya berikut ini :

#include <stdio.h>#include <string.h>
void main()
{
char str[100],cari[100];
char hasil[100][100];
int n,i,j,t,a,b,c,d,e;
printf("Masukkan string: ");
gets(str);
n=strlen(str);
j=0;
for(i=0;i<n;i++)
{
if (i!=(n-1))
{
if(str[i]==32)
j++;
}
else if(i==(n-1))
j++;
}
t=0;
for(i=0;i<j;i++)
{
e=0;
for(a=t;a<n;a++)
{
if(str[a]!=32)
{
hasil[i][e]=str[a];
printf("Indeks [%d][%d] = %c\n",i,e,hasil[i][e]);     //untuk melihat hasil splice
e++;
}
else
{
t=a+1;
break;
}
}
printf("\n");
}

printf("Kata yang ingin dicari : ");
gets(cari);
b=strlen(cari);
printf("Panjang kata cari %i\n",b);
c=-1;
d=0;
for(i=0;i<j;i++)
{
t=e=0;
for(a=0;a<n;a++)
{
if(hasil[i][a]<=0 && cari[e]<=0)
break;
else
{
if(cari[e]==hasil[i][a])
t++;
}
e++;
}

if(t==b)
{
c=i;
break;
}
}
if(c!=-1)
{
printf("Kata %s yang dicari ada di indeks [%d][%d] sampai [%d][%d]\n",cari,c,0,c,a-1);
}
else
printf("Kata tidak ada dalam string!\n");
}
Pengembangan:
  
 
Ganti coding program diatas agar array yang ada bisa ditentukan ukurannya oleh user (array dinamis) [gunakan template program yang telah ada]

 
Buat menu searching untuk menggabungkan ketiga metode searching tersebut. Dibuat dalam bentuk fungsi!
 
 
Buat array explode untuk memecah input NIM menjadi seperti berikut:à Input = 22053752
à Output = 22 05 3752 (dipisah berdasarkan kode jurusan, angkatan dan nomor mahasiswa)

Sumber :  : nbbajry.blog.com










Komentar

Postingan populer dari blog ini

HSI-SILSILAH 01- HALAQOH 22 - TAKUT KEPADA ALLAH

السّلام عليكم ورحمة الله و بر كاته  ... الحمد لله و الصلاة والسلام على رسول الله و على اله و صحبه اجمعين ꜜꜜꜜ     Diantara keyakinan seorang muslim, bahwa manfaat dan mudhorot adalah di tangan Allah semata. Seorang muslim tidak takut kecuali kepada Allah dan tidak bertawakal kecuali hanya kepada Allah.     Takut kepada Allah yang dibenarkan adalah takut yang membawa pelakunya kepada merendahkan diri dihadapan Allah, mengagungkan-Nya dan membawanya untuk menjauhi larangan Allah dan melaksanakan perintah-Nya.     Bukan takut yang berlebihan yang membawa kepada keputusasaan terhadap Rahmat Allah dan juga bukan takut yang terlalu tipis yang tidak membawa pemiliknya kepada ketaatan kepada Allah.      Takut seperti ini adalah ibadah, tidak boleh sekali-kali seorang muslim menyerahkan takut seperti ini kepada selain Allah, barangsiapa menyerahkannya kepada selain Allah, maka dia telah terjerumus kedalam syirik besar yang dapat men...

HSI-SILSILAH 05 - HALAQOH 14 - Tanda-Tanda Besar Dekatnya Hari Kiamat

 السّلام عليكم ورحمة الله و بر كاته  ... الحمد لله و الصلاة والسلام على رسول الله و على اله و صحبه اجمعين ꜜꜜꜜ Tanda-tanda besar dekatnya hari kiamat adalah 10 tanda menjelang datangnya hari kiamat. Yang apabila sudah muncul 10 tanda tersebut, maka akan terjadilah hari kiamat. Tanda-tanda besar tersebut apabila muncul satu, maka akan segera diikuti oleh yang lain. Suatu saat Nabi Muhammad shallallāhu ‘alayhi wa sallam melihat para Shahābat sedang saling berbicara.      Maka Beliau bertanya, “Apa yang sedang kalian bicarakan?”      Merekapun menjawab, “Kami sedang mengingat hari kiamat.”      Maka, Beliau Shallallāhu ‘Alayhi wa Sallam bersabda : إِنَّهَا لَنْ تَقُومَ حَتَّى تَرَوْنَ قَبْلَهَا عَشْرَ آيَاتٍ “Sesungguhnya tidak akan bangkit hari kiamat tersebut sampai kalian melihat sebelumnya 10 tanda-tanda.” Kemudian Beliau Shallallāhu ‘Alayhi wa Sallam menyebutkan 10 tanda tersebut. Asap Dajjal Daabbah (seekor hewan melata) Terbitnya...

HSI-SILSILAH 01- HALAQOH 19 - BERSUMPAH DENGAN SELAIN NAMA ALLAH

  السّلام عليكم ورحمة الله و بر كاته   ... الحمد لله و الصلاة والسلام على رسول الله و على اله و صحبه اجمعين ꜜꜜꜜ     Sumpah adalah menguatkan perkataan dengan menyebutkan sesuatu yang dinamakan baik oleh yang berbicara maupun yang di ajak bicara.     Kalau bahasa arab makan menggunakan huruf 'و' atau 'ب' atau 'ت' adapun bahasa indonesia maka menggunakan kara 'demi'.     Bersumpah hanya diperbolehkan dengan nama Allah semata, misalnya dengan mengatakan : ' Wallahi ' , Demi Rabb yang menciptakan langit dan bumi, Demi Dzat yang jiwaku berada di tangan-Nya, Dan lain-lain.     Adapun makhluk, bagaimanapun agungnya di mata manusia, maka tidak boleh kita bersumpah dengan namanya. Misalnya dengan mengatakan ; Demi Rasulullah, Demi Ka'bah, Demi Jibril, Demi langit dan bumi, Demi bulan dan bintang, Dan lain-lain.     Ini semua termasuk jenis pengagungan terhadap makhluk yang terlarang.     Rasulullah Sholallahu 'alayhi Wa S...