Algoritma Iteratif

Algoritma adalah suatu urutan, tahapan atau langkah-langkah untuk memperoleh output yang sesuai dengan input. Algoritma yang dibuat harus logis, jelas dan efisien baik dari segi waktu pengerjaannya maupun dari segi tempat penyimpanannya.

Dalam algoritma terjadi proses looping atau perulangan. Perulangan yang iteratif adalah perulangan yang melakukan proses perulangan terhadap sekelompok instruksi. Perulangan yang dilakukan memiliki syarat tertentu. Ketika syarat sudah terpenuhi maka perulangan berhenti.

Berikut soal dan pembahasan untuk membantu memahami algoritma iteratif.

Soal dan Pembahasan 1

Soal

Susunlah sintaks R untuk penjumlahan deret berikut! \[ \begin{equation} z = 1 + 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{5} + \frac{1}{8} + \cdots \end{equation} \]

Pembahasan

Penyebut pada deret yang terdapat di soal membentuk barisan bilangan fibonacci \(\small{1 \ \ 1 \ \ 2 \ \ 3 \ \ 5 \ \ 8 \ \ 13 \ \ 21 \ \dots}\) . Untuk menentukan jumlah dari deret tersebut, terlebih dahulu dibentuk fungsi untuk menghasilkan suku ke-\(\small{i}\) barisan bilangan fibonacci, sebagai berikut:

fibonacci <- function(n){
  fib <- numeric(n)
  for (i in 1:n) {
    if (i<=2){
      fib[i] <- 1
    } else{
      fib[i] <- fib[i-1] + fib[i-2]
    }
  }
  return(fib[i])
}

# memanggil 10 suku pertama barisan fibonacci
sapply(1:10, fibonacci)
##  [1]  1  1  2  3  5  8 13 21 34 55

Setelah fungsi untuk barisan bilangan fibonacci dibentuk, deret fungsi pada soal dapat ditulis kembali menjadi \[ \begin{equation} z = \Sigma_{n=1}^\infty {\frac{1}{fibonacci(n)}}. \end{equation} \]

Selanjutnya menghitung jumlah deret fungsi sebagai berikut:

# deret fungsi
z <- function(n){
  1/fibonacci(n)
}

# mendefinisikan nilai awal
e <- 100
n <- 1
z0 <- 0

# menghitung jumlah deret
while (e > 10e-7) {
  z1 <- z0 + z(n)
  e <- abs(z1-z0)
  z0 <- z1
  n <- n+1
}
cat("jumlah deret =", z1)
## jumlah deret = 3.359884

Berdasarkan hasil yang diperoleh, jumlah deret \(\small{z = 1 + 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{5} + \frac{1}{8} + \cdots}\) adalah 3.359884.

Soal dan Pembahasan 2

Soal

Susunlah sintaks R untuk penjumlahan deret berikut! \[ \begin{equation} z = 10-2 \ \ + \ \ 0.4-0.08\ \ + \ \ \cdots \end{equation} \]

Pembahasan

Fungsi deret yang ada pada soal dapat ditulis ulang menjadi \[\begin{equation} z = \frac{10}{5^0} - \frac{10}{5^1} \ \ + \ \ \frac{10}{5^2} - \frac{10}{5^3} \ \ + \ \ \cdots. \end{equation}\]

Jika disusun kedalam suatu persamaan, maka bentuk deret fungsinya adalah \[ \begin{equation} z = \Sigma_{n=0}^\infty \ {(-1)^n \ \frac{10}{5^n}} \end{equation}\] Untuk menghitung jumlah deret tersebut, dibuat suatu fungsi sebagai berikut:

# deret fungsi
z <- function(variables) {
  ((-1)^(n)) * (10/(5^n))
  
}

# mendefinisikan nilai awal
e <- 100
n <- 0
z0 <- 0

# menghitung jumlah deret
while (e > 10e-7) {
  z1 <- z0 + z(n)
  e <- abs(z1-z0)
  z0 <- z1
  n <- n+1
}
cat("jumlah deret =", z1)
## jumlah deret = 8.333333

Berdasarkan hasil yang diperoleh, jumlah deret \(\small{z = 10-2 + 0.4-0.08 + \cdots}\) adalah 8.333333.

Soal dan Pembahasan 3

Soal

Buatlah fungsi untuk mengurutkan vektor berikut dari besar ke kecil. Bandingkan hasilnya dengan menggunakan fungsi sort yang ada di R. \[ \begin{equation} x = [13, 7, 6, 45, 21, 9, 101, 102] \end{equation} \]

Pembahasan

Fungsi untuk mengurutkan vektor x dari yang terbesar ke terkecil, sebagai berikut:

# mendefiniskan vektor x
x <- c(13,7,6,45,21,9,101,102)

sort_x <- function(x){
  n <- length(x) # jumlah amatan
  
  # iterasi 1
  for (i in 1:n) {
    j <- i+1
    # iterasi 2
    for (j in 1:n) {
      # memeriksa kondisi apakah elemen ke- j+1 lebih besar dari elemen ke- j
      if(x[i] > x[j]){
           a <- x[i] 
        x[i] <- x[j]
        x[j] <- a
      }
    }
  }
  return(x)
}  

Setelah fungsi untuk mengurutkan vektor x dibuat, selanjutnya mengurutkan vektor x menggunakan fungsi tersebut

sort_x(x)
## [1] 102 101  45  21  13   9   7   6

Berdasarkan hasil yang diperoleh, urutan vektor x menjadi \(\small{x= 102, 101, 45, 21, 13, 9, 7, 6}\). Selanjutnya mengurutkan vektor x menggunakan fungsi sort yang ada di R.

sort(x, decreasing = TRUE)
## [1] 102 101  45  21  13   9   7   6

Berdasarkan hasil yang diperoleh, urutan vektor x menjadi \(\small{x= 102, 101, 45, 21, 13, 9, 7, 6}\). Dengan demikian, dapat ditarik kesimpulan bawah fungsi untuk mengurutkan vektor x yang dibuat sort_x memiliki hasil yang sama dengan fungsi sort yang terdapat dalam R.

Demikianlah soal dan pembahasan mengenai algoritma iteratif. Semoga bermanfaat.