Nama : Daniel Meyer Sagala(2607016053) Statistika/B
#LATIHAN 11A
lat_x <- c(12, 7, 19, 7, 25)
print(seq_boolean(lat_x, 7))
## $ketemu
## [1] TRUE
##
## $posisi
## [1] 2
#PENJELASANNYA ; Target 7 ditemukan pada posisi ke-2. Status ketemu berubah menjadi TRUE ketika elemen kedua diperiksa. Pencarian langsung berhenti.
#LATIHAN 11B
print(seq_tanpa_boolean(lat_x, 8))
## [1] NA
print(seq_tanpa_boolean(numeric(), 8))
## [1] NA
#PENJELASANNYA ; Target 8 tidak ditemukan sehingga menghasilkan NA. Pada larik kosong, perulangan tidak dijalankan karena tidak terdapat elemen yang diperiksa.
#LATIHAN 11C
data_urut <- c(5, 10, 15, 20, 25)
print(seq_terurut(data_urut, 12))
## [1] NA
#PENJELASANNYA ; Pencarian berhenti ketika menemukan nilai 15 karena 15 lebih besar daripada target 12. Target tidak ditemukan.
#LATHAN 11D
lat_awal <- lat_x
print(seq_sentinel(lat_x, 99))
## [1] NA
print(identical(lat_x, lat_awal))
## [1] TRUE
#PENJELASANNYA ; Sentinel berada pada posisi ke-6 karena data asli memiliki 5 elemen. Hasil pencarian adalah NA karena target hanya ditemukan pada posisi sentinel. Data awal tidak berubah, dibuktikan dengan hasil TRUE.
#LATIHAN 11E
print(match(7, lat_x))
## [1] 2
print(which(lat_x == 7))
## [1] 2 4
#PENJELASANNYA ; Fungsi match() menghasilkan posisi pertama yaitu 2, sedangkan which() menghasilkan seluruh posisi target 7 yaitu 2 dan 4.
#LATIHAN 11F
print(tryCatch(
seq_boolean(c(12, NA, 19), 19),
error = function(e) conditionMessage(e)
))
## [1] "x harus larik numerik satu dimensi tanpa NA atau Inf"
#PENJELASANNYA ; Program menghasilkan error karena data mengandung NA. Berdasarkan modul, algoritma pencarian tidak menerima nilai NA atau Inf sehingga data harus divalidasi terlebih dahulu.
#LATIHAN 12A
lat_urut <- seq(10, 100, by = 10)
print(jejak_binary(lat_urut, 80))
## langkah kiri kanan tengah nilai keputusan
## 1 1 1 10 5 50 Cari kanan
## 2 2 6 10 8 80 Ditemukan
#PENJELASANNYA ; Target 80 ditemukan pada posisi ke-8 setelah 2 kali pemeriksaan. Pada langkah pertama pencarian bergerak ke kanan karena 50 lebih kecil daripada 80.
#LATIHAN 12B
print(bin_boolean(lat_urut, 10))
## [1] 1
print(bin_tanpa_boolean(lat_urut, 10))
## [1] 1
print(bin_boolean(lat_urut, 100))
## [1] 10
print(bin_tanpa_boolean(lat_urut, 100))
## [1] 10
print(bin_boolean(lat_urut, 105))
## [1] NA
print(bin_tanpa_boolean(lat_urut, 105))
## [1] NA
#PENJELASANNYA ; Target 10 ditemukan pada posisi pertama , Target 100 ditemukan pada posisi terakhir , Target 105 tidak ditemukan sehingga menghasilkan NA.Kedua varian binary memberikan hasil yang sama karena menggunakan aturan pembagian interval yang sama.
#LATIHAN 12C
data_ganda <- c(10, 20, 20, 20, 30)
print(bin_boolean(data_ganda, 20))
## [1] 3
print(bin_pertama(data_ganda, 20))
## [1] 2
#PENJELASANNYA ; Binary dasar menghasilkan posisi 3 karena langsung menemukan nilai 20 di tengah. Sedangkan binary posisi pertama menghasilkan posisi 2 karena pencarian dilanjutkan ke bagian kiri untuk menemukan kemunculan pertama target.
#LATIHAN 12D
produk <- data.frame(
kode = c(104, 101, 107, 103, 106, 102, 105),
nama = c("Telur", "Beras", "Kopi", "Minyak",
"Garam", "Gula", "Tepung"),
stok = c(25, 40, 18, 30, 50, 35, 28)
)
urutan <- order(produk$kode)
produk_urut <- produk[urutan, , drop = FALSE]
p <- bin_tanpa_boolean(produk_urut$kode, 103)
print(c(
posisi_terurut = p,
baris_asli = urutan[p]
))
## posisi_terurut baris_asli
## 3 4
print(produk_urut[p, , drop = FALSE])
## kode nama stok
## 4 103 Minyak 30
#PENJELASANNYA ; Kode produk: 103 , Posisi tabel terurut: 3 , Baris asli: 4 , Nama produk: Minyak , Stok: 30
#LATIHAN 12E
print(tryCatch(
bin_boolean(c(30, 10, 20), 20),
error = function(e) conditionMessage(e)
))
## [1] "Data harus terurut menaik"
#PENJELASANNYA ; Program menghasilkan error karena data belum terurut secara menaik. Binary search hanya dapat digunakan pada data yang sudah terurut. Walaupun target 20 tersedia, fungsi tetap menolak data tersebut karena tidak memenuhi syarat pencarian.
#LATIHAN 12F
print(c(
sequential = kunjungan_sequential(seq_len(1024), 1024),
binary = nrow(jejak_binary(seq_len(1024), 1024))
))
## sequential binary
## 1024 11
#PENJELASANNYA ; Sequential membutuhkan 1024 kali kunjungan, sedangkan binary hanya membutuhkan 11 kali kunjungan. Binary lebih sedikit melakukan pemeriksaan karena membagi data menjadi dua bagian pada setiap langkah.Namun, jumlah kunjungan tersebut hanya menghitung inti pencarian. Biaya validasi data dan persiapan pengurutan tetap harus diperhitungkan.