Algoritma pencarian adalah serangkaian langkah atau instruksi yang digunakan untuk mencari suatu data atau informasi tertentu dalam struktur data seperti array, list, tree, atau database. Tujuan dari algoritma pencarian adalah untuk menemukan posisi atau keberadaan data yang dicari dalam struktur data dengan cara yang efisien dan efektif.
Algoritma pencarian digunakan pada berbagai jenis aplikasi, seperti mesin pencari, permainan, dan aplikasi bisnis. Pemahaman tentang algoritma pencarian sangat penting dalam ilmu komputer karena dapat membantu dalam pemecahan masalah dan pengembangan aplikasi.
Ada beberapa jenis algoritma pencarian yang umum digunakan di antaranya:
Algoritma ini sangat sederhana dan mudah dipahami. Algoritma linear search bekerja dengan cara membandingkan setiap elemen pada list atau array secara berurutan hingga data yang dicari ditemukan atau seluruh elemen sudah dibandingkan.
Algoritma ini cocok digunakan untuk data yang jumlahnya tidak terlalu besar. Namun, jika data yang dicari berada di posisi akhir atau tidak terdapat dalam list atau array, algoritma ini akan membutuhkan waktu yang lama untuk menyelesaikan pencarian.
Algoritma binary search digunakan untuk mencari data pada list atau array yang sudah terurut. Algoritma ini bekerja dengan membandingkan nilai data yang dicari dengan nilai tengah list atau array. Jika nilai data yang dicari lebih besar dari nilai tengah, maka algoritma akan mencari pada setengah kanan list atau array, dan begitu juga sebaliknya. Binary search memiliki kompleksitas waktu yang lebih baik dibandingkan dengan linear search, namun hanya dapat digunakan pada data yang sudah teruru
Cara Kerja Binary Search
Algoritma interpolation search digunakan pada list atau array yang memiliki data terurut dan merata. Algoritma ini bekerja dengan menggunakan estimasi posisi data yang dicari berdasarkan data terkecil dan terbesar pada list atau array.
Algoritma ini akan mencari data pada posisi yang diperkirakan secara proporsional terhadap data terbesar dan terkecil. Interpolation search dapat lebih cepat daripada binary search jika data yang dicari terdistribusi secara merata, namun jika data tidak merata, algoritma ini mungkin tidak lebih baik dari binary search.
pada binary search interpolation ini mencari data dengan menggunakan Formula, yaitu sebagai berikut:
pos = low + ((cari - data[low]) * (high - low) /
(data[high] - data[low]))
Keterangan Variabel:
Pada ilustrasi digambarkan sebuah array yang menampung 10 elemen secara terurut. Kita akan mencoba mencari nilai 19 pada array dengan menggunakan pencarian interpolasi
Selanjutnya kita akan mendefinisikan beberapa variabel dengan nilainya yang kita dapat dari ilustrasi sebelumnya. Lalu kita masukkan setiap nilai tersebut ke formula pencarian interpolasi. Maka didapatlah hasil 5,27 dan kita bulatkan menjadi 5.
Setelah mendapatkan indeks pos, maka kemudian kita gunakan untuk mencari dimana angka 19 berada. Seperti yang dapat dilihat pada Pseudo Code, maka kita akan mengecek menggunakan pernyataan if else apakah nilai yang dicari > nilai pada indeks pos. Kita cek apakah 19 > 15 ? ternyata benar maka nilai pos + 1 menjadi 6. Kemudian terjadi perulangan dan terdapat pengecekan kondisi while. Setelah dicek lagi ternyata nilai yang dicari yaitu 19 sama dengan nilai pada indeks ke-6, maka nilai yang dicari telah ditemukan dan proses pencarian pun selesai.
Algoritma hash search digunakan pada struktur data hash table. Algoritma ini bekerja dengan memetakan data ke dalam index pada hash table. Setelah data dimasukkan ke dalam hash table, pencarian data hanya membutuhkan waktu konstan, yaitu O(1). Algoritma ini sangat cepat dan efisien, namun memerlukan proses pembuatan hash table yang memakan waktu dan memerlukan alokasi memori yang cukup besar.
Algoritma exponential search digunakan pada list atau array yang tidak terurut, namun harus memiliki ukuran yang cukup besar. Algoritma ini bekerja dengan mencari range atau jangkauan tempat data yang dicari berada, kemudian melakukan binary search pada jangkauan tersebut. Algoritma ini memanfaatkan fakta bahwa jika data yang dicari berada pada jangkauan yang cukup besar, maka binary search akan lebih cepat daripada linear search.
Algoritma jump search mirip dengan algoritma exponential search, namun menggunakan teknik “jump” untuk mencari jangkauan yang memungkinkan data yang dicari berada di dalamnya.
Algoritma ini bekerja dengan membagi list atau array menjadi beberapa blok atau segmen, kemudian melakukan “jump” atau melompat dari segmen ke segmen untuk mencari jangkauan yang memungkinkan data yang dicari berada di dalamnya. Setelah ditemukan jangkauan tersebut, dilakukan linear search pada jangkauan tersebut.
Algoritma ternary search digunakan pada list atau array yang sudah terurut dan memiliki data yang merata. Algoritma ini bekerja dengan membagi list atau array menjadi tiga bagian, kemudian mencari pada bagian mana data yang dicari berada. Algoritma ini menggunakan teknik rekursif dan memerlukan tiga panggilan rekursif untuk menyelesaikan pencarian. Algoritma ini sangat efisien untuk mencari data pada list atau array yang memiliki data terurut dan merata.
Dalam memilih jenis algoritma pencarian, sangat penting untuk mempertimbangkan kompleksitas waktu dan ruang, serta karakteristik dari data yang akan dicari. Setiap jenis algoritma memiliki kelebihan dan kekurangan masing-masing, sehingga pilihan tergantung pada kebutuhan aplikasi yang digunakan.
Algoritma pencarian Sekuensial adalah salah satu algoritma pencarian data yang biasa digunakan untuk data yang berpola acak atau belum terurut. Algoritma ini akan mencari data sesuai kata kunci yang diberikan mulai dari elemen awal pada array hingga elemen akhir array. Kemungkinan terbaik (best case) ketika menggunakan algoritma ini adalah jika data yang dicari terletak di indeks awal array sehingga hanya membutuhkan sedikit waktu pencarian. Sedangkan kemungkinan terburuknya (worst case) adalah jika data yang dicari ternyata terletak dibagian akhir dari array sehingga pencarian data akan memakan waktu yang lama.
Ilustrasi di atas menunjukkan bagaimana proses dari algoritma pencarian Sekuensial. Algoritma ini mencari angka 2 dengan mengecek setiap elemen pada array. Ketika sudah ditemukan maka proses pencarian dapat diakhiri.
Ilustrasi kedua mirip dengan sebelumnya, perbedaannya yaitu ilustrasi di atas menghitung berapa banyak angka yang dicari muncul pada data, sedangkan ilustrasi sebelumnya akan menghentikan pencarian ketika data yang dicari berhasil ditemukan.
Pemilihan algoritma ini dapat disesuaikan dengan kebutuhan program kita. Jika kita butuh untuk menghitung berapa banyak angka tersebut muncul pada suatu data, maka kita dapat menggunakan yang seperti ilustrasi kedua.
Berikut ini adalah beberapa karakteristik dari algoritma pencarian:
Algoritma pencarian harus memiliki kecepatan eksekusi yang efisien dalam mencari data pada list atau array yang besar. Algoritma yang efisien dapat menyelesaikan pencarian dalam waktu yang singkat, sehingga memungkinkan program atau sistem untuk bekerja lebih cepat dan efisien.
Algoritma pencarian harus akurat dan dapat menemukan data yang dicari dengan tepat. Algoritma yang akurat akan menghasilkan data yang sesuai dengan kriteria pencarian, sehingga dapat dipercaya dan diandalkan.
Algoritma pencarian harus aman dan tidak merusak data yang sedang dicari. Algoritma yang aman tidak akan memodifikasi atau merusak data yang sedang dicari, sehingga data tersebut tetap dapat digunakan dan diakses dengan aman.
Algoritma pencarian harus mudah dimodifikasi dan diintegrasikan dengan program atau sistem yang lebih besar. Algoritma yang modular dapat dimodifikasi dengan mudah untuk memenuhi kebutuhan tertentu, dan dapat diintegrasikan dengan program atau sistem yang lebih besar tanpa memerlukan perubahan yang signifikan.
Algoritma pencarian harus dapat menangani jumlah data yang semakin besar dengan baik. Algoritma yang scalable dapat menangani jumlah data yang semakin besar dengan baik tanpa mengalami penurunan performa atau kinerja.
Algoritma pencarian harus mudah dibaca dan dimengerti oleh programmer lain. Algoritma yang mudah dibaca dan dimengerti akan memudahkan programmer lain untuk memahami dan menggunakan algoritma tersebut, sehingga memungkinkan kolaborasi dan pengembangan yang lebih baik.
Algoritma pencarian sebaiknya sederhana dan tidak terlalu kompleks, sehingga dapat diimplementasikan dengan mudah. Algoritma yang sederhana akan memudahkan implementasi dan penggunaannya dalam program atau sistem.
Berikut adalah beberapa istilah dalam algoritma pencarian: