stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-11
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 11: Algoritma Pencarian Data: Linear Search vs Binary Search
Program Studi Bisnis Digital • Algoritma dan Pemrograman

Algoritma Pencarian Data

Pertemuan 11 — Linear Search vs Binary Search

Bagaimana komputer menemukan satu data di antara jutaan data dalam sekejap — dua strategi dasar, satu perbedaan kecepatan yang sangat besar.

RPS MINGGU 12 • 2 × 50 MENIT

Tujuan Pembelajaran Hari Ini

Sub-CPMK minggu ini: mahasiswa mampu menerapkan algoritma pencarian data. Secara rinci, setelah pertemuan ini Anda mampu:

CAPAIAN 1 — KONSEP
MASALAH PENCARIAN
Menjelaskan apa itu searching problem dan mengapa cara mencari data memengaruhi kecepatan aplikasi.
CAPAIAN 2 — LINEAR SEARCH
CARI SATU-PER-SATU
Menulis dan menelusuri kode linear search di Python untuk data terurut maupun tidak terurut.
CAPAIAN 3 — BINARY SEARCH
BAGI DUA TERUS
Menulis dan menelusuri kode binary search di Python, memahami syarat data harus terurut.
CAPAIAN 4 — MEMILIH
EFISIENSI & KEPUTUSAN
Membandingkan kompleksitas kedua algoritma dan memilih yang tepat untuk kasus bisnis digital nyata.

Mencari Nama di Daftar Hadir vs Mencari Kata di Kamus

Bayangkan dua cara mencari sesuatu yang sudah sering Anda lakukan tanpa sadar — keduanya sebenarnya algoritma pencarian.

DAFTAR HADIR KELAS (TAK TERURUT)
CEK SATU-PER-SATU
Dari baris pertama sampai ketemu
Nama-nama tercatat sesuai urutan absen masuk, tidak alfabetis. Mencari satu nama berarti membaca baris demi baris sampai ketemu — bisa di baris pertama, bisa di baris terakhir.
KAMUS BAHASA INDONESIA (TERURUT)
LANGSUNG BUKA TENGAH
Bagi dua terus sampai ketemu
Kata tersusun alfabetis. Anda tidak membaca dari halaman pertama — Anda buka tengah, lihat lebih besar/kecil dari target, lalu buka tengah dari separuh yang tersisa.
Dua kebiasaan sehari-hari ini punya nama formal: linear search (cek satu-per-satu) dan binary search (bagi dua terus-menerus). Hari ini kita ubah keduanya jadi kode Python.
Bagian 1 dari 3
Masalah Pencarian & Linear Search
Pendekatan paling sederhana: periksa data satu demi satu sampai ketemu.
Searching Problem Linear Search

Apa Itu Masalah Pencarian Data (Searching Problem)?

Searching (pencarian) adalah proses menemukan posisi atau keberadaan satu nilai target di dalam sekumpulan data, misalnya list atau array (kumpulan data sejenis yang tersusun berurutan dengan nomor indeks, dimulai dari 0).

TIGA PERTANYAAN YANG DIJAWAB PENCARIAN DATA
  • Ada atau tidak? Apakah kode produk "SKU-2201" ada di gudang UMKM?
  • Di posisi mana? Di indeks ke berapa data pelanggan "Budi Santoso" tersimpan?
  • Seberapa cepat? Berapa lama waktu yang dibutuhkan untuk menemukannya — inilah fokus utama hari ini.
Output pencarian biasanya berupa indeks tempat data ditemukan, atau nilai penanda seperti -1 jika data tidak ada dalam kumpulan data.

Linear Search: Periksa Satu-per-Satu dari Awal

Linear search (pencarian beruntun) memeriksa setiap elemen data mulai dari indeks 0, satu demi satu, sampai nilai target ditemukan atau seluruh data habis diperiksa.

1245788235691idx 0idx 1idx 2idx 3idx 4idx 5idx 6cari 88 → ketemu di idx 3

Cari nilai 88: komputer memeriksa idx 0 (12), idx 1 (45), idx 2 (7), lalu idx 3 (88) — 4 kali perbandingan sampai ditemukan.

Linear Search: Pseudocode & Kode Python

Logikanya sederhana: loop dari indeks pertama sampai terakhir, bandingkan tiap elemen dengan target.

PSEUDOCODE
  • Mulai dari indeks 0
  • Bandingkan elemen saat ini dengan target
  • Jika sama → kembalikan indeksnya, selesai
  • Jika tidak → lanjut ke indeks berikutnya
  • Jika sampai akhir data belum ketemu → kembalikan -1
def linear_search(data, target): for i in range(len(data)): if data[i] == target: return i # ditemukan return -1 # tak ditemukan
Fungsi ini bekerja untuk data terurut maupun tidak terurut — itulah kelebihan utamanya: sederhana dan selalu bisa dipakai.

Hitung dari Nol: Waktu Pencarian Worst-Case Linear Search

Toko online punya katalog 1.000.000 produk (tak terurut). CPU mampu memeriksa 10.000.000 perbandingan/detik. Berapa lama waktu worst-case (kasus terburuk: produk dicari ada di posisi terakhir, atau tidak ada sama sekali)?

LangkahPerhitunganNilai
Jumlah produk dalam katalog (n)diberikan1.000.000
Worst-case: jumlah perbandingan = ndata dicek satu-per-satu sampai posisi terakhir1.000.000 perbandingan
Kecepatan CPU memeriksa datadiberikan10.000.000/detik
Waktu pencarian worst-case1.000.000 ÷ 10.000.0000,1 detik
WAKTU WORST-CASE
0,1 detik
Untuk 1 juta produk, kasus terburuk linear search
Bagian 2 dari 3
Binary Search: Bagi Dua Terus-Menerus
Jauh lebih cepat — dengan satu syarat wajib: data harus sudah terurut.

Binary Search: Syarat Wajib & Tiga Penanda Posisi

Binary search (pencarian biner) hanya bisa dipakai jika data sudah terurut (ascending/menaik, hasil sorting minggu lalu). Algoritma ini memakai tiga penanda posisi: low (batas kiri), high (batas kanan), dan mid (titik tengah).

715233445566778lowmidhigh
Kalau data belum terurut, binary search akan salah menyimpulkan — wajib sorting (Pertemuan 10) sebelum mencari.

Binary Search Langkah-demi-Langkah: Cari Harga Rp75.000

Array harga produk terurut (indeks 0–9): [15000, 22000, 35000, 41000, 52000, 63000, 75000, 89000, 94000, 101000]. Cari nilai 75000.

  • 1 low=0, high=9 → mid = (0+9)÷2 = 4 → data[4]=52000 < 75000 → cari di kanan, low=5
  • 2 low=5, high=9 → mid = (5+9)÷2 = 7 → data[7]=89000 > 75000 → cari di kiri, high=6
  • 3 low=5, high=6 → mid = (5+6)÷2 = 5 → data[5]=63000 < 75000 → cari di kanan, low=6
  • 4 low=6, high=6 → mid = 6 → data[6]=75000 = target → ditemukan di indeks 6!
Hanya 4 langkah untuk 10 data — padahal linear search butuh sampai 7 langkah kalau posisinya sama (indeks 6, dihitung dari 0).

Binary Search: Pseudocode & Kode Python

PSEUDOCODE
  • Set low = 0, high = panjang data - 1
  • Selama low ≤ high: hitung mid
  • Jika data[mid] == target → ditemukan
  • Jika data[mid] < target → geser low = mid+1
  • Jika data[mid] > target → geser high = mid-1
def binary_search(data, target): low, high = 0, len(data) - 1 while low <= high: mid = (low + high) // 2 if data[mid] == target: return mid # ditemukan elif data[mid] < target: low = mid + 1 # cari kanan else: high = mid - 1 # cari kiri return -1 # tak ditemukan
Prasyarat: data harus terurut sebelum fungsi ini dipanggil — misalnya lewat sorted() atau algoritma sorting dari Pertemuan 10.

Hitung dari Nol: Langkah Maksimum Binary Search

Katalog terurut berisi 1.000.000 produk yang sama seperti sebelumnya. Setiap langkah binary search membuang separuh data. Berapa langkah maksimum sampai wilayah pencarian tersisa 1 elemen?

LangkahPerhitunganNilai
Jumlah produk terurut (n)diberikan1.000.000
Coba 2 pangkat 19 — cukupkah?219524.288 (kurang dari n)
Coba 2 pangkat 20 — cukupkah?2201.048.576 (≥ n, cukup)
Langkah maksimum = pangkat 2 minimum yang cukuplog₂(1.000.000) dibulatkan ke atas20 langkah
LANGKAH MAKSIMUM BINARY SEARCH
20 langkah
Dibanding 1.000.000 langkah worst-case linear search
Bagian 3 dari 3
Efisiensi, Studi Kasus & Praktik
Membandingkan kompleksitas, menerapkan pada kasus bisnis digital, lalu berlatih.

Kompleksitas: Big-O Linear Search vs Binary Search

Kompleksitas (Big-O) adalah notasi untuk menyatakan seberapa cepat pertumbuhan waktu algoritma seiring bertambahnya ukuran data (n).

AspekLinear SearchBinary Search
Syarat dataBebas (terurut/tidak)Wajib terurut
Best case (target di awal/tengah)O(1) — 1 langkahO(1) — 1 langkah
Worst case (target di akhir/tak ada)O(n) — n langkahO(log n) — ~log₂n langkah
Untuk n = 1.000.0001.000.000 langkah20 langkah
ImplementasiSangat sederhanaSedikit lebih kompleks

Coba Sendiri: Bandingkan Semua Kelas Kompleksitas Big-O

O(n) vs O(log n) tadi hanya dua dari enam kelas kompleksitas yang umum dijumpai. Geser ukuran data (n) dan amati titik "meledak" tiap kelas pada skala logaritmik.

Visualisasi: Wilayah yang Diperiksa Tiap Algoritma

Linear search memeriksa data berurutan tanpa membuang wilayah; binary search membuang separuh wilayah di tiap langkah.

LINEAR SEARCH (diperiksa satu-per-satu)Diperiksa 5 kali sampai ketemu di kotak ke-5 — sisa 3 kotak tak perlu diperiksa lagiBINARY SEARCH (dibuang separuh tiap langkah)langkah 1: buang kiri/kananlangkah 2langkah 3–4

Coba Sendiri: Membandingkan Linear Search dan Binary Search

Cari satu nilai target pada data yang sama dengan kedua algoritma dan bandingkan jumlah langkah yang dibutuhkan.

Studi Kasus: Pencarian Produk di Marketplace UMKM

Seorang pemilik UMKM membangun aplikasi kecil untuk mengelola data pelanggan dan katalog produk tokonya secara digital.

SKENARIO A: DATA PELANGGAN BARU MASUK
  • Data pelanggan terus bertambah, urutan berubah tiap ada transaksi baru.
  • Mengurutkan ulang setiap kali ada data baru boros waktu.
  • Pilihan tepat: linear search — sederhana, tak perlu data terurut.
SKENARIO B: KATALOG PRODUK TETAP
  • Daftar kode produk (SKU) jarang berubah, bisa diurutkan sekali di awal hari.
  • Pencarian dilakukan berkali-kali sepanjang hari (tiap transaksi kasir).
  • Pilihan tepat: binary search — urutkan sekali, cari cepat berkali-kali.
Prinsip praktis: kalau data jarang berubah tapi sering dicari, urutkan lalu pakai binary search. Kalau data sering berubah, linear search lebih praktis.

Kapan Pakai Linear Search, Kapan Pakai Binary Search?

PAKAI LINEAR SEARCH JIKA
DATA KECIL / DINAMIS
Jumlah data sedikit (perbedaan kecepatan tak terasa), data sering berubah, atau data tidak/tidak mungkin diurutkan.
PAKAI BINARY SEARCH JIKA
DATA BESAR & TERURUT
Jumlah data besar, data sudah/bisa diurutkan, dan pencarian dilakukan berulang kali.
Jangan lupa: modul bisect di Python sudah menyediakan binary search siap pakai untuk data terurut — tak perlu selalu menulis ulang dari nol di proyek nyata.

Latihan Praktik: Tulis Kode di Python

Kerjakan berpasangan (10 menit), tulis kode di editor Python masing-masing, siap didiskusikan.

INSTRUKSI LATIHAN
  • Soal 1: Buat list harga produk UMKM tak terurut, minta pengguna input harga yang dicari, gunakan linear_search(), tampilkan indeksnya (atau "tidak ditemukan").
  • Soal 2: Urutkan list dari Soal 1 memakai sorted(), lalu cari nilai yang sama memakai binary_search(). Bandingkan hasilnya.
  • Soal 3 (tantangan): Tambahkan counter di kedua fungsi untuk menghitung berapa kali perbandingan terjadi, lalu bandingkan angkanya untuk data yang sama.
Kumpulkan sebagai file .py lewat platform kelas sebelum pertemuan berakhir — jadi bahan diskusi singkat di 10 menit terakhir.

Rangkuman Pertemuan 11

KonsepInti
Searching problemMenemukan posisi/keberadaan target di dalam list atau array
Linear searchCek satu-per-satu dari indeks 0; bebas syarat urutan; O(n) worst-case
Binary searchBagi dua terus lewat low/mid/high; wajib data terurut; O(log n) worst-case
1 juta dataLinear = 1.000.000 langkah — Binary = hanya 20 langkah
Kapan pakai apaData kecil/dinamis → linear; data besar & terurut → binary
Sampai jumpa di Pertemuan 12: Konsep Object-Oriented Programming!