Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Algorithms
Code

Memahami Algoritma Binary Search Di JavaScript

by
Difficulty:IntermediateLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Muhammad Naufal (you can also view the original English article)

JavaScript

Dalam posting ini, saya akan membandingkan algoritma linear search (pencarian linear) dan binary search (pencarian biner). Anda akan melihat pseudocode untuk setiap algoritmanya, bersama dengan contoh dan panduan langkah demi langkah untuk mengimplementasikannya.

Pengantar

Sebagai seorang programmer, Anda perlu menemukan solusi terbaik untuk suatu masalah sehingga kode Anda tidak hanya benar tetapi juga efisien. Memilih algoritma suboptimal dapat berarti waktu penyelesaian yang lebih lama, peningkatan kompleksitas kode, atau lebih buruknya program yang crash. Anda mungkin telah menggunakan algoritma search untuk mencari item-item dalam kumpulan data. Bahasa JavaScript memiliki beberapa method, seperti find, untuk menemukan item dalam array. Namun, methodini menggunakan linear search (pencarian linier). Algoritma linear search dimulai pada awal list dan membandingkan setiap elemen dengan search value sampai ditemukan. Ini bagus jika Anda memiliki sejumlah kecil elemen. Tetapi ketika Anda mencari di daftar besar yang memiliki ribuan atau jutaan elemen, Anda perlu cara yang lebih baik untuk menemukan item-item itu. Ini adalah saatnya Anda akan menggunakan binary search (pencarian biner). Dalam tutorial ini, saya akan menjelaskan cara kerja binary search dan bagaimana mengimplementasikan algoritmanya dalam JavaScript. Pertama, kita akan meninjau ke algoritma linear search.

Linear Search

Kami akan mulai dengan menjelaskan cara menerapkan linear search dalam JavaScript. Kami akan membuat function yang disebut linearSearch yang menerima value yang merupakan integer atau string dan array sebagai parameter. Function ini akan mencari setiap elemen dalam array untuk value-nya dan mengembalikan (return) posisi dari value tersebut dalam array jika ditemukan. Jika nilainya tidak dalam array, maka akan mengembalikan -1. Misalnya, memanggil linearSearch(1, [3, 4, 2, 1, 5]) akan me-return 3, dan memanggil linearSearch(0, [3, 4, 2, 1, 5]) akan me-return -1.

Inilah beberapa pseudocode untuk function kita:

Implementasi JavaScript pada Linear Search

Berikut ini adalah implementasi JavaScript dari algoritma linear search:

Penting untuk dicatat bahwa algoritma linear search tidak perlu menggunakan list yang diurutkan. Algoritma ini juga dapat di-customize untuk digunakan dalam skenario yang berbeda seperti mencari array dari objek berdasarkan petunjuknya. Jika Anda memiliki array data customer yang menyertakan key untuk nama depan dan belakang, Anda bisa menguji apakah array tersebut memiliki data seorang customer dengan nama depan yang spesifik. Dalam hal ini, daripada memeriksa apakah list[index] sama dengan value pencarian kita, Anda baiknya memeriksa list[index].first.

Dalam contoh di atas, saya menggunakan function linearSearch pada array dengan 5 elemen. Dalam kasus terburuk, ketika value pencarian tidak ada dalam daftar atau di akhir daftar, function tersebut harus membuat 5 perbandingan. Karena array kami sangat kecil, tidak perlu mengoptimalkan dengan menggunakan algoritma yang berbeda. Namun, di luar titik tertentu, tidak lagi efisien untuk menggunakan algoritma linear search, dan saat itulah menggunakan algoritma binary search akan lebih baik.

Binary Search

Bayangkan Anda memainkan permainan tebak angka. Anda diminta menebak angka antara 1 dan 100. Jika nomor Anda terlalu tinggi atau terlalu rendah, Anda akan mendapatkan petunjuk. Apa strategi Anda nantinya? Apakah Anda memilih angka secara acak? Akankah Anda mulai dengan 1, lalu 2, dan seterusnya sampai Anda menebak dengan benar? Sekalipun Anda memiliki tebakan tak terbatas, Anda perlu membuat tebakan yang benar hanya dalam beberapa upaya. Karena itu, Anda bisa mulai dengan menebak 50. Jika angkanya lebih tinggi, Anda bisa menebak 75. Jika angkanya lebih rendah, maka itu berarti angkanya antara 50 dan 75, dan Anda akan memilih angka yang ada di tengah. Anda akan terus seperti ini sampai Anda tiba di nomor yang benar. Ini mirip dengan cara kerja binary search.

Tidak seperti linear search, binary search menggunakan daftar yang diurutkan. Untuk mencari value, pertama-tama Anda membandingkan nilai dengan elemen di tengah daftar. Jika mereka sama, nilai pencarian telah ditemukan. Jika nilai pencarian lebih besar dari elemen tengah, Anda mencari bagian atas data. Anda kemudian membandingkan elemen tengah bagian ini dengan nilai pencarian. Atau, jika item kurang dari elemen tengah, Anda mencari di bagian bawah daftar dan membandingkan nilai tengahnya. Daftar ini berulang kali dibagi dua hingga elemen ditemukan atau tidak ada lagi item untuk dicari.

Untuk mencari 9 dalam daftar:

Pertama kali kami menemukan elemen tengah. Ini adalah elemen di posisi Math.floor((first + last)/2), di mana first adalah index pertama, dan last adalah index terakhir. Kami memilih untuk membulatkan sehingga jika hasilnya adalah fraction, itu menjadi bilangan bulat. Elemen tengah dalam daftar ini adalah 5. Nilai pencarian kami 9 lebih besar dari 5, jadi kami mencari daftar:

Elemen tengah dari bagian ini adalah 8. Sembilan lebih besar dari 8, jadi kami mencari daftar:

Elemen tengah adalah 9, sehingga kami dapat menghentikan pencarian kami di sini.

Berikut beberapa pseudocode yang mengekspresikan algoritma di atas untuk binary search:

Implementasi JavaScript dari Binary Search

Sekarang mari kita membuat kode algoritma binary search dalam JavaScript!

Kami akan membuat function, binarySearch, yang menerima value dan array sebagai parameter. Function ini akan mengembalikan (return) index tempat value tersebut muncul dalam daftar jika ditemukan. Jika nilainya tidak ditemukan, ia mengembalikan -1. Ini adalah implementasi kami yang ditulis dalam JavaScript:

Kesimpulan

Dalam tutorial ini, kita melihat bagaimana menerapkan algoritma linear search dan binary search. Algoritma linear search lebih sederhana dan tidak memerlukan array yang diurutkan. Namun, itu tidak efisien untuk digunakan dengan array yang lebih besar. Dalam kasus terburuk, algoritmanya harus mencari semua elemen yang membuat perbandingan n (di mana n adalah jumlah dari elemen-elemen yang ada).

Di sisi lain algoritma binary search mengharuskan Anda untuk mengurutkan array terlebih dahulu dan lebih rumit untuk diimplementasikan. Namun, ini lebih efisien bahkan ketika mempertimbangkan waktu penyortiran. Sebagai contoh, sebuah array dengan 10 elemen akan membuat paling banyak 4 perbandingan untuk pencarian biner vs 10 untuk pencarian linier — bukan perbaikan besar. Namun, untuk array dengan 1.000.000 elemen, kasus terburuk dalam binary search hanya 20 perbandingan. Itu peningkatan besar dibandingkan linear search!

Mengetahui cara menggunakan binary search bukan hanya sesuatu untuk berlatih untuk pertanyaan wawancara. Ini adalah keterampilan praktis yang dapat membuat kode Anda bekerja lebih efisien.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.