Algoritma Iteratif
Pendahuluan
Algoritma iteratif digunakan apabila diperlukan perulangan dalam suatu program. Dalam pemrograman R algoritma iteratif dituangkan dalam beberapa fungsi.
Tipe Perulangan | Deskripsi |
---|---|
repeat loop | Executes a sequence of statements multiple times and abbreviates the codes that manages the loop variable. |
while loop | Repeat a statement or group of statements while a given condition is true. It tests the condition before executing the loop body |
for loop | Like a while statement, except that it tests the condition at the end of the loop body |
Loop dengan for
Menggunakan for
untuk mencari bilangan maksimal
Dengan algoritma:
1. Baca data \(x_i\)
2. i = 1
3. i = i + 1
4. Jika \(x_i<x_1\), lanjutkan ke langkah 5, selainnya pertukarkan nilai \(x_1\) dengan \(x_i\)
5. Jika i < n, lanjutkan ke langkah 3. Selainnya, print \(x_1\)
# data
x = c(15,18,10,8,20)
# iterasi dengan for
n = length(x)
for (i in 2:n){
if (x[i] > x[1]){
a = x[1]
x[1] = x[i]
x[i] =a
}
}
a = x[1]
a
[1] 20
Menggunakan for
untuk mengurutkan data
Ada beberapa algoritma iteratif yang bisa diterapkan untuk melakukan pengurutan, yaitu buble sort, selection sort, insertion sort, merge sort, quick sort.
Buble Sort
Iterasi yang digunakan terdiri dari dua tingkat yaitu iterasi untuk memastikan semua elemen diperiksa, dan iterasi untuk mengakses elemen elemen vektor yang digunakan untuk penukaran elemen.
Contoh 1
Mengurutkan data {15,18,10,8,20}
# data
x = c(15,18,10,8,20)
# iterasi dengan for
n = length(x)
for (i in 1:(n-1)){
for (j in (i+1):n){
if (x[i] > x[j]){
a = x[i]
x[i] = x[j]
x[j] = a
}
}
}
x
[1] 8 10 15 18 20
Contoh 2
Mengurutkan data {3,1,4,1,5,9,2,6,5}
x <- c(3,1,4,1,5,9,2,6,5)
# Mendefinisikan objek baru yang akan digunakan untuk menampilkan hasil sortir
x_sort <- x
# Banyaknya amatan
nx <- length(x)
# Iterasi tingkat 1
for (i in 1:(nx-1)) {
# Iterasi tingkat 2
for (j in 1:(nx-i)) {
# Pemeriksaan kondisi apakah elemen ke-j lebih besar dari elemen ke-j+1
if (x_sort[j] > x_sort[j+1]) {
# Jika terpenuhi, lakukan algoritme penukaran
tmp <- x_sort[j]
x_sort[j] <- x_sort[j+1]
x_sort[j+1] <- tmp
}
}
}
x_sort
[1] 1 1 2 3 4 5 5 6 9
Membandingkan hasilnya dengan fungsi sort
[1] 1 1 2 3 4 5 5 6 9
Membuat Fungsi Pengurutan
urut <- function(x){
n = length(x)
for (i in 1:(n-1)){
for (j in (i+1):n){
if (x[i] > x[j]){
a = x[i]
x[i] = x[j]
x[j] = a
}
}
}
return(x)
}
Menggunakan fungsi
[1] 1 1 2 3 4 5 5 6 9
Menggambar Pola
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA NA NA NA NA
[2,] NA NA NA NA NA NA
[3,] NA NA NA NA NA NA
[4,] NA NA NA NA NA NA
[5,] NA NA NA NA NA NA
[6,] NA NA NA NA NA NA
# Membuat pola sesuai yang diinginkan
for (i in 1:6) {
for (j in 1:(6-i+1)) {
mat[i,j] <- 1
}
}
# Hasil Akhir
mat
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 1 1 1
[2,] 1 1 1 1 1 NA
[3,] 1 1 1 1 NA NA
[4,] 1 1 1 NA NA NA
[5,] 1 1 NA NA NA NA
[6,] 1 NA NA NA NA NA
Loop dengan while
Deret Bilangan
Pendugaan jumlah deret tak hingga
\[\mathrm{z} = 1+\frac{5}{6}+\frac{7}{11}+\frac{9}{18}+...\] Tahapan penentuan pola
i | 1 | 2 | 3 | 4 | … | |
---|---|---|---|---|---|---|
atas | 3 | 5 | 7 | 9 | … | 2i+1 |
bawah | 3 | 6 | 11 | 18 | … | \(i^2+2\) |
Pola baris bilangan tersebut adalah
\[\mathrm{z} = \sum_{i=1}^{\infty} \frac{2i+1}{i^2+2}\]
e = 10
z0 = 0
i = 1
while (e > 10^(-5)){
z1 = z0 + (2*i+1)/ (i^2+2)
e = abs(z1-z0)
z0 = z1
i = i+1
}
z0
[1] 24.49101
Pendugaan jumlah deret tak hingga
\[\mathrm{z} = 2-\frac{6}{5}+\frac{8}{10}-\frac{10}{17}+\frac{12}{26}...\] Pola baris bilangan tersebut adalah
\[\mathrm{z} = \sum_{i=1}^{\infty} (-1)^{i+1} \frac{2i+2}{i^2+1}\]
e = 10
z0 = 0
i = 1
while (e > 10^(-5)){
z1 = z0 + (-1)^(i+1)*((2*i+2)/ (i^2+1))
e = abs(z1-z0)
z0 = z1
i = i+1
}
z0
[1] 1.267197
Pendugaan jumlah deret tak hingga
\[\mathrm{z} = \frac{2}{5}+\frac{3}{40}+\frac{6}{135}+\frac{11}{320}+\frac{18}{625}+\frac{27}{1080}...\] Pola baris bilangan tersebut adalah
\[\mathrm{z} = \sum_{n=1}^{\infty} \frac{n^2+2n+3}{5n^3}\]
# Menuliskan rumus fungsi dalam bentuk function
fz2 <- function(n){
((n^2) - 2*n + 3) / (5*n^3)
}
# Mendefinisikan nilai-nilai awal (initial value)
error <- 10 #Nilai awal kriteria berhenti
z0 <- 0 #Nilai awal deret
n <- 1 #Nilai awal iterasi
# Membuat iterasi untuk mencari jumlah deret
while (error>1e-6) {
z <- z0 + fz2(n)
error <- abs(z-z0)
z0 <- z
n <- n+1
}
# Hasil Akhir
z
[1] 2.61992
[1] 2e+05
Membuat fungsi deret
dengan ketentuan
- Jika inputnya hanya fungsi deret bilangan, outputnya adalah jumlah deret dan banyak iterasi
- Jika inputnya fungsi deret bilangan dan bilangan
n
, outputnya adalahn
dan suku ke-n dari deret tersebut
deret <- function(fx,n){
if(missing(n)) {
error <- 10 #Nilai awal kriteria berhenti
z0 <- 0 #Nilai awal deret
i <- 1 #Nilai awal iterasi
# Membuat iterasi untuk mencari jumlah deret
while (error>1e-6) {
z <- z0 + fx(i)
error <- abs(z-z0)
z0 <- z
i <- i+1
}
return(list(HasilAkhir=z,BanyakIterasi=i))
} else {
return(list(SukuKe=n, Nilai=fx(n)))
}
}
Membuat fungsi persamaan deret bilangan
Menggunakan fungsi dengan input hanya berupa fungsi deret bilangan
$HasilAkhir
[1] 2.61992
$BanyakIterasi
[1] 2e+05
Menggunakan fungsi dengan input fungsi deret bilangan dan bilangan n
$SukuKe
[1] 5
$Nilai
[1] 0.0288
Referensi
Dito, Gerry Alfa dan Raharjo, Mulianto. (21 April 2021). Algoritma Iteratif. Retrieved from https://newlms.ipb.ac.id/
Wigena, Aji Hamim. (14 April 2021). STA561 Pemrograman Statistika: Algoritma Iteratif. Retrieved from https://newlms.ipb.ac.id/