Praktikum 8 - Algoritma Iteratif

2021-11-03

Algoritma Iteratif

Sebuah proses iteratif merupakan suatu proses dalam algoritma yang melakukan perhitungan dengan hasil yang diingin menggunakan cara siklus berulang melalui sebuah operasi perulangan.

Berdasarkan pandangan ilmu pemrograman komputer, iteratif menggambarkan situasi dimana urutan instruksi dapat dieksekusi berulang kali. Dalam sekali eksekusi biasa disebut juga 1 iterasi. Dan jika iterasi dilakukan berulang kali, proses tersebut biasa dikenal sebagai loop. Sehinga proses iterasi terjadi karena adanya loop.

Algoritma iteratif

Teknik Iteratif merupakan suatu teknik pembuatan algoritma dengan pemanggilan procedure beberapa kali atau hingga suatu kondisi tertentu terpenuhi. Tidak ada variabel lokal baru Program tidak sederhana Menggunakan perulangan for dan while

Soal 1

Susunlah sintaks R untuk penjumlahan deret berikut!

fz<-function(n){
  1/((1/sqrt(5))*((((1+sqrt(5))/2)^n)-(((1-sqrt(5))/2)^n)))
}
stop.kriteria<-function(ycurrent, ybefore){
  abs(ycurrent-ybefore)
}
bataserror<-10 
nilaiawal<-0 
n<-1 
while(bataserror>0.000001) {
  nilaiZ<-nilaiawal+fz(n)
  bataserror<-stop.kriteria(nilaiZ,nilaiawal)
  nilaiawal<-nilaiZ
  n<-n+1
}
#Final Result
nilaiZ
## [1] 3.359884
bataserror
## [1] 7.427936e-07

Soal 2

Susunlah sintaks R untuk penjumlahan deret berikut!

#Nomor 2
fz <- function(n){
  (-1)^(n+1)*(10*((0.2)^(n-1)))
}
stopping_criteria <- function(y_current,y_before){
  abs(y_current-y_before)
}
#nilai awal kriteria stopping
error <- 10
#nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1
while (error>0.00001) {
  z <- z0 + fz(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}
# final result
z
## [1] 8.333332
#criteria stopping
error
## [1] 5.12e-06

Soal 3

Buat lah fungsi untuk mengurutkan vektor Berikut dari besar ke kecil. Bandingkan hasilnya dengan mengguakan fungsi sort yang ada di R.

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

# mendefinisikan objek baru yang akan digunakan untuk menampilkan hasil sortir
x_sort <- x

#jumlah amatan 
n_x <- length(x)

#iterasi tingkat 1
for(i in 1:(n_x-1)){
  #iterasi tingkat 2
  for(j in 1:(n_x-i)) {
    # Pemeriksaan kondisi apakah elemen ke-j+1 lebih besar dari elemen ke-j
    if(x_sort[j+1] > x_sort[j]) {
      # jika terpenuhi, buat tempat sementara untuk menyimpan elemen ke-j yang akan ditukar
      tmp <- x_sort[j]
      # Ganti nilai elemen ke-j dengan nilai yang ada pada elemen ke j+1
      x_sort[j] <- x_sort[j+ 1]
      # Ganti nilai elemen j+1 dengan nilai yang ada dalam objek temp
      x_sort[j+1] <- tmp
    }
  }
}

x_sort
## [1] 102 101  45  21  13   9   7   6

Dari soal tersebut dapat juga dibuat fungsi yang bernama fungsi urutan dengan yang memiliki input x dan outputnya merupakan vector yang sudah terurut!

fungsi_urutan <- function(x){
n_x <- length(x)



for(i in 1:(n_x-1)){
  for(j in 1:(n_x-i)) {
    if(x[j+1] > x[j]) {
      tmp <- x[j]
      x[j] <- x[j+ 1]
      x[j+1] <- tmp
    }
  }
  }
  return(x)
}

#mencoba menerapkan fungsi urutan
fungsi_urutan(x)
## [1] 102 101  45  21  13   9   7   6

Membandingkan kecepatan running user-defined-function pada langkah sebelumnya dang fungsi sort dengan menggunakan package microbenchmark

microbenchmark::microbenchmark(sort(x),fungsi_urutan(x))
## Unit: microseconds
##              expr  min   lq   mean median    uq   max neval
##           sort(x) 75.8 79.0 96.785  81.50 95.75 690.6   100
##  fungsi_urutan(x) 16.5 18.2 26.336  20.35 36.00  72.6   100

Reference

Arian. Teori Tentang Rekursif dan Iteratif Dalam Algoritma Pemrograman. https://www.mrtekno.net/2016/11/rekursif-dan-iteratif-algoritma-pemrograman.html

Dito, Gerry A. (Oktober, 2021). Algoritma Iteratif.https://gerrydito.github.io/Algoritma-Iteratif/

Semesta. S. (2019). Pengertian Algoritma Iteratif, Rekursif, dan Eksplorasi. https://massdieka.blogspot.com/2019/03/pengertian-algoritma-iteratif-rekursif.html