Algoritma adalah serangkaian langkah yang terstruktur dan logis untuk menyelesaikan suatu masalah. Dalam dunia pemrograman, khususnya menggunakan Python, memahami dasar-dasar algoritma sangat krusial. Python, dengan sintaksnya yang ringkas dan mudah dibaca, menjadikannya bahasa yang ideal untuk mengimplementasikan dan menguji berbagai contoh algoritma.
Algoritma yang baik harus memiliki beberapa kriteria: jelas, tidak ambigu, memiliki input dan output yang terdefinisi, serta memiliki akhir yang pasti (terminasi). Sebelum kita masuk ke implementasi kode, mari kita bedah beberapa contoh algoritma fundamental yang sering digunakan dalam ilmu komputer.
Pencarian linier adalah algoritma paling sederhana untuk menemukan suatu elemen dalam daftar (list) dengan cara memeriksa setiap elemen satu per satu secara berurutan. Jika elemen ditemukan, indeksnya dikembalikan; jika tidak, biasanya dikembalikan nilai khusus seperti -1.
def pencarian_linier(daftar, target):
"""
Mencari nilai 'target' dalam 'daftar' menggunakan metode linier.
"""
for i in range(len(daftar)):
if daftar[i] == target:
return i # Elemen ditemukan pada indeks i
return -1 # Elemen tidak ditemukan
# Contoh Penggunaan
data_angka = [10, 5, 8, 22, 1, 40]
nilai_dicari = 22
indeks = pencarian_linier(data_angka, nilai_dicari)
if indeks != -1:
print(f"Nilai {nilai_dicari} ditemukan pada indeks: {indeks}")
else:
print(f"Nilai {nilai_dicari} tidak ditemukan dalam daftar.")
Kompleksitas waktu dari algoritma ini adalah O(n), yang berarti semakin besar datanya, semakin lama waktu yang dibutuhkan untuk pencarian dalam kasus terburuk.
Bubble Sort adalah salah satu algoritma pengurutan dasar. Cara kerjanya adalah berulang kali menukar elemen yang berdekatan jika urutannya salah. Proses ini diulang sampai tidak ada lagi pertukaran yang diperlukan, menandakan bahwa daftar sudah terurut.
def bubble_sort(arr):
n = len(arr)
# Melakukan iterasi sebanyak n-1 kali
for i in range(n):
# Iterasi bagian dalam untuk membandingkan dan menukar
# n-i-1 karena elemen terakhir sudah di tempatnya setelah setiap iterasi luar
for j in range(0, n-i-1):
# Tukar jika elemen yang ditemukan lebih besar dari elemen berikutnya
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Contoh Penggunaan
data_belum_urut = [64, 34, 25, 12, 22, 11, 90]
data_terurut = bubble_sort(data_belum_urut)
print(f"Setelah diurutkan: {data_terurut}")
Meskipun sederhana, Bubble Sort jarang digunakan dalam produksi karena performanya yang lambat, yaitu O(n²) dalam kasus rata-rata dan terburuk. Namun, ini adalah titik awal yang sangat baik untuk mempelajari konsep pengurutan.
Rekursi adalah teknik di mana sebuah fungsi memanggil dirinya sendiri untuk menyelesaikan masalah yang lebih kecil hingga mencapai kasus dasar (base case). Menghitung faktorial (n!) adalah contoh klasik implementasi rekursif.
Faktorial $n! = n \times (n-1) \times (n-2) \times \dots \times 1$, dan kasus dasarnya adalah $0! = 1$ atau $1! = 1$.
def hitung_faktorial_rekursif(n):
# Kasus Dasar (Base Case)
if n == 0 or n == 1:
return 1
# Langkah Rekursif
else:
return n * hitung_faktorial_rekursif(n-1)
# Contoh Penggunaan
angka = 5
hasil = hitung_faktorial_rekursif(angka)
print(f"Faktorial dari {angka} adalah: {hasil}")
# Output: Faktorial dari 5 adalah: 120
Dalam contoh ini, fungsi akan terus memanggil dirinya sendiri dengan nilai $n$ yang berkurang satu hingga mencapai 1, kemudian hasil perhitungan akan dikembalikan secara bertahap ke pemanggil awal.
Menguasai contoh-contoh algoritma dasar seperti pencarian, pengurutan, dan rekursi memberikan fondasi kuat dalam pemrograman. Ketika Anda menghadapi masalah yang lebih kompleks—seperti navigasi graf (Dijkstra, BFS/DFS) atau analisis data besar—pemahaman tentang bagaimana struktur langkah-langkah (algoritma) bekerja akan memandu Anda memilih solusi yang paling efisien.
Python memudahkan eksplorasi ini karena abstraksi sintaksisnya yang minimal, memungkinkan fokus utama tertuju pada logika algoritmik itu sendiri. Eksperimen dengan memodifikasi parameter atau menguji algoritma pada set data yang sangat besar adalah cara terbaik untuk benar-benar memahami kinerja dan keterbatasan dari setiap contoh algoritma Python yang telah kita bahas.