Dicotomic Search - Raditya Danar

12
STMIK IKMI Cirebon – Raditya Danar Dana Dicotomic Search Sebagaimana halnya dengan algoritma Sequential Search Sorted, pencarian dengan teknik Dicotomic Searchmensyaratkan agar nilai dari elemen Array sudah dalam keadaan terurut membesar. Ide dasar algoritma Dicotomic Searchadalah dengan membandingkan nilai x yang dicari dengan nilai yang terdapat pada “Indeks Tengaharray (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 Tengahdidapatkan dengan rumus Indeks Tengah = (Indeks Atas + Indeks Bawah) div 2 = (0 + 7) div 2 = 7 div 2 = 3 Jika nilai x lebih besar dari nilai yang terdapat pada “Indeks Tengaharray, 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

description

Implementing Dicotomic Search Algorithm Using JAVA

Transcript of Dicotomic Search - Raditya Danar

Page 1: Dicotomic Search - Raditya Danar

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 + Indeks Bawah) div 2

= (0 + 7) div 2

= 7 div 2

= 3

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

Page 2: Dicotomic Search - Raditya Danar

STMIK IKMI Cirebon – Raditya Danar Dana

Contoh Kasus :

Terdapat sebuah variable Array bernama “ArrInt” dengan 8 elemen, seperti gambar di bawah

ini

Indeks Ke 0 1 2 3 4 5 6 7

Nilai 1 3 5 8 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

= 3 – 1

= 2

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

= (0 + 2) div 2

= 2 div 2

= 1

Page 3: Dicotomic Search - Raditya Danar

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

Page 4: Dicotomic Search - Raditya Danar

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 x = " + x + " tidak

ditemukan");

}

}

Page 5: Dicotomic Search - Raditya Danar

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”

Page 6: Dicotomic Search - Raditya Danar

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);

}

}

Page 7: Dicotomic Search - Raditya Danar

STMIK IKMI Cirebon – Raditya Danar Dana

4. Lakukan pengujian, dengan menjalankan program

Page 8: Dicotomic Search - Raditya Danar

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 0 1 2 3 4

Nilai 90 3 8 311 1

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

Page 9: Dicotomic Search - Raditya Danar

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”

Page 10: Dicotomic Search - Raditya Danar

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

Page 11: Dicotomic Search - Raditya Danar

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 Terbesar = " +

demo1.ArrInt[demo1.nilaiMaksimum()]);

}

}

Page 12: Dicotomic Search - Raditya Danar

STMIK IKMI Cirebon – Raditya Danar Dana

4. Lakukan pengujian, dengan menjalankan program