Laporan Mulok Raditya, Rafi, Novi, Latifah, Femy, Mery, Nuraisyah
Dicotomic Search - Raditya Danar
-
Upload
raditya-danar -
Category
Documents
-
view
59 -
download
0
description
Transcript of 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
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
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 x = " + x + " tidak
ditemukan");
}
}
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 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
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 Terbesar = " +
demo1.ArrInt[demo1.nilaiMaksimum()]);
}
}
STMIK IKMI Cirebon – Raditya Danar Dana
4. Lakukan pengujian, dengan menjalankan program