My Blog

Algoritma Searching (Pencarian) #3

5 min read

Algoritma searching digunakan untuk menemukan data secara efisien dalam struktur data, mendukung proses pencarian user, database, dan sistem aplikasi.

Algoritma Searching (Pencarian) #3

Algoritma searching adalah teknik dalam pemrograman yang digunakan untuk mencari suatu data atau nilai tertentu di dalam struktur data seperti array, list, atau database. Algoritma ini sangat penting karena hampir semua aplikasi modern membutuhkan proses pencarian data secara cepat dan efisien.

Pemilihan algoritma searching yang tepat akan berpengaruh besar terhadap performa sistem, terutama saat menangani data dalam jumlah besar.

Tujuan Mempelajari Algoritma Searching

  • Memahami cara kerja pencarian data

  • Memilih algoritma yang sesuai dengan kondisi data

  • Meningkatkan efisiensi aplikasi

  • Mengoptimalkan proses lookup dan query data

  • Menjadi dasar pengembangan sistem skala besar

Jenis-Jenis Algoritma Searching

1️⃣ Linear Search

Pengertian

Linear Search adalah algoritma pencarian paling sederhana yang bekerja dengan memeriksa setiap elemen satu per satu hingga data ditemukan atau seluruh data telah diperiksa.

Karakteristik:

  • Tidak memerlukan data terurut

  • Mudah diimplementasikan

  • Kurang efisien untuk data besar

Contoh Kode JavaScript:

function linearSearch(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === target) {
      return i;
    }
  }
  return -1;
}

let users = ["Andi", "Budi", "Citra"];
console.log(linearSearch(users, "Budi"));

2️⃣ Binary Search

Pengertian

Binary Search adalah algoritma pencarian yang bekerja dengan membagi data menjadi dua bagian secara berulang sampai data ditemukan.

⚠️ Syarat utama: Data harus sudah terurut (sorted).

Karakteristik:

  • Sangat efisien

  • Cocok untuk data besar

  • Membutuhkan data terurut

Contoh Kode JavaScript:

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    let mid = Math.floor((left + right) / 2);

    if (arr[mid] === target) return mid;
    if (arr[mid] < target) left = mid + 1;
    else right = mid - 1;
  }
  return -1;
}

let numbers = [10, 20, 30, 40, 50];
console.log(binarySearch(numbers, 30));

3️⃣ Jump Search

Pengertian

Jump Search adalah algoritma pencarian yang melompat sejumlah langkah tertentu (biasanya √n) untuk mempercepat proses pencarian.

⚠️ Syarat: Data harus terurut.

Karakteristik:

  • Lebih cepat dari Linear Search

  • Lebih sederhana dari Binary Search

  • Cocok untuk data berukuran menengah

Contoh Kode JavaScript:

function jumpSearch(arr, target) {
  let n = arr.length;
  let step = Math.floor(Math.sqrt(n));
  let prev = 0;

  while (arr[Math.min(step, n) - 1] < target) {
    prev = step;
    step += Math.floor(Math.sqrt(n));
    if (prev >= n) return -1;
  }

  for (let i = prev; i < Math.min(step, n); i++) {
    if (arr[i] === target) return i;
  }

  return -1;
}

let data = [1, 3, 5, 7, 9, 11];
console.log(jumpSearch(data, 7));

4️⃣ Interpolation Search

Pengertian

Interpolation Search adalah algoritma pencarian yang memperkirakan posisi data berdasarkan nilai target dan distribusi data.

⚠️ Syarat: Data harus terurut dan terdistribusi secara merata.

Karakteristik:

  • Sangat cepat pada data terdistribusi merata

  • Lebih kompleks

  • Kurang efektif jika distribusi data tidak merata

Contoh Kode JavaScript:

function interpolationSearch(arr, target) {
  let low = 0;
  let high = arr.length - 1;

  while (low <= high && target >= arr[low] && target <= arr[high]) {
    let pos = low + Math.floor(
      ((target - arr[low]) * (high - low)) / (arr[high] - arr[low])
    );

    if (arr[pos] === target) return pos;
    if (arr[pos] < target) low = pos + 1;
    else high = pos - 1;
  }

  return -1;
}

let sortedData = [10, 20, 30, 40, 50];
console.log(interpolationSearch(sortedData, 40));

Contoh Penggunaan Algoritma Searching

✔ Pencarian Data User

  • Mencari username

  • Mencari ID user

  • Validasi akun

✔ Lookup Database

  • Query data berdasarkan ID

  • Filter hasil pencarian

  • Optimasi performa aplikasi

Perbandingan Singkat Algoritma Searching

Algoritma

Data Terurut

Kecepatan

Kompleksitas

Linear

Lambat

O(n)

Binary

Cepat

O(log n)

Jump

Sedang

O(√n)

Interpolation

Sangat Cepat*

O(log log n)

*Jika data terdistribusi merata

Kesimpulan

Algoritma searching merupakan bagian penting dalam pemrograman modern. Pemilihan algoritma yang tepat akan meningkatkan efisiensi, performa, dan skalabilitas aplikasi.

Semakin besar data, semakin penting memilih algoritma pencarian yang tepat.

1️⃣ Latihan & Soal (Bertahap)

🟢 LEVEL 1 — DASAR (Pemahaman Konsep)

Soal 1

Diberikan array:

[5, 12, 8, 20, 15]

Cari angka 8 menggunakan Linear Search.

Jawaban:

function linearSearch(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === target) return i;
  }
  return -1;
}

📌 Pembahasan:
Linear Search mengecek data satu per satu tanpa syarat data terurut.


Soal 2

Mengapa Binary Search tidak bisa digunakan pada array:

[10, 5, 30, 20]

Jawaban:
Karena Binary Search membutuhkan data terurut. Array tersebut acak.

🔵 LEVEL 2 — MENENGAH (Logika & Efisiensi)

Soal 3

Urutkan array dan lakukan Binary Search untuk mencari angka 30.

Jawaban:

let data = [10, 5, 30, 20].sort((a, b) => a - b);

📌 Pembahasan:
Sorting adalah prasyarat sebelum Binary, Jump, atau Interpolation Search.

🔴 LEVEL 3 — LANJUT (Simulasi Dunia Nyata)

Soal 4

Cari user berdasarkan ID dari daftar user.

let users = [
  { id: 101, name: "Andi" },
  { id: 102, name: "Budi" },
  { id: 103, name: "Citra" }
];

Jawaban (Linear Search):

function findUserById(users, id) {
  return users.find(user => user.id === id);
}

2️⃣ Visualisasi Algoritma Searching (Konseptual)

🔹 Linear Search

Data: [10, 20, 30, 40]
Cari: 30

10 ❌ → 20 ❌ → 30 ✅

🔹 Binary Search

Data: [10, 20, 30, 40, 50]
Cari: 40

Mid = 30 → kanan
Mid = 40 → ketemu

🔹 Jump Search

Data terurut, lompat √n:
[10, 20, 30, 40, 50, 60]

Lompat ke 30 → lanjut ke 50 → cek linear

📌 Visualisasi membantu memahami alur berpikir, bukan hanya kodenya.

3️⃣ Studi Kasus Backend

🎯 Studi Kasus 1: Pencarian User di Backend API

Masalah:
Backend perlu mencari user berdasarkan email saat login.

Implementasi JavaScript (Node.js):

function findUserByEmail(users, email) {
  return users.find(user => user.email === email);
}

📌 Digunakan pada:

  • Login

  • Validasi akun

  • Reset password

🎯 Studi Kasus 2: Validasi Produk di Inventory

Masalah:
Cari produk berdasarkan SKU.

function findProduct(products, sku) {
  return products.find(p => p.sku === sku);
}

📌 Umum digunakan di:

  • E-commerce

  • Warehouse system

  • POS system

4️⃣ Integrasi dengan Database & API

🔹 Contoh: API Search User (Express.js)

app.get("/users/:id", async (req, res) => {
  const id = Number(req.params.id);

  const user = await User.findOne({ id });

  if (!user) {
    return res.status(404).json({ message: "User not found" });
  }

  res.json(user);
});

📌 Di database:

  • Algoritma searching dioptimalkan oleh index

  • Konsep searching tetap sama, hanya skalanya berbeda

🔹 Contoh Query Database (MongoDB)

db.users.find({ email: "andi@email.com" })

📌 Database menggunakan:

  • B-Tree

  • Hash index
    yang secara konsep adalah searching algorithm tingkat lanjut

5️⃣ Ringkasan Pemilihan Algoritma Searching

Kondisi

Algoritma

Data kecil / acak

Linear Search

Data besar & terurut

Binary Search

Data terurut & menengah

Jump Search

Data terdistribusi merata

Interpolation Search

Database

Index-based Search


🎯 Kesimpulan Utama

✔ Searching adalah jantung sistem backend
✔ Pemilihan algoritma memengaruhi performa
✔ Di industri, searching → API → Database
✔ Konsep sederhana → sistem kompleks

Algoritma yang baik = aplikasi yang cepat & scalable

Share:
Luthfi Azizi

Luthfi Azizi

With extensive experience in the insurance industry, Luthfi Azizi combines his expertise in IT, business development, and financial analysis to help companies modernize their systems. He writes about digitalization, financial automation, and the evolving landscape of insurance technology.

luthfiazizi11@gmail.com

Comments

Loading comments...