#1 & 2 Penelusuran SeqSearch1, SeqSearch2, dan Simulasi Tanpa Short-Circuit
seq_search_1_trace_r <- function(L, x) {
n <- length(L)
i <- 1
cat("--- R: SeqSearch1 untuk x =", x, "---\n")
while ((i <= n) && (L[i] != x)) {
cat("Putaran i =", i, ", L[", i, "] =", L[i], "!=", x, "\n")
i <- i + 1
}
if ((i <= n) && (L[i] == x)) {
cat("Ketemu di indeks ke-", i, "\n")
return(i)
} else {
cat("Tidak ditemukan (idx = 0)\n")
return(0)
}
}
seq_search_2_trace_r <- function(L, x) {
n <- length(L)
i <- 1
ketemu <- FALSE
cat("\n--- R: SeqSearch2 untuk x =", x, "---\n")
while ((i <= n) && (!ketemu)) {
cat("Putaran i =", i, ", L[", i, "] =", L[i], "\n")
if (L[i] == x) {
ketemu <- TRUE
} else {
i <- i + 1
}
}
if (ketemu) {
cat("Ketemu di indeks ke-", i, "\n")
return(i)
} else {
cat("Tidak ditemukan (idx = 0)\n")
return(0)
}
}
# Uji Coba R
L_data_r <- c(7, 3, 9, 3, 5)
seq_search_1_trace_r(L_data_r, 3)
## --- R: SeqSearch1 untuk x = 3 ---
## Putaran i = 1 , L[ 1 ] = 7 != 3
## Ketemu di indeks ke- 2
## [1] 2
seq_search_2_trace_r(L_data_r, 8)
##
## --- R: SeqSearch2 untuk x = 8 ---
## Putaran i = 1 , L[ 1 ] = 7
## Putaran i = 2 , L[ 2 ] = 3
## Putaran i = 3 , L[ 3 ] = 9
## Putaran i = 4 , L[ 4 ] = 3
## Putaran i = 5 , L[ 5 ] = 5
## Tidak ditemukan (idx = 0)
## [1] 0
# 3. Penelusuran Binary Search (BinSearch1 & BinSearch2)
bin_search_trace_r <- function(L, x) {
i <- 1
j <- length(L)
cat("\n--- R: Binary Search untuk x =", x, "---\n")
langkah <- 1
while (i <= j) {
k <- floor((i + j) / 2)
cat("Langkah", langkah, ": i =", i, ", j =", j, ", k =", k, "(L[k] =", L[k], ")\n")
if (L[k] == x) {
cat("Ketemu di indeks ke-", k, "\n")
return(k)
} else if (L[k] < x) {
i <- k + 1
} else {
j <- k - 1
}
langkah <- langkah + 1
}
cat("Tidak ditemukan.\n")
return(0)
}
# Uji Coba R
L_bin_r <- c(2, 5, 8, 12, 16, 23, 38, 56, 72, 91)
bin_search_trace_r(L_bin_r, 23)
##
## --- R: Binary Search untuk x = 23 ---
## Langkah 1 : i = 1 , j = 10 , k = 5 (L[k] = 16 )
## Langkah 2 : i = 6 , j = 10 , k = 8 (L[k] = 56 )
## Langkah 3 : i = 6 , j = 7 , k = 6 (L[k] = 23 )
## Ketemu di indeks ke- 6
## [1] 6
bin_search_trace_r(L_bin_r, 6)
##
## --- R: Binary Search untuk x = 6 ---
## Langkah 1 : i = 1 , j = 10 , k = 5 (L[k] = 16 )
## Langkah 2 : i = 1 , j = 4 , k = 2 (L[k] = 5 )
## Langkah 3 : i = 3 , j = 4 , k = 3 (L[k] = 8 )
## Tidak ditemukan.
## [1] 0
# 4. Binary Search untuk Larik Terurut Menurun (Descending)
bin_search_desc_r <- function(L, x) {
i <- 1
j <- length(L)
while (i <= j) {
k <- floor((i + j) / 2)
if (L[k] == x) {
return(k)
} else if (L[k] < x) {
j <- k - 1 # Dibalik untuk descending
} else {
i <- k + 1
}
}
return(0)
}
# Uji Coba R
L_desc_r <- c(91, 72, 56, 38, 23, 16, 12, 8, 5, 2)
print(paste("\nR Descending Index:", bin_search_desc_r(L_desc_r, 23))) # Output: 5
## [1] "\nR Descending Index: 5"
#5: Pencarian "Seattle Tacoma" pada Data precip
# Menggunakan dataset bawaan R
data("precip")
kota_terurut_r <- sort(names(precip))
bin_search_string_r <- function(arr, target) {
i <- 1
j <- length(arr)
cmp <- 0
while (i <= j) {
cmp <- cmp + 1
k <- floor((i + j) / 2)
if (arr[k] == target) {
return(list(index = k, comparisons = cmp))
} else if (arr[k] < target) {
i <- k + 1
} else {
j <- k - 1
}
}
return(list(index = 0, comparisons = cmp))
}
hasil_r <- bin_search_string_r(kota_terurut_r, "Seattle Tacoma")
cat(
"\nR - Seattle Tacoma ditemukan di indeks:",
hasil_r$index,
"dengan",
hasil_r$comparisons,
"perbandingan.\n"
)
##
## R - Seattle Tacoma ditemukan di indeks: 64 dengan 5 perbandingan.
#6. Fungsi Binary Search Rekursif
bin_search_rekursif_r <- function(L, x, i, j) {
if (i > j) {
return(0)
}
k <- floor((i + j) / 2)
if (L[k] == x) {
return(k)
} else if (L[k] < x) {
return(bin_search_rekursif_r(L, x, k + 1, j))
} else {
return(bin_search_rekursif_r(L, x, i, k - 1))
}
}
# Uji Coba R
L_rek_r <- c(2, 5, 8, 12, 16, 23, 38, 56, 72, 91)
cat(
"\nR Rekursif (Cari 23): Indeks ke-",
bin_search_rekursif_r(L_rek_r, 23, 1, length(L_rek_r)),
"\n"
)
##
## R Rekursif (Cari 23): Indeks ke- 6
#7. Perhitungan Perbandingan Maksimum Binary Search (\bm{n = 1.000.000})
n <- 1000000
max_cmp_r <- floor(log2(n)) + 1
cat(
"\nR - Untuk n =",
format(n, big.mark = ","),
", max perbandingan Binary Search =",
max_cmp_r,
"\n"
)
##
## R - Untuk n = 1e+06 , max perbandingan Binary Search = 20