Algoritma merupakan urutan langkah logis untuk menyelesaikan suatu masalah dengan tujuan memperoleh keluaran (output) dari masukan (input).
Dalam pemrograman, algoritma sering kali memerlukan pengulangan (iterasi) agar dapat mencapai hasil yang diinginkan — misalnya, menemukan nilai maksimum, menyortir data, atau menghitung nilai limit dari suatu fungsi.
Ciri-ciri algoritma yang baik:
1. Harus berakhir (finite)
2. Didefinisikan secara tepat dan tidak ambigu
3. Memiliki input dan output
4. Efektif dan efisien dari segi waktu serta memori
Iteratif dengan for
Struktur for digunakan ketika jumlah iterasi sudah diketahui sebelumnya.
Umumnya dipakai untuk melakukan operasi berulang pada setiap elemen vektor atau indeks tertentu.
Contoh
Temukan nilai minimum dari vektor acak berikut menggunakan for.
set.seed(123)x <-sample(5:25, 6)x
[1] 19 23 18 7 14 6
n <-length(x)for (i in2:n) {if (x[i] < x[1]) { temp <- x[1] x[1] <- x[i] x[i] <- temp }}cat("Nilai minimum dari vektor adalah:", x[1])
Nilai minimum dari vektor adalah: 6
set.seed(123)x <-sample(5:25, 6)x
[1] 19 23 18 7 14 6
n <-length(x)for (i in2:n) {if (x[i] < x[1]) { x[1] <- x[i] x[i] <- x[1] }}cat("Nilai minimum dari vektor adalah:", x[1])
Nilai minimum dari vektor adalah: 6
Iteratif dengan while
Struktur while digunakan ketika jumlah iterasi belum diketahui, dan pengulangan dilakukan sampai suatu kondisi terpenuhi.
Contoh
Gunakan algoritma iteratif untuk mencari akar persamaan non-linear
\(f(x) = x^3 - 5x + 1 = 0\)$ menggunakan metode Newton-Raphson
x <-1# tebakan awale <-2# selisih awalwhile (e >1e-5) { x_old <- x f <- x_old^3-5*x_old +1 f_deriv <-3*x_old^2-5 x <- x_old - f / f_deriv e <-abs(x - x_old)}cat("Akar pendekatan =", x)
Akar pendekatan = 0.2016397
Metode Newton-Raphson memperbarui nilai x hingga selisih antar iterasi sangat kecil. Hasil akhir mendekati akar dari fungsi tersebut.
Pengurutan Data (Sorting)
Urutkan vektor x secara menaik menggunakan algoritma sederhana tanpa fungsi sort().
x <-c(9, 2, 7, 4, 1)n <-length(x)for (i in1:(n-1)) {for (j in (i+1):n) {if (x[i] > x[j]) { temp <- x[i] x[i] <- x[j] x[j] <- temp } }}x
[1] 1 2 4 7 9
Deret Tak Hingga (Konvergensi Iteratif)
Hitung nilai konvergen dari deret berikut:
\[
Z = \sum_{i=1}^{\infty} \frac{3i + 2}{i^2 + 5}
\]
Gunakan pendekatan hingga perubahan antar iterasi < 10⁻⁵.
e <-10z0 <-0i <-1while (e >1e-5) { z1 <- z0 + (3*i +2)/(i^2+5) e <-abs(z1 - z0) z0 <- z1 i <- i +1}cat("Nilai konvergen dari deret =", z1)
Nilai konvergen dari deret = 36.5743
Latihan
Lakukan tracing pada sintaks berikut
# Data awalx <-c(9, 2, 7, 4, 1)# Selection Sortfor (i in1:(length(x)-1)) { min_index <- ifor (j in (i+1):length(x)) {if (x[j] < x[min_index]) { min_index <- j } }# Tukar elemen temp <- x[i] x[i] <- x[min_index] x[min_index] <- temp}x # Hasil setelah diurutkan
[1] 1 2 4 7 9
Lakukan tracing pada syntaks berikut
# Data awalx <-c(9, 2, 7, 4, 1)# Insertion Sortfor (i in2:length(x)) { key <- x[i] j <- i -1while (j >0&& x[j] > key) { x[j +1] <- x[j] j <- j -1 } x[j +1] <- key}x # Hasil setelah diurutkan
[1] 1 2 4 7 9
Susunlah sintaks R untuk menghitung nilai konvergen dari deret berikut!