Modul 8
Modul 8
101072300155
S1-TT-KJ-23-03
Macam-macam Searching :
2. Menurut kalian, searching manakah yang paling cepat menemukan data dengan jumlah
banyak, diantara sequential search dan binary search? Jelaskan alasannya!
Kompleksitas Waktu :
- Sequential Search : Memiliki kompleksitas waktu O(n), di mana n adalah jumlah elemen
dalam data. Ini berarti waktu yang dibutuhkan untuk mencari data meningkat secara
linear dengan jumlah elemen. Saat jumlah elemen meningkat, waktu yang dibutuhkan
untuk pencarian akan meningkat secara proporsional.
- Binary Search : Memiliki kompleksitas waktu O(log n), di mana n adalah jumlah elemen
dalam data. Ini berarti waktu yang dibutuhkan untuk mencari data meningkat secara
logaritmik dengan jumlah elemen. Meskipun data lebih banyak, jumlah iterasi yang
diperlukan untuk menemukan elemen tetap terbatas, sehingga waktu yang dibutuhkan
untuk pencarian cenderung lebih sedikit daripada sequential search.
Caa Kerja :
- Sequential Search : Melibatkan pemeriksaan setiap elemen satu per satu dari awal
hingga elemen yang dicari ditemukan. Ketika data banyak, proses ini bisa memakan
banyak waktu karena harus memeriksa semua elemen, terutama jika elemen yang dicari
berada di akhir atau tidak ada dalam data.
- Binary Search : Mengasumsikan data dalam keadaan terurut. Prosesnya membagi data
menjadi dua bagian setiap kali, kemudian memeriksa apakah elemen yang dicari berada
di setengah data pertama atau kedua. Ini berlanjut hingga elemen ditemukan atau tidak
ada lagi data yang perlu diperiksa. Karena membagi data setiap kali, binary search
cenderung lebih efisien dalam menemukan elemen.
Jadi, dalam kasus mencari data dalam jumlah banyak, binary search lebih cepat karena
memiliki kompleksitas waktu yang lebih baik dan cara kerja yang lebih efisien daripada
sequential search.
Prinsip kerja Binary Search didasarkan pada pendekatan "divide and conquer", di mana data
terus dibagi menjadi bagian-bagian yang lebih kecil sampai elemen yang dicari ditemukan
atau tidak ada lagi data yang tersisa untuk diperiksa. Hal ini membuat Binary Search menjadi
metode pencarian yang sangat efisien terutama pada data yang besar dan terurut.
4. Menurut kalian, apa yang terjadi bila menggunakan binary search pada data yang tidak
terurut? Jelaskan alasannya!
Jika menggunakan binary search pada data yang tidak terurut, hasilnya tidak dapat diprediksi
dengan akurat dan kemungkinan besar tidak akan menemukan elemen yang dicari dengan
benar. Hal ini disebabkan oleh beberapa alasan:
1. Prinsip Binary Search : Binary search memerlukan bahwa data telah diurutkan terlebih
dahulu. Algoritma ini bekerja dengan membagi data menjadi dua bagian setiap kali, dan
mengasumsikan bahwa data dalam keadaan terurut. Jika data tidak terurut, pembagian
data menjadi dua bagian tidak akan bermakna, dan algoritma tidak akan berfungsi
sebagaimana yang diharapkan.
2. Pengecualian Error : Saat menggunakan binary search pada data yang tidak terurut, hasil
pencarian bisa jadi tidak konsisten dan tidak dapat diandalkan. Algoritma tersebut
mungkin saja menemukan elemen yang dicari secara kebetulan, tetapi hal ini tidak
menjamin bahwa pencarian akan berhasil setiap saat atau memberikan hasil yang akurat.
3. Efisiensi : Binary search pada data yang tidak terurut bisa memakan waktu yang lebih
lama daripada menggunakan metode pencarian lain yang lebih cocok untuk data tidak
terurut, seperti sequential search. Hal ini karena binary search tidak dapat
memanfaatkan sifat terurutnya data untuk mengurangi jumlah perbandingan yang
diperlukan.
Jadi, menggunakan binary search pada data yang tidak terurut tidak disarankan karena tidak
sesuai dengan prinsip dasar algoritmanya dan hasilnya tidak dapat diandalkan. Lebih baik
menggunakan metode pencarian lain yang cocok untuk data tidak terurut, seperti sequential
search atau metode pencarian yang sesuai dengan sifat data yang dimiliki.
1. Inisialisasi Variabel : program dimulai dengan menginisialisasi variabel ‘i’ dengan nilai O.
Variabel ‘i’ ini akan digunakan sebagai indeks untuk mengakses elemen-elemen dalam array
2. Pencarian Sequential : Dilakukan proses pencarian sekuensial (sequential search) dengan
menggunakan loop ‘while’. Loop ini akan terus berjalan selama kondisi ‘(i<= n-1) && (a[i] !=
cari)’ terpenuhi. Artinya, loop akan berhenti jika ‘i’ sudah mencapai batas atas array atau jika
elemen yang ditemukan sama dengan elemen yang dicari.
3. Increment Index : Setiap iterasi dalam loop, nilai indeks ‘i’ akan ditambahkan 1 dengan
pernyataan ‘i = i + 1’. Hal ini bertujuan untuk memindahkan pencarian ke elemen berikutnya
dalam array.
4. Pengecekan Data : Setelah loop berakhir, dilakukan pengecekan apakah elemen yang
ditemukan sama dengan elemen yang dicari. Jika ya, maka cetak pesan "Data ditemukan
pada urutan : %d" diikuti dengan indeks elemen tersebut ditambah 1 (karena indeks dimulai
dari 0). Jika tidak, cetak pesan "Data tidak ditemukan".
6. Buatlah program menggunakan BINARY SEARCH untuk menemukan angka yang telah
diinputkan user secara acak, urutkan data terlebih dahulu. (Gunakan bubble sort)
Contoh :
=== INPUT ===
Banyak angka : 5
Angka 1 : 8
Angka 2 : 2
Angka 3 : 6
Angka 4 : 3
Angka 5 : 1
Angka yang dicari : 3
=== OUTPUT ===
Angka yang sudah terurut : 1 2 3 6 8
Angka 3 ditemukan pada urutan ke-3
JAWAB :
#include <stdio.h>
int main() {
int n, i, angkaDicari;
printf("Banyak angka: ");
scanf("%d", &n);
int arr[n];
// Input angka
for (i = 0; i < n; i++) {
printf("Angka %d: ", i+1);
scanf("%d", &arr[i]);
}
return 0;
}
7. Buatlah program mencari nama dan nim mahasiswa yang telah diinputkan user secara acak,
urutkan nama terlebih dahulu. (ascending)!
Contoh :
===INPUT===
Jumlah Mahasiswa : 3
Mahasiswa 1 : Ghufron
Nim : 110223
Mahasiswa 2 : Rayhan
Nim : 001231
Mahasiswa 3 : Andriansyah
Nim : 913211
===OUTPUT===
Hasil Pengurutan :
1. Nama : Andriansyah
NIM : 110223
2. Nama : Ghufron
NIM : 001231
3. Nama : Rayhan
NIM : 913211
JAWAB :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAMA_LENGTH 50
#define MAX_NIM_LENGTH 10
typedef struct {
char nama[MAX_NAMA_LENGTH];
char nim[MAX_NIM_LENGTH];
} Mahasiswa;
int main() {
int jumlah_mahasiswa, i;
char nim_cari[MAX_NIM_LENGTH];
printf("\nNIM Mahasiswa yang dicari: ");
scanf("%s", nim_cari);
return 0;
}
8. Buatlah program menggunakan sequential search untuk mencari suatu barang dari beberapa
barang yang telah diinputkan!
a. Jenis makanan
b. Jenis minuman
NIM ganjil mengerjakan point a, NIM genap mengerjakan poin b
Contoh program a:
==INPUT==
Banyak Makanan : 3
Makanan di piring 1: Perkedel
Makanan di piring 2: Tahu
Makanan di piring 3: Tempe
Makanan yang ingin dicari : Tahu
==OUTPUT==
Tahu terdapat pada piring 2
Contoh program b:
==INPUT==
Banyak Minimun : 3
Minuman di gelas 1: Susu
Minuman di gelas 2: Kopi
Minuman di gelas 3: Teh
Minuman yang ingin dicari : Teh
==OUTPUT==
Teh terdapat pada gelas 3
JAWAB :
#include <stdio.h>
#include <string.h>
int main() {
int banyak_barang, posisi;
char barang[MAX_BARANG][MAX_NAMA_BARANG];
char barang_dicari[MAX_NAMA_BARANG];
return 0;
}