Anda di halaman 1dari 12

STMIK IKMI Cirebon Raditya Danar Dana

Dicotomic Search

Sebagaimana halnya dengan algoritma Sequential Search Sorted , pencarian dengan teknik
Dicotomic Search mensyaratkan agar nilai dari elemen Array sudah dalam keadaan terurut
membesar. Ide dasar algoritma Dicotomic Search adalah dengan membandingkan nilai x
yang

dicari

dengan

nilai

yang

terdapat

pada

Indeks

Tengah

array

(ArrInt[IndeksTengah]). Untuk mendapatkan Indeks Tengah, maka dibuat sebuah


variable untuk menampung Indeks Atas dan variable untuk menampung Indeks Bawah.
Kondisi awal pencarian nilai Indeks Atas akan berisi nilai Indeks Awal Array yaitu 0
(Indeks Atas = 0) dan Indeks Bawah akan berisi nilai jumlah elemen array, misal jika
jumlah elemen array adalah 8 maka (Indeks Bawah = 7), nilai 7 diperoleh karena Indeks
Awal dimulai dari 0, sehingga elemen Array akan berakhir pada indeks ke 7, bukan ke 8
walaupun jumlah keseluruhan elemen arrray adalah 8. Lalu nilai Indeks Tengah didapatkan
dengan rumus
Indeks Tengah =

(Indeks Atas

(0 + 7) div 2

7 div 2

+ Indeks Bawah) div 2

Jika nilai x lebih besar dari nilai yang terdapat pada Indeks Tengah array, maka pencarian
selanjutnya hanya akan di fokuskan ke setengah bagian elemen array yang berisi nilai nilai
yang lebih besar dari nilai tengah, proses seperti ini akan berlangsung sampai nilai x
ditemukan atau sampai nilai Indeks Atas Sudah lebih besar dari Indeks Bawah yang
berari nilai x yang dicari tidak terdapat dalam Array.

Untuk mendapatkan gambaran yang lebih jelas mengenai Pencarian menggunakan Dicotomic
Search, perhatikanlah ilustrasi pada contoh kasus berikut ini

STMIK IKMI Cirebon Raditya Danar Dana

Contoh Kasus :
Terdapat sebuah variable Array bernama ArrInt dengan 8 elemen, seperti gambar di bawah
ini

Indeks Ke

Nilai

12

90

311

500

Akan dicari nilai x = 5, lakukan tahap tahap sebagai berikut

Cari Nilai Indeks Atas, Indeks Bawah, dan Indeks Tengah


Indeks Atas

= 0

Indeks Bawah = 7
Indeks Tengah = (Indeks Atas + Indeks Bawah) div 2
= (0 + 7) div 2
= 7 div 2
= 3

Periksa apakah nilai yang terdapat pada Indeks Tengah adalah nilai x yang dicari
ArrInt[IndeksTengah] ArrInt[3] 8, sedangkan yang dicari adakah x = 5, sehingga
nilai x yang dicari lebih kecil dari nilai yang ditemukan (5 < 8). Sehingga dapat
disimpulkan sementara bahwa nilai x yang dicari kemungkinan terdapat di antara indeks
ke 2

Atur ulang Nilai Indeks Atas, Indeks Bawah dan Indeks Tengah
Indeks Atas

= 0

Indeks Bawah = Indeks Tengah 1


= 31
= 2
Indeks Tengah = (Indeks Atas + Indeks Bawah) div 2
= (0 + 2) div 2
= 2 div 2
= 1

STMIK IKMI Cirebon Raditya Danar Dana

Periksa apakah nilai yang terdapat pada Indeks Tengah adalah nilai x yang dicari
ArrInt[IndeksTengah] ArrInt[1] 3, sedangkan yang dicari adakah x = 5, sehingga
nilai x yang dicari lebih besar dari nilai yang ditemukan (5 > 3). Sehingga dapat
disimpulkan sementara bahwa nilai x yang dicari kemungkinan terdapat di antara indeks
ke 0 sampai dengan indeks ke 2

Atur ulang Nilai Indeks Atas, Indeks Bawah dan Indeks Tengah
Indeks Atas

= Indeks Tengah + 1
= 1+1
= 2

Indeks Bawah = 2
Indeks Tengah = (Indeks Atas + Indeks Bawah) div 2
= (2 + 2) div 2
= 4 div 2
= 2

Periksa apakah nilai yang terdapat pada Indeks Tengah adalah nilai x yang dicari
ArrInt[IndeksTengah] ArrInt[2] 5, sedangkan yang dicari adakah x = 5, sehingga
dapat disimpulkan nilai x = 5 ditemukan pada indeks ke 2

Pencarian (searching) adalah salah satu hal penting dalam banyak kasus pemrograman.
Terdapat bermacam macam algoritma pencarian yang telah dikembangkan dengan ide
dasar yang berbeda beda. Pada pembahasan kali ini akan dikususkan membahas algoritma
pencarian menggunakan metode Sequentiqal, atau Teknik Pencarian dengan cara berurut
Misalkan, jika dalam sebuah Array bernama VektorA mempunyai sejumlah elemen yang
sudah terisi dengan nilai integer. Akan dicari nilai x pada elemen elemen Array VektorA
tersebut. Jika nilai x ditemukan, maka algoritma yang dibuat akan memberikan hasil berupa
Indeks ( pada elemen Array ke berapa ) nilai x ditemukan. Sedangkan jika nilai x tidak
ditemukan di setiap elemen Array VektorA maka algoritma yang dibuat akan memberikan
hasil berupa message nilai x tidak ditemukan
Dengan menggunakan software Netbeans IDE 7.1 lakukanlah langkah langkah sebagai
berikut

STMIK IKMI Cirebon Raditya Danar Dana

1. Modifikasilah Java Class dengan nama Searching dengan menambah sebuah methode
dengan nama sequentialSearchSort()
void dicotomicSearch(int x, int jumlahArray){
boolean isFound = false;
int atas = 0;
int bawah = jumlahArray - 1;
int tengah;
while ((atas <= bawah) && (isFound == false)){
tengah = (atas + bawah) / 2;
if (this.ArrInt[tengah] == x) {
isFound = true;
System.out.println("Nilai x = " + x + " ditemukan
di Indeks ke -> " + tengah );
} else {
if (this.ArrInt[tengah] > x){
bawah = tengah - 1;
}
if (this.ArrInt[tengah] < x ) {
atas = tengah + 1;
}
}
}
if (isFound == false){
System.out.println("Nilai
ditemukan");
}
}

"

"

tidak

STMIK IKMI Cirebon Raditya Danar Dana

2. Buatlah Main Class untuk mendefiniskan object dan untuk memanggil methode
dicotomicSearch() dari Class Searching, lakukan langkah langkah berikut ini

Lakukan pengaturan seperti gambar di atas lalu tekan tombol Finish

STMIK IKMI Cirebon Raditya Danar Dana

3. Pada Jendela Code Edtor Tulislah Listing Program Berikut ini


package KelasKaryawan;
import java.util.Scanner;
public class demoDicotomicSearch {
public static void main(String[] args) {
Searching demmoDicotomic = new Searching();
int n_array;
int x;
Scanner input = new Scanner(System.in);
System.out.print("JUMLAH ELEMEN ARRAY = ");
n_array = input.nextInt();
demmoDicotomic.inputArray(n_array);
demmoDicotomic.tampilArray();
System.out.println("");
System.out.print("NILAI YANG DICARI = ");
x = input.nextInt();
demmoDicotomic.dicotomicSearch(x, n_array);
}
}

STMIK IKMI Cirebon Raditya Danar Dana

4. Lakukan pengujian, dengan menjalankan program

STMIK IKMI Cirebon Raditya Danar Dana

Pencarian Nilai Ekstrim (Maksimum dan Minimum)

Pencarian nilai ekstrim dalam sebuah variable Array dapat dibagi menjadi 2 macam, yang
pertama adalah mencari nilai terbesar (Maksimum) dan yang ke dua adalah mencari nilai
terkecil (Minimum). Teknik yang digunakan adalah dengan cara melihat satu persatu nilai
dari keseluruhan elemen array mulai dari indeks terkecil hingga indeks terbesar. Untuk
mempermudah pemahaman tentang teknik pencarian nilai ekstrim ini perhatikan contoh
sebagai berikut

Contoh Kasus:

Terdapat sebuah variable Array bernama ArrInt dengan 5 elemen, seperti gambar di bawah
ini

Indeks Ke

Nilai

90

311

Akan dicari nilai terbesar yang terdapat di variable array ArrInt. Lakukan tahap tahap
sebagai berikut

Buatlah sebuah variable untuk menyimpan nilai Indeks, dimana nilai terbesar ditemukan
IndeksMax = 0

Lakukan pengecekan dengan membandingkan nilai di setiap elemen array mulai dari
indeks ke 1 sampai indeks terakhir (indeks ke 4) untuk meng-update variable IndeksMax

Mambandingkan ArrInt[IndeksMax] dengan ArrInt[i]


ArrInt[0] dibandingkan dengan Arrint[1]
90 dibandingkan dengan 3
90 > 3
Karena ArrInt[0] > ArrInt[1] maka nilai variable IndeksMax tidak perlu diganti

STMIK IKMI Cirebon Raditya Danar Dana

Mambandingkan ArrInt[IndeksMax] dengan ArrInt[i]


ArrInt[0] dibandingkan dengan Arrint[2]
90 dibandingkan dengan 8
90 > 3
Karena ArrInt[0] > ArrInt[2] maka nilai variable IndeksMax tidak perlu diganti

Mambandingkan ArrInt[IndeksMax] dengan ArrInt[i]


ArrInt[0] dibandingkan dengan Arrint[3]
90 dibandingkan dengan 311
90 < 3
Karena ArrInt[0] < ArrInt[3] maka nilai variable IndeksMax diganti dengan nilai 3
IndeksMax = 3

Mambandingkan ArrInt[IndeksMax] dengan ArrInt[i]


ArrInt[3] dibandingkan dengan Arrint[4]
311 dibandingkan dengan 1
311 > 1
Karena ArrInt[3] > ArrInt[4] maka nilai variable IndeksMax tidak perlu diganti

Karena proses pengecekan sudah mencapai i = 4 (Indeks Terakhir), maka proses


pengecekan berhenti, dan diambil kesimpulan bahwa nilai terbesar yaitu 311 terdapat di
Indeks ke - 3

Dengan cara yang sama kita bisa mencari nilai terhecil, dengan merubah operator
pembanding dengan tanda < dana nama variable diubah menjadi IndeksMin

STMIK IKMI Cirebon Raditya Danar Dana

Dengan menggunakan software Netbeans IDE 7.1 lakukanlah langkah langkah sebagai
berikut :
1. Modifikasilah Java Class dengan nama Searching dengan menambah sebuah methode
dengan nama nilaiMaksimum()
int nilaiMaksimum(){
int indeksMax;
indeksMax = 0;
for (int i = 1; i < this.ArrInt.length; i++){
if (this.ArrInt[i] > this.ArrInt[indeksMax]){
indeksMax = i;
}
}
return indeksMax;
}

2. Buatlah Main Class untuk mendefiniskan object dan untuk memanggil methode
nilaiMaksimum() dari Class Searching, lakukan langkah langkah berikut ini

STMIK IKMI Cirebon Raditya Danar Dana

Lakukan pengaturan seperti gambar di atas lalu tekan tombol Finish


3. Pada Jendela Code Edtor Tulislah Listing Program Berikut ini
package KelasKaryawan;
import java.util.Scanner;
public class demoNilaiMaksimum {
public static void main(String[] args) {
Searching demo1 = new Searching();
int jumlah_array;
Scanner input = new Scanner(System.in);
System.out.print("Inputkan Jumlah Atray = ");
jumlah_array = input.nextInt();
demo1.inputArray(jumlah_array);
System.out.println("Nilai
demo1.ArrInt[demo1.nilaiMaksimum()]);
}
}

Terbesar

"

STMIK IKMI Cirebon Raditya Danar Dana

4. Lakukan pengujian, dengan menjalankan program

Anda mungkin juga menyukai