Dicotomic Search - Raditya Danar

of 12 /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

Embed Size (px)

description

Implementing Dicotomic Search Algorithm Using JAVA

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

  • 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